@grwnd/pi-governance 3.0.2 → 3.1.0

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,"sources":["../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/types.ts","../node_modules/.pnpm/lodash-isequal-shim@file+packages+lodash-isequal-shim/node_modules/lodash-isequal-shim/index.cjs","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/helpers.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/errors.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/messages.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/filter.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Query.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Expression.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Pattern.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Predicate.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Variable.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Host.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/dist/src/polar_wasm_api.js","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Polar.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Oso.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/index.ts","../src/lib/policy/oso-engine.ts","../src/lib/facts/oso-memory-store.ts","../src/index.ts","../src/lib/config/loader.ts","../src/lib/config/schema.ts","../src/lib/config/defaults.ts","../src/lib/policy/yaml-engine.ts","../src/lib/policy/factory.ts","../src/lib/identity/env-provider.ts","../src/lib/identity/local-provider.ts","../src/lib/identity/chain.ts","../src/lib/facts/yaml-store.ts","../src/lib/bash/patterns.ts","../src/lib/bash/classifier.ts","../src/lib/dlp/patterns.ts","../src/lib/dlp/scanner.ts","../src/lib/dlp/masker.ts","../src/lib/budget/tracker.ts","../src/lib/config/watcher.ts","../src/lib/templates/selector.ts","../src/lib/templates/renderer.ts","../src/lib/audit/logger.ts","../src/lib/audit/sinks/jsonl.ts","../src/lib/audit/sinks/webhook.ts","../src/lib/hitl/cli-approver.ts","../src/lib/hitl/webhook-approver.ts","../src/lib/hitl/approval.ts","../src/lib/wizard/server.ts","../src/lib/wizard/html.ts"],"sourcesContent":[null,"// Drop-in replacement for deprecated lodash.isequal using Node.js built-in.\n// See: https://github.com/lodash/lodash/issues/5765\nconst { isDeepStrictEqual } = require('node:util');\nmodule.exports = isDeepStrictEqual;\n",null,null,null,null,null,null,null,null,null,null,"let imports = {};\nimports['__wbindgen_placeholder__'] = module.exports;\nlet wasm;\nconst { TextEncoder, TextDecoder } = require(`util`);\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedUint8Memory0 = new Uint8Array();\n\nfunction getUint8Memory0() {\n if (cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nlet cachedInt32Memory0 = new Int32Array();\n\nfunction getInt32Memory0() {\n if (cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachedInt32Memory0;\n}\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nlet cachedFloat64Memory0 = new Float64Array();\n\nfunction getFloat64Memory0() {\n if (cachedFloat64Memory0.byteLength === 0) {\n cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64Memory0;\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_exn_store(addHeapObject(e));\n }\n}\n/**\n*/\nclass Polar {\n\n static __wrap(ptr) {\n const obj = Object.create(Polar.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_polar_free(ptr);\n }\n /**\n */\n constructor() {\n const ret = wasm.polar_wasm_new();\n return Polar.__wrap(ret);\n }\n /**\n * @param {any} sources\n */\n load(sources) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.polar_load(retptr, this.ptr, addHeapObject(sources));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n */\n clearRules() {\n wasm.polar_clearRules(this.ptr);\n }\n /**\n * @param {string} name\n * @param {any} term\n */\n registerConstant(name, term) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.polar_registerConstant(retptr, this.ptr, ptr0, len0, addHeapObject(term));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {Query | undefined}\n */\n nextInlineQuery() {\n const ret = wasm.polar_nextInlineQuery(this.ptr);\n return ret === 0 ? undefined : Query.__wrap(ret);\n }\n /**\n * @param {string} src\n * @returns {Query}\n */\n newQueryFromStr(src) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(src, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.polar_newQueryFromStr(retptr, this.ptr, ptr0, len0);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return Query.__wrap(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {any} term\n * @returns {Query}\n */\n newQueryFromTerm(term) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.polar_newQueryFromTerm(retptr, this.ptr, addHeapObject(term));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return Query.__wrap(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {number}\n */\n newId() {\n const ret = wasm.polar_newId(this.ptr);\n return ret;\n }\n /**\n * @returns {any}\n */\n nextMessage() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.polar_nextMessage(retptr, this.ptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} name\n * @param {any} mro\n */\n registerMro(name, mro) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.polar_registerMro(retptr, this.ptr, ptr0, len0, addHeapObject(mro));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {any} types\n * @param {any} partial_results\n * @param {string} variable\n * @param {string} class_tag\n * @returns {any}\n */\n buildDataFilter(types, partial_results, variable, class_tag) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(variable, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(class_tag, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n wasm.polar_buildDataFilter(retptr, this.ptr, addHeapObject(types), addHeapObject(partial_results), ptr0, len0, ptr1, len1);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {boolean} ignore_no_allow_warning\n */\n setIgnoreNoAllowWarning(ignore_no_allow_warning) {\n wasm.polar_setIgnoreNoAllowWarning(this.ptr, ignore_no_allow_warning);\n }\n}\nmodule.exports.Polar = Polar;\n/**\n*/\nclass Query {\n\n static __wrap(ptr) {\n const obj = Object.create(Query.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_query_free(ptr);\n }\n /**\n * @returns {any}\n */\n nextEvent() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.query_nextEvent(retptr, this.ptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} call_id\n * @param {any} term\n */\n callResult(call_id, term) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.query_callResult(retptr, this.ptr, call_id, addHeapObject(term));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} call_id\n * @param {boolean} result\n */\n questionResult(call_id, result) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.query_questionResult(retptr, this.ptr, call_id, result);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} command\n */\n debugCommand(command) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(command, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.query_debugCommand(retptr, this.ptr, ptr0, len0);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} msg\n */\n appError(msg) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(msg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.query_appError(retptr, this.ptr, ptr0, len0);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {any}\n */\n nextMessage() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.query_nextMessage(retptr, this.ptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {string}\n */\n source() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.query_source(retptr, this.ptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n return getStringFromWasm0(r0, r1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_free(r0, r1);\n }\n }\n /**\n * @param {string} name\n * @param {any} term\n */\n bind(name, term) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.query_bind(retptr, this.ptr, ptr0, len0, addHeapObject(term));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string | undefined} rust_log\n * @param {string | undefined} polar_log\n */\n setLoggingOptions(rust_log, polar_log) {\n var ptr0 = isLikeNone(rust_log) ? 0 : passStringToWasm0(rust_log, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ptr1 = isLikeNone(polar_log) ? 0 : passStringToWasm0(polar_log, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n wasm.query_setLoggingOptions(this.ptr, ptr0, len0, ptr1, len1);\n }\n}\nmodule.exports.Query = Query;\n\nmodule.exports.__wbindgen_string_get = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n};\n\nmodule.exports.__wbindgen_boolean_get = function(arg0) {\n const v = getObject(arg0);\n const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;\n return ret;\n};\n\nmodule.exports.__wbindgen_number_get = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n};\n\nmodule.exports.__wbindgen_is_object = function(arg0) {\n const val = getObject(arg0);\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n};\n\nmodule.exports.__wbindgen_is_string = function(arg0) {\n const ret = typeof(getObject(arg0)) === 'string';\n return ret;\n};\n\nmodule.exports.__wbindgen_is_null = function(arg0) {\n const ret = getObject(arg0) === null;\n return ret;\n};\n\nmodule.exports.__wbindgen_is_undefined = function(arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n};\n\nmodule.exports.__wbindgen_number_new = function(arg0) {\n const ret = arg0;\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbindgen_object_clone_ref = function(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_String_9aa17d6248d519a5 = function(arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbg_get_723f83ba0c34871a = function(arg0, arg1) {\n const ret = getObject(arg0)[takeObject(arg1)];\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_set_ce5827ace4c694dc = function(arg0, arg1, arg2) {\n getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n};\n\nmodule.exports.__wbg_new_abda76e883ba8a5f = function() {\n const ret = new Error();\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_stack_658279fe44541cf6 = function(arg0, arg1) {\n const ret = getObject(arg1).stack;\n const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbg_error_f851667af71bcfc6 = function(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n};\n\nmodule.exports.__wbg_error_06ae29e21839d332 = function(arg0, arg1) {\n console.error(getStringFromWasm0(arg0, arg1));\n};\n\nmodule.exports.__wbg_get_57245cc7d7c7619d = function(arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_length_6e3bbe7c8bd4dbd8 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n};\n\nmodule.exports.__wbg_new_1d9a920c6bfc44a8 = function() {\n const ret = new Array();\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbindgen_is_function = function(arg0) {\n const ret = typeof(getObject(arg0)) === 'function';\n return ret;\n};\n\nmodule.exports.__wbg_new_268f7b7dd3430798 = function() {\n const ret = new Map();\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_next_579e583d33566a86 = function(arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_next_aaef7c8aa5e212ac = function() { return handleError(function (arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n}, arguments) };\n\nmodule.exports.__wbg_done_1b73b0672e15f234 = function(arg0) {\n const ret = getObject(arg0).done;\n return ret;\n};\n\nmodule.exports.__wbg_value_1ccc36bc03462d71 = function(arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_iterator_6f9d4f28845f426c = function() {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_get_765201544a2b6869 = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nmodule.exports.__wbg_call_97ae9d8645dc388b = function() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nmodule.exports.__wbg_new_0b9bfdd97583284e = function() {\n const ret = new Object();\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_isArray_27c46c67f498e15d = function(arg0) {\n const ret = Array.isArray(getObject(arg0));\n return ret;\n};\n\nmodule.exports.__wbg_push_740e4b286702d964 = function(arg0, arg1) {\n const ret = getObject(arg0).push(getObject(arg1));\n return ret;\n};\n\nmodule.exports.__wbg_instanceof_ArrayBuffer_e5e48f4762c5610b = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nmodule.exports.__wbg_values_e42671acbf11ec04 = function(arg0) {\n const ret = getObject(arg0).values();\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_new_8d2af00bc1e329ee = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_setname_d26cefd43ea3a082 = function(arg0, arg1, arg2) {\n getObject(arg0).name = getStringFromWasm0(arg1, arg2);\n};\n\nmodule.exports.__wbg_set_933729cf5b66ac11 = function(arg0, arg1, arg2) {\n const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_isSafeInteger_dfa0593e8d7ac35a = function(arg0) {\n const ret = Number.isSafeInteger(getObject(arg0));\n return ret;\n};\n\nmodule.exports.__wbg_now_58886682b7e790d7 = function() {\n const ret = Date.now();\n return ret;\n};\n\nmodule.exports.__wbg_entries_65a76a413fc91037 = function(arg0) {\n const ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_buffer_3f3d764d4747d564 = function(arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_new_8c3f0052272a457a = function(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_set_83db9690f9353e79 = function(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n};\n\nmodule.exports.__wbg_length_9e1ae1900cb0fbd5 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n};\n\nmodule.exports.__wbg_instanceof_Uint8Array_971eeda69eb75003 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nmodule.exports.__wbg_has_8359f114ce042f5a = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.has(getObject(arg0), getObject(arg1));\n return ret;\n}, arguments) };\n\nmodule.exports.__wbindgen_debug_string = function(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\nmodule.exports.__wbindgen_memory = function() {\n const ret = wasm.memory;\n return addHeapObject(ret);\n};\n\nconst path = require('path').join(__dirname, 'polar_wasm_api_bg.wasm');\nconst bytes = require('fs').readFileSync(path);\n\nconst wasmModule = new WebAssembly.Module(bytes);\nconst wasmInstance = new WebAssembly.Instance(wasmModule, imports);\nwasm = wasmInstance.exports;\nmodule.exports.__wasm = wasm;\n\n",null,null,null,"import type {\n PolicyEngine,\n PolicyDecision,\n PathOperation,\n ExecutionMode,\n BashOverrides,\n} from './engine.js';\nimport type { FactStore } from '../facts/store.js';\n\n// Resource classes for Oso registration\nclass User {\n constructor(\n public role: string,\n public orgUnit?: string,\n ) {}\n}\n\nclass Tool {\n constructor(public name: string) {}\n}\n\nclass FilePath {\n constructor(\n public path: string,\n public orgUnit: string,\n ) {}\n}\n\nclass AgentSession {}\n\nexport class OsoPolicyEngine implements PolicyEngine {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private oso: any;\n private roleConfigs: Map<string, Record<string, unknown>> = new Map();\n\n private constructor() {}\n\n static async create(polarFiles: string[], factStore: FactStore): Promise<OsoPolicyEngine> {\n let OsoClass;\n try {\n const osoModule = await import('oso');\n OsoClass = osoModule.Oso;\n } catch {\n throw new Error(\n 'oso package is not installed. Install it with: npm install oso\\n' +\n 'Or switch to the YAML policy engine: policy.engine: yaml',\n );\n }\n\n const engine = new OsoPolicyEngine();\n engine.oso = new OsoClass();\n\n engine.oso.registerClass(User);\n engine.oso.registerClass(Tool);\n engine.oso.registerClass(FilePath);\n engine.oso.registerClass(AgentSession);\n\n for (const file of polarFiles) {\n await engine.oso.loadFiles([file]);\n }\n\n const bindings = await factStore.getAllRoleBindings();\n for (const binding of bindings) {\n if (binding.config) {\n engine.roleConfigs.set(binding.role, binding.config);\n }\n }\n\n return engine;\n }\n\n evaluateTool(role: string, tool: string): PolicyDecision {\n const user = new User(role);\n const toolResource = new Tool(tool);\n\n // isAllowed is async in oso, but we need sync for the interface.\n // Use a synchronous check via queryRuleOnce if available,\n // otherwise we cache results. For now, use a sync wrapper.\n // NOTE: In practice, the Pi extension calls this in an async context,\n // so we provide an async-compatible path.\n try {\n // oso's isAllowed returns a Promise<boolean> — but we need sync.\n // This will be called from an async context in practice.\n // For the sync interface, we do a best-effort check using queryRule.\n const result = this.oso.isAllowedSync?.(user, 'invoke', toolResource);\n if (result !== undefined) {\n return result ? 'allow' : 'deny';\n }\n } catch {\n // isAllowedSync not available\n }\n\n // Fallback: deny if we can't check synchronously\n return 'deny';\n }\n\n async evaluateToolAsync(role: string, tool: string): Promise<PolicyDecision> {\n const user = new User(role);\n const toolResource = new Tool(tool);\n const allowed = await this.oso.isAllowed(user, 'invoke', toolResource);\n return allowed ? 'allow' : 'deny';\n }\n\n evaluatePath(\n role: string,\n orgUnit: string,\n operation: PathOperation,\n _path: string,\n ): PolicyDecision {\n const user = new User(role, orgUnit);\n const filePath = new FilePath(_path, orgUnit);\n\n try {\n const result = this.oso.isAllowedSync?.(user, operation, filePath);\n if (result !== undefined) {\n return result ? 'allow' : 'deny';\n }\n } catch {\n // fallback\n }\n return 'deny';\n }\n\n async evaluatePathAsync(\n role: string,\n orgUnit: string,\n operation: PathOperation,\n path: string,\n ): Promise<PolicyDecision> {\n const user = new User(role, orgUnit);\n const filePath = new FilePath(path, orgUnit);\n const allowed = await this.oso.isAllowed(user, operation, filePath);\n return allowed ? 'allow' : 'deny';\n }\n\n requiresApproval(role: string, tool: string): boolean {\n // Check if auto_approve is granted\n try {\n const user = new User(role);\n const toolResource = new Tool(tool);\n const result = this.oso.isAllowedSync?.(user, 'auto_approve', toolResource);\n if (result !== undefined) return !result;\n } catch {\n // fallback\n }\n return true; // default: require approval\n }\n\n getExecutionMode(role: string): ExecutionMode {\n const config = this.roleConfigs.get(role);\n return (config?.execution_mode as ExecutionMode) ?? 'supervised';\n }\n\n getTemplateName(role: string): string {\n const config = this.roleConfigs.get(role);\n return (config?.prompt_template as string) ?? 'project-lead';\n }\n\n getBashOverrides(role: string): BashOverrides {\n const config = this.roleConfigs.get(role);\n const overrides = config?.bash_overrides as\n | { additional_blocked?: string[]; additional_allowed?: string[] }\n | undefined;\n if (!overrides) return {};\n\n return {\n additionalBlocked: overrides.additional_blocked?.map((p) => new RegExp(p)),\n additionalAllowed: overrides.additional_allowed?.map((p) => new RegExp(p)),\n };\n }\n\n getTokenBudget(role: string): number {\n const config = this.roleConfigs.get(role);\n return (config?.token_budget_daily as number) ?? -1;\n }\n}\n","import type { FactStore, RoleBinding, Relation } from './store.js';\n\nexport class OsoMemoryFactStore implements FactStore {\n private bindings: RoleBinding[] = [];\n private relations: Relation[] = [];\n\n addRoleBinding(binding: RoleBinding): void {\n this.bindings.push(binding);\n }\n\n addRelation(relation: Relation): void {\n this.relations.push(relation);\n }\n\n async getRoles(userId: string): Promise<RoleBinding[]> {\n return this.bindings.filter((b) => b.userId === userId);\n }\n\n async getAllRoleBindings(): Promise<RoleBinding[]> {\n return [...this.bindings];\n }\n\n async getRelations(subject: string, predicate: string): Promise<Relation[]> {\n return this.relations.filter((r) => r.subject === subject && r.predicate === predicate);\n }\n}\n","// Config\nexport { type GovernanceConfig } from './lib/config/schema.js';\nexport { loadConfig, ConfigValidationError } from './lib/config/loader.js';\n\n// Policy engine\nexport {\n type PolicyEngine,\n type PolicyDecision,\n type PathOperation,\n type ExecutionMode,\n type BashOverrides,\n} from './lib/policy/engine.js';\nexport { YamlPolicyEngine, type YamlRules, type YamlRole } from './lib/policy/yaml-engine.js';\nexport { createPolicyEngine } from './lib/policy/factory.js';\n\n// Identity\nexport { type IdentityProvider, type ResolvedIdentity } from './lib/identity/provider.js';\nexport { EnvIdentityProvider } from './lib/identity/env-provider.js';\nexport { LocalIdentityProvider } from './lib/identity/local-provider.js';\nexport { IdentityChain, createIdentityChain } from './lib/identity/chain.js';\n\n// Facts / permissions\nexport { type FactStore, type RoleBinding, type Relation } from './lib/facts/store.js';\nexport { YamlFactStore } from './lib/facts/yaml-store.js';\nexport { OsoMemoryFactStore } from './lib/facts/oso-memory-store.js';\n\n// Bash security\nexport { type BashClassification, BashClassifier } from './lib/bash/classifier.js';\nexport { SAFE_PATTERNS, DANGEROUS_PATTERNS } from './lib/bash/patterns.js';\n\n// DLP (Data Loss Prevention)\nexport {\n DlpScanner,\n DlpMasker,\n SECRET_PATTERNS as DLP_SECRET_PATTERNS,\n PII_PATTERNS as DLP_PII_PATTERNS,\n compareSeverity,\n type DlpAction,\n type DlpMatch,\n type DlpScanResult,\n type DlpScannerConfig,\n type DlpCustomPattern,\n type DlpAllowlistEntry,\n type DlpPatternDef,\n type DlpSeverity,\n type DlpCategory,\n type MaskingConfig,\n} from './lib/dlp/index.js';\n\n// Budget\nexport { BudgetTracker } from './lib/budget/tracker.js';\n\n// Config watcher\nexport { ConfigWatcher } from './lib/config/watcher.js';\n\n// Templates\nexport { TemplateSelector, type TemplateSelectorConfig } from './lib/templates/selector.js';\nexport { render as renderTemplate } from './lib/templates/renderer.js';\n\n// Audit\nexport { type AuditSink } from './lib/audit/sinks/sink.js';\nexport { type AuditRecord, type AuditEventType } from './lib/audit/schema.js';\nexport { AuditLogger } from './lib/audit/logger.js';\nexport { JsonlAuditSink } from './lib/audit/sinks/jsonl.js';\nexport { WebhookAuditSink } from './lib/audit/sinks/webhook.js';\n\n// HITL\nexport {\n type ApprovalFlow,\n type ApprovalResult,\n type GovernanceToolCall,\n type ConfirmUI,\n type HitlConfig,\n createApprovalFlow,\n} from './lib/hitl/approval.js';\nexport { CliApprover } from './lib/hitl/cli-approver.js';\nexport { WebhookApprover } from './lib/hitl/webhook-approver.js';\n\n// Wizard\nexport { startWizardServer, type WizardServerOptions } from './lib/wizard/index.js';\n","import { existsSync, readFileSync } from 'fs';\nimport { parse as parseYaml } from 'yaml';\nimport { Value } from '@sinclair/typebox/value';\nimport { GovernanceConfigSchema, type GovernanceConfig } from './schema.js';\nimport { DEFAULTS } from './defaults.js';\n\nfunction getConfigPaths(): (string | undefined)[] {\n return [\n process.env['PI_GOV_GOVERNANCE_CONFIG'],\n '.pi/governance.yaml',\n `${process.env['HOME']}/.pi/agent/governance.yaml`,\n ];\n}\n\nexport function loadConfig(): { config: GovernanceConfig; source: string } {\n for (const path of getConfigPaths()) {\n if (path && existsSync(path)) {\n const raw = readFileSync(path, 'utf-8');\n const parsed = parseYaml(raw);\n\n const resolved = resolveEnvVars(parsed);\n\n const errors = [...Value.Errors(GovernanceConfigSchema, resolved)];\n if (errors.length > 0) {\n throw new ConfigValidationError(\n path,\n errors.map((e) => ({ path: e.path, message: e.message })),\n );\n }\n\n const config = Value.Default(GovernanceConfigSchema, resolved) as GovernanceConfig;\n return { config, source: path };\n }\n }\n\n return { config: DEFAULTS, source: 'built-in' };\n}\n\nfunction resolveEnvVars(obj: unknown): unknown {\n if (typeof obj === 'string') {\n return obj.replace(/\\$\\{(\\w+)\\}/g, (_, name: string) => process.env[name] ?? '');\n }\n if (Array.isArray(obj)) return obj.map(resolveEnvVars);\n if (obj && typeof obj === 'object') {\n return Object.fromEntries(\n Object.entries(obj as Record<string, unknown>).map(([k, v]) => [k, resolveEnvVars(v)]),\n );\n }\n return obj;\n}\n\nexport class ConfigValidationError extends Error {\n constructor(path: string, errors: Array<{ path: string; message: string }>) {\n const details = errors.map((e) => ` ${e.path}: ${e.message}`).join('\\n');\n super(`Invalid governance config at ${path}:\\n${details}`);\n this.name = 'ConfigValidationError';\n }\n}\n","import { Type, type Static } from '@sinclair/typebox';\n\nconst AuthEnvConfig = Type.Object({\n user_var: Type.String({ default: 'PI_GOV_USER' }),\n role_var: Type.String({ default: 'PI_GOV_ROLE' }),\n org_unit_var: Type.String({ default: 'PI_GOV_ORG_UNIT' }),\n});\n\nconst AuthLocalConfig = Type.Object({\n users_file: Type.String({ default: './users.yaml' }),\n});\n\nconst AuthConfig = Type.Object({\n provider: Type.Union([Type.Literal('env'), Type.Literal('local'), Type.Literal('oidc')], {\n default: 'env',\n }),\n env: Type.Optional(AuthEnvConfig),\n local: Type.Optional(AuthLocalConfig),\n});\n\nexport type AuthConfigType = Static<typeof AuthConfig>;\n\nconst YamlPolicyConfig = Type.Object({\n rules_file: Type.String({ default: './governance-rules.yaml' }),\n});\n\nconst OsoPolicyConfig = Type.Object({\n polar_files: Type.Array(Type.String(), {\n default: ['./policies/base.polar', './policies/tools.polar'],\n }),\n});\n\nconst PolicyConfig = Type.Object({\n engine: Type.Union([Type.Literal('yaml'), Type.Literal('oso')], { default: 'yaml' }),\n yaml: Type.Optional(YamlPolicyConfig),\n oso: Type.Optional(OsoPolicyConfig),\n});\n\nconst TemplatesConfig = Type.Object({\n directory: Type.String({ default: './templates/' }),\n default: Type.String({ default: 'project-lead' }),\n});\n\nconst HitlWebhookConfig = Type.Object({\n url: Type.String(),\n});\n\nconst HitlConfig = Type.Object({\n default_mode: Type.Union(\n [Type.Literal('autonomous'), Type.Literal('supervised'), Type.Literal('dry_run')],\n { default: 'supervised' },\n ),\n approval_channel: Type.Union([Type.Literal('cli'), Type.Literal('webhook')], { default: 'cli' }),\n timeout_seconds: Type.Number({ default: 300, minimum: 10, maximum: 3600 }),\n webhook: Type.Optional(HitlWebhookConfig),\n});\n\nconst JsonlSinkConfig = Type.Object({\n type: Type.Literal('jsonl'),\n path: Type.String({ default: '~/.pi/agent/audit.jsonl' }),\n});\n\nconst WebhookSinkConfig = Type.Object({\n type: Type.Literal('webhook'),\n url: Type.String(),\n});\n\nconst PostgresSinkConfig = Type.Object({\n type: Type.Literal('postgres'),\n connection: Type.String(),\n});\n\nconst AuditSinkConfig = Type.Union([JsonlSinkConfig, WebhookSinkConfig, PostgresSinkConfig]);\n\nconst AuditConfig = Type.Object({\n sinks: Type.Array(AuditSinkConfig, {\n default: [{ type: 'jsonl', path: '~/.pi/agent/audit.jsonl' }],\n }),\n});\n\nconst OrgUnitOverride = Type.Object({\n hitl: Type.Optional(Type.Partial(HitlConfig)),\n policy: Type.Optional(\n Type.Object({\n extra_polar: Type.Optional(Type.String()),\n extra_rules: Type.Optional(Type.String()),\n }),\n ),\n});\n\n// --- DLP (Data Loss Prevention) ---\n\nconst DlpMaskingConfig = Type.Object({\n strategy: Type.Union([Type.Literal('partial'), Type.Literal('full'), Type.Literal('hash')], {\n default: 'partial',\n }),\n show_chars: Type.Optional(Type.Number({ default: 4, minimum: 0 })),\n placeholder: Type.Optional(Type.String({ default: '***' })),\n});\n\nconst DlpCustomPatternConfig = Type.Object({\n name: Type.String(),\n pattern: Type.String(),\n severity: Type.Union([\n Type.Literal('low'),\n Type.Literal('medium'),\n Type.Literal('high'),\n Type.Literal('critical'),\n ]),\n action: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n});\n\nconst DlpAllowlistEntryConfig = Type.Object({\n pattern: Type.String(),\n});\n\nconst DlpRoleOverrideConfig = Type.Object({\n enabled: Type.Optional(Type.Boolean()),\n mode: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n on_input: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n on_output: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n});\n\nconst DlpConfig = Type.Object({\n enabled: Type.Boolean({ default: false }),\n mode: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')], {\n default: 'audit',\n }),\n ),\n on_input: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n on_output: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n masking: Type.Optional(DlpMaskingConfig),\n severity_threshold: Type.Optional(\n Type.Union(\n [Type.Literal('low'), Type.Literal('medium'), Type.Literal('high'), Type.Literal('critical')],\n { default: 'low' },\n ),\n ),\n built_in: Type.Optional(\n Type.Object({\n secrets: Type.Boolean({ default: true }),\n pii: Type.Boolean({ default: true }),\n }),\n ),\n custom_patterns: Type.Optional(Type.Array(DlpCustomPatternConfig)),\n allowlist: Type.Optional(Type.Array(DlpAllowlistEntryConfig)),\n role_overrides: Type.Optional(Type.Record(Type.String(), DlpRoleOverrideConfig)),\n});\n\nexport type DlpConfigType = Static<typeof DlpConfig>;\n\nexport const GovernanceConfigSchema = Type.Object({\n auth: Type.Optional(AuthConfig),\n policy: Type.Optional(PolicyConfig),\n templates: Type.Optional(TemplatesConfig),\n hitl: Type.Optional(HitlConfig),\n audit: Type.Optional(AuditConfig),\n dlp: Type.Optional(DlpConfig),\n org_units: Type.Optional(Type.Record(Type.String(), OrgUnitOverride)),\n});\n\nexport type GovernanceConfig = Static<typeof GovernanceConfigSchema>;\n","import type { GovernanceConfig } from './schema.js';\n\nexport const DEFAULTS: GovernanceConfig = {\n auth: {\n provider: 'env',\n env: {\n user_var: 'PI_GOV_USER',\n role_var: 'PI_GOV_ROLE',\n org_unit_var: 'PI_GOV_ORG_UNIT',\n },\n },\n policy: {\n engine: 'yaml',\n yaml: {\n rules_file: './governance-rules.yaml',\n },\n },\n templates: {\n directory: './templates/',\n default: 'project-lead',\n },\n hitl: {\n default_mode: 'supervised',\n approval_channel: 'cli',\n timeout_seconds: 300,\n },\n audit: {\n sinks: [{ type: 'jsonl', path: '~/.pi/agent/audit.jsonl' }],\n },\n dlp: {\n enabled: true,\n mode: 'audit',\n on_input: 'block',\n on_output: 'mask',\n masking: {\n strategy: 'partial',\n show_chars: 4,\n placeholder: '***',\n },\n severity_threshold: 'low',\n built_in: {\n secrets: true,\n pii: true,\n },\n },\n};\n","import { readFileSync } from 'fs';\nimport { parse as parseYaml } from 'yaml';\nimport { minimatch } from 'minimatch';\nimport type {\n PolicyEngine,\n PolicyDecision,\n PathOperation,\n ExecutionMode,\n BashOverrides,\n} from './engine.js';\n\nexport interface YamlRole {\n allowed_tools: string[];\n blocked_tools: string[];\n prompt_template: string;\n execution_mode: ExecutionMode;\n human_approval: {\n required_for: string[];\n auto_approve?: string[];\n };\n token_budget_daily: number;\n allowed_paths: string[];\n blocked_paths: string[];\n bash_overrides?: {\n additional_blocked?: string[];\n additional_allowed?: string[];\n };\n}\n\nexport interface YamlRules {\n roles: Record<string, YamlRole>;\n}\n\nexport class YamlPolicyEngine implements PolicyEngine {\n private rules: YamlRules;\n\n constructor(rulesFilePathOrRules: string | YamlRules) {\n if (typeof rulesFilePathOrRules === 'string') {\n const raw = readFileSync(rulesFilePathOrRules, 'utf-8');\n this.rules = parseYaml(raw) as YamlRules;\n } else {\n this.rules = rulesFilePathOrRules;\n }\n }\n\n private getRole(role: string): YamlRole {\n const r = this.rules.roles[role];\n if (!r) {\n throw new Error(\n `Unknown role: ${role}. Available roles: ${Object.keys(this.rules.roles).join(', ')}`,\n );\n }\n return r;\n }\n\n evaluateTool(role: string, tool: string): PolicyDecision {\n const r = this.getRole(role);\n\n // Check blocked list first\n if (r.blocked_tools.includes(tool)) return 'deny';\n\n // Check allowed list\n if (r.allowed_tools.includes('all') || r.allowed_tools.includes(tool)) {\n return 'allow';\n }\n\n // Not in either list — deny by default\n return 'deny';\n }\n\n evaluatePath(\n role: string,\n _orgUnit: string,\n _operation: PathOperation,\n path: string,\n ): PolicyDecision {\n const r = this.getRole(role);\n\n // Check blocked paths first (takes precedence)\n for (const pattern of r.blocked_paths) {\n if (minimatch(path, pattern, { dot: true })) {\n return 'deny';\n }\n }\n\n // Check allowed paths\n for (const pattern of r.allowed_paths) {\n const resolved = pattern.replace('{{project_path}}', process.cwd());\n if (minimatch(path, resolved, { dot: true })) {\n return 'allow';\n }\n }\n\n // Not in allowed paths — deny\n return 'deny';\n }\n\n requiresApproval(role: string, tool: string): boolean {\n const r = this.getRole(role);\n\n // Auto-approve takes precedence\n if (r.human_approval.auto_approve?.includes(tool)) return false;\n\n // Check required list\n if (r.human_approval.required_for.includes('all')) return true;\n return r.human_approval.required_for.includes(tool);\n }\n\n getExecutionMode(role: string): ExecutionMode {\n return this.getRole(role).execution_mode;\n }\n\n getTemplateName(role: string): string {\n return this.getRole(role).prompt_template;\n }\n\n getBashOverrides(role: string): BashOverrides {\n const r = this.getRole(role);\n const overrides = r.bash_overrides;\n if (!overrides) return {};\n\n return {\n additionalBlocked: overrides.additional_blocked?.map((p) => new RegExp(p)),\n additionalAllowed: overrides.additional_allowed?.map((p) => new RegExp(p)),\n };\n }\n\n getTokenBudget(role: string): number {\n return this.getRole(role).token_budget_daily;\n }\n}\n","import type { PolicyEngine } from './engine.js';\nimport { YamlPolicyEngine } from './yaml-engine.js';\n\ninterface PolicyConfig {\n engine?: 'yaml' | 'oso';\n yaml?: { rules_file?: string };\n oso?: { polar_files?: string[] };\n}\n\nexport async function createPolicyEngine(config?: PolicyConfig): Promise<PolicyEngine> {\n const engine = config?.engine ?? 'yaml';\n\n if (engine === 'yaml') {\n const rulesFile = config?.yaml?.rules_file ?? './governance-rules.yaml';\n return new YamlPolicyEngine(rulesFile);\n }\n\n if (engine === 'oso') {\n const { OsoPolicyEngine } = await import('./oso-engine.js');\n const { OsoMemoryFactStore } = await import('../facts/oso-memory-store.js');\n\n const polarFiles = config?.oso?.polar_files ?? [\n './policies/base.polar',\n './policies/tools.polar',\n ];\n\n const factStore = new OsoMemoryFactStore();\n return OsoPolicyEngine.create(polarFiles, factStore);\n }\n\n throw new Error(`Unknown policy engine: ${engine}. Must be 'yaml' or 'oso'.`);\n}\n","import type { IdentityProvider, ResolvedIdentity } from './provider.js';\n\nexport class EnvIdentityProvider implements IdentityProvider {\n name = 'env';\n\n constructor(\n private userVar: string = 'PI_GOV_USER',\n private roleVar: string = 'PI_GOV_ROLE',\n private orgUnitVar: string = 'PI_GOV_ORG_UNIT',\n ) {}\n\n async resolve(): Promise<ResolvedIdentity | null> {\n const userId = process.env[this.userVar];\n const role = process.env[this.roleVar];\n const orgUnit = process.env[this.orgUnitVar];\n\n if (!userId || !role) return null;\n\n return {\n userId,\n role,\n orgUnit: orgUnit ?? 'default',\n source: 'env',\n };\n }\n}\n","import { readFileSync } from 'fs';\nimport { parse as parseYaml } from 'yaml';\nimport type { IdentityProvider, ResolvedIdentity } from './provider.js';\n\ninterface UserEntry {\n role: string;\n org_unit?: string;\n}\n\nexport class LocalIdentityProvider implements IdentityProvider {\n name = 'local';\n private users: Record<string, UserEntry>;\n\n constructor(usersFilePath: string) {\n const raw = readFileSync(usersFilePath, 'utf-8');\n this.users = parseYaml(raw) as Record<string, UserEntry>;\n }\n\n async resolve(): Promise<ResolvedIdentity | null> {\n // Try to determine the current system username\n const username = process.env.USER || process.env.USERNAME;\n if (!username) return null;\n\n const entry = this.users[username];\n if (!entry) return null;\n\n return {\n userId: username,\n role: entry.role,\n orgUnit: entry.org_unit ?? 'default',\n source: 'local',\n };\n }\n}\n","import type { IdentityProvider, ResolvedIdentity } from './provider.js';\nimport type { AuthConfigType } from '../config/schema.js';\nimport { EnvIdentityProvider } from './env-provider.js';\nimport { LocalIdentityProvider } from './local-provider.js';\n\nexport class IdentityChain {\n private providers: IdentityProvider[];\n\n constructor(providers: IdentityProvider[]) {\n this.providers = providers;\n }\n\n async resolve(): Promise<ResolvedIdentity> {\n for (const provider of this.providers) {\n const identity = await provider.resolve();\n if (identity) return identity;\n }\n\n // Fallback: default restricted identity\n return {\n userId: 'unknown',\n role: 'analyst', // most restrictive role by default\n orgUnit: 'default',\n source: 'fallback',\n };\n }\n}\n\nexport function createIdentityChain(config?: AuthConfigType): IdentityChain {\n const providers: IdentityProvider[] = [];\n\n // Always try env first (fastest, works in CI)\n providers.push(\n new EnvIdentityProvider(\n config?.env?.user_var,\n config?.env?.role_var,\n config?.env?.org_unit_var,\n ),\n );\n\n // Then try local file if configured\n if (config?.provider === 'local' && config.local?.users_file) {\n try {\n providers.push(new LocalIdentityProvider(config.local.users_file));\n } catch {\n // users file not found — skip this provider\n }\n }\n\n return new IdentityChain(providers);\n}\n","import { readFileSync } from 'node:fs';\nimport { parse as parseYaml } from 'yaml';\nimport type { FactStore, RoleBinding, Relation } from './store.js';\n\ninterface YamlUserEntry {\n role: string;\n org_unit?: string;\n config?: Record<string, unknown>;\n}\n\ntype YamlUsersFile = Record<string, YamlUserEntry>;\n\nexport class YamlFactStore implements FactStore {\n private bindings: RoleBinding[];\n\n constructor(usersFilePath: string);\n constructor(data: YamlUsersFile);\n constructor(input: string | YamlUsersFile) {\n if (typeof input === 'string') {\n const raw = readFileSync(input, 'utf-8');\n const parsed = parseYaml(raw) as YamlUsersFile;\n this.bindings = this.parseUsers(parsed);\n } else {\n this.bindings = this.parseUsers(input);\n }\n }\n\n private parseUsers(users: YamlUsersFile): RoleBinding[] {\n return Object.entries(users).map(([userId, entry]) => ({\n userId,\n role: entry.role,\n orgUnit: entry.org_unit ?? 'default',\n config: entry.config,\n }));\n }\n\n async getRoles(userId: string): Promise<RoleBinding[]> {\n return this.bindings.filter((b) => b.userId === userId);\n }\n\n async getAllRoleBindings(): Promise<RoleBinding[]> {\n return [...this.bindings];\n }\n\n async getRelations(_subject: string, _predicate: string): Promise<Relation[]> {\n // YAML store does not support relations — return empty\n return [];\n }\n}\n","export const SAFE_PATTERNS: RegExp[] = [\n // File viewing\n /^(cat|head|tail|less|more)\\s/,\n /^(file|stat|wc|md5sum|sha256sum)\\s/,\n\n // Directory listing\n /^(ls|ll|la|tree|du|df)\\b/,\n /^(pwd|cd)\\b/,\n\n // Searching\n /^(grep|rg|ag|ack|find|fd|locate)\\s/,\n /^(which|whereis|type|command)\\s/,\n\n // Text processing (read-only)\n /^(sort|uniq|cut|awk|sed)\\s.*(?!-i)/, // sed without -i (in-place)\n /^(tr|diff|comm|join|paste)\\s/,\n /^(jq|yq|xmlstarlet)\\s/,\n\n // Git (read-only operations)\n /^git\\s+(log|status|diff|show|blame|branch|tag|remote|stash list)\\b/,\n /^git\\s+(ls-files|ls-tree|rev-parse|describe)\\b/,\n\n // System info\n /^(whoami|id|groups|uname|hostname|date|uptime|env|printenv)\\b/,\n /^(echo|printf)\\s/,\n\n // Package info (not install)\n /^(npm|yarn|pnpm)\\s+(list|ls|info|show|view|outdated|audit)\\b/,\n /^pip\\s+(list|show|freeze)\\b/,\n /^(node|python|ruby|go)\\s+--version\\b/,\n /^(node|python|ruby)\\s+-e\\s/,\n\n // Networking (read-only)\n /^(ping|dig|nslookup|host|traceroute|tracepath)\\s/,\n /^curl\\s.*--head\\b/,\n /^curl\\s.*-I\\b/,\n\n // Additional file viewing / inspection\n /^(basename|dirname|realpath|readlink)\\s/,\n /^(xxd|od|hexdump)\\s/,\n /^(strings|nm|objdump)\\s/,\n\n // Additional search / navigation\n /^(xargs)\\s/,\n /^(tee)\\s/,\n\n // Additional text processing (read-only)\n /^(fmt|fold|column|expand|unexpand)\\s/,\n /^(tac|rev|nl)\\s/,\n /^(yes|seq|shuf)\\s/,\n\n // Additional system info\n /^(lsof|ps|top|htop|vmstat|iostat|free|df)\\b/,\n /^(lscpu|lsblk|lsusb|lspci)\\b/,\n /^(nproc|getconf)\\b/,\n\n // Additional git read-only\n /^git\\s+(config\\s+--get|config\\s+-l|shortlog|reflog|cherry)\\b/,\n /^git\\s+(cat-file|count-objects|fsck|verify-pack)\\b/,\n];\n\nexport const DANGEROUS_PATTERNS: RegExp[] = [\n // Destructive file operations\n /\\brm\\s+(-[a-zA-Z]*r|-[a-zA-Z]*f|--recursive|--force)\\b/,\n /\\brm\\s+-[a-zA-Z]*rf\\b/,\n /\\bshred\\b/,\n\n // Privilege escalation\n /\\bsudo\\b/,\n /\\bsu\\s+-?\\s*\\w/,\n /\\bdoas\\b/,\n\n // Permission/ownership changes\n /\\bchmod\\b/,\n /\\bchown\\b/,\n /\\bchgrp\\b/,\n\n // Disk/partition operations\n /\\bdd\\b.*\\bof=/,\n /\\bmkfs\\b/,\n /\\bfdisk\\b/,\n /\\bparted\\b/,\n /\\bmount\\b/,\n /\\bumount\\b/,\n\n // Remote code execution\n /\\bcurl\\b.*\\|\\s*(bash|sh|zsh|python|perl|ruby)\\b/,\n /\\bwget\\b.*\\|\\s*(bash|sh|zsh|python|perl|ruby)\\b/,\n /\\bcurl\\b.*>\\s*.*\\.sh\\s*&&/,\n\n // Remote access\n /\\bssh\\b/,\n /\\bscp\\b/,\n /\\brsync\\b.*:\\//,\n /\\bnc\\s+(-[a-zA-Z]*l|-[a-zA-Z]*p|--listen)\\b/,\n /\\bncat\\b/,\n /\\bsocat\\b/,\n /\\btelnet\\b/,\n\n // System modification\n /\\bsystemctl\\s+(start|stop|restart|enable|disable)\\b/,\n /\\bservice\\s+\\w+\\s+(start|stop|restart)\\b/,\n /\\biptables\\b/,\n /\\bufw\\b/,\n /\\bfirewall-cmd\\b/,\n\n // Package installation (can run arbitrary post-install scripts)\n /\\bnpm\\s+(install|i|add|ci)\\b/,\n /\\byarn\\s+(add|install)\\b/,\n /\\bpnpm\\s+(add|install|i)\\b/,\n /\\bpip\\s+install\\b/,\n /\\bapt(-get)?\\s+install\\b/,\n /\\bbrew\\s+install\\b/,\n /\\bcargo\\s+install\\b/,\n\n // Environment variable manipulation (can leak secrets)\n /\\bexport\\b.*(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)/i,\n\n // Cron / scheduled tasks\n /\\bcrontab\\b/,\n /\\bat\\s+/,\n\n // Container escape vectors\n /\\bdocker\\s+(run|exec|build|push|pull)\\b/,\n /\\bkubectl\\s+(exec|run|apply|delete)\\b/,\n\n // Process manipulation\n /\\bkill\\b/,\n /\\bkillall\\b/,\n /\\bpkill\\b/,\n\n // History manipulation\n /\\bhistory\\s+-c\\b/,\n /\\bunset\\s+HISTFILE\\b/,\n\n // Compiler/build (can execute arbitrary code)\n /\\bmake\\s/,\n /\\bgcc\\b/,\n /\\bg\\+\\+/,\n\n // Governance config tampering — shell-based writes to governance files\n /(cat|echo|printf)\\s.*>\\s*.*governance(-rules)?\\.yaml/,\n /\\btee\\s+.*governance(-rules)?\\.yaml/,\n /sed\\s+-i.*governance(-rules)?\\.yaml/,\n /(cp|mv|rm)\\s.*governance(-rules)?\\.yaml/,\n /(cat|echo|printf)\\s.*>\\s*.*\\.pi\\/governance/,\n /\\btee\\s+.*\\.pi\\/governance/,\n /sed\\s+-i.*\\.pi\\/governance/,\n /(cp|mv|rm)\\s.*\\.pi\\/governance/,\n];\n","import { SAFE_PATTERNS, DANGEROUS_PATTERNS } from './patterns.js';\nimport type { BashOverrides } from '../policy/engine.js';\n\nexport type BashClassification = 'safe' | 'dangerous' | 'needs_review';\n\nexport class BashClassifier {\n private safePatterns: RegExp[];\n private dangerousPatterns: RegExp[];\n\n constructor(overrides?: BashOverrides) {\n this.safePatterns = [...SAFE_PATTERNS, ...(overrides?.additionalAllowed ?? [])];\n this.dangerousPatterns = [...DANGEROUS_PATTERNS, ...(overrides?.additionalBlocked ?? [])];\n }\n\n classify(command: string): BashClassification {\n const trimmed = command.trim();\n\n // Check dangerous patterns against the full unsplit command first.\n // This catches patterns like \"curl ... | bash\" that span pipe boundaries.\n for (const pattern of this.dangerousPatterns) {\n if (pattern.test(trimmed)) return 'dangerous';\n }\n\n // Multi-command detection: if the command contains pipes, semicolons,\n // or && / ||, classify each segment independently and return the\n // most restrictive classification\n const segments = this.splitCommand(trimmed);\n\n if (segments.length > 1) {\n const classifications = segments.map((s) => this.classifySingle(s));\n if (classifications.includes('dangerous')) return 'dangerous';\n if (classifications.includes('needs_review')) return 'needs_review';\n return 'safe';\n }\n\n return this.classifySingle(trimmed);\n }\n\n private classifySingle(command: string): BashClassification {\n const trimmed = command.trim();\n\n // Check dangerous first (takes precedence)\n for (const pattern of this.dangerousPatterns) {\n if (pattern.test(trimmed)) return 'dangerous';\n }\n\n // Check safe\n for (const pattern of this.safePatterns) {\n if (pattern.test(trimmed)) return 'safe';\n }\n\n // Default: needs review\n return 'needs_review';\n }\n\n private splitCommand(command: string): string[] {\n // Split on pipes, semicolons, && and || while respecting quotes\n // This is a simplified parser — not a full shell parser\n const segments: string[] = [];\n let current = '';\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let escaped = false;\n\n for (let i = 0; i < command.length; i++) {\n const char = command[i]!;\n\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n\n if (char === '\\\\') {\n escaped = true;\n current += char;\n continue;\n }\n\n if (char === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n current += char;\n continue;\n }\n\n if (char === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n current += char;\n continue;\n }\n\n if (!inSingleQuote && !inDoubleQuote) {\n if (char === '|' && command[i + 1] !== '|') {\n segments.push(current.trim());\n current = '';\n continue;\n }\n if (char === ';') {\n segments.push(current.trim());\n current = '';\n continue;\n }\n if (char === '&' && command[i + 1] === '&') {\n segments.push(current.trim());\n current = '';\n i++; // skip second &\n continue;\n }\n if (char === '|' && command[i + 1] === '|') {\n segments.push(current.trim());\n current = '';\n i++; // skip second |\n continue;\n }\n }\n\n current += char;\n }\n\n if (current.trim()) segments.push(current.trim());\n return segments.filter((s) => s.length > 0);\n }\n}\n","export type DlpSeverity = 'low' | 'medium' | 'high' | 'critical';\nexport type DlpCategory = 'secret' | 'pii' | 'custom';\n\nexport interface DlpPatternDef {\n name: string;\n pattern: RegExp;\n severity: DlpSeverity;\n category: DlpCategory;\n}\n\nexport const SECRET_PATTERNS: DlpPatternDef[] = [\n // AWS\n {\n name: 'aws_access_key',\n pattern: /\\b(AKIA[0-9A-Z]{16})\\b/g,\n severity: 'critical',\n category: 'secret',\n },\n {\n name: 'aws_secret_key',\n pattern: /\\b([A-Za-z0-9/+=]{40})(?=\\s|$|\"|')/g,\n severity: 'critical',\n category: 'secret',\n },\n\n // GitHub\n {\n name: 'github_pat',\n pattern: /\\b(ghp_[A-Za-z0-9]{36,})\\b/g,\n severity: 'critical',\n category: 'secret',\n },\n {\n name: 'github_oauth',\n pattern: /\\b(gho_[A-Za-z0-9]{36,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n {\n name: 'github_app_token',\n pattern: /\\b(ghu_[A-Za-z0-9]{36,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // Anthropic\n {\n name: 'anthropic_api_key',\n pattern: /\\b(sk-ant-api03-[A-Za-z0-9_-]{90,})\\b/g,\n severity: 'critical',\n category: 'secret',\n },\n\n // OpenAI\n {\n name: 'openai_api_key',\n pattern: /\\b(sk-[A-Za-z0-9]{20,}T3BlbkFJ[A-Za-z0-9]{20,})\\b/g,\n severity: 'critical',\n category: 'secret',\n },\n\n // JWT\n {\n name: 'jwt_token',\n pattern: /\\b(eyJ[A-Za-z0-9_-]{10,}\\.eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // Private key headers\n {\n name: 'private_key',\n pattern: /-----BEGIN\\s+(RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/g,\n severity: 'critical',\n category: 'secret',\n },\n\n // Database connection strings\n {\n name: 'database_url',\n pattern: /\\b((?:postgres|mysql|mongodb|redis):\\/\\/[^\\s'\"]{10,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // Slack\n {\n name: 'slack_token',\n pattern: /\\b(xox[bpras]-[A-Za-z0-9-]{10,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // Stripe\n {\n name: 'stripe_key',\n pattern: /\\b([rs]k_(?:live|test)_[A-Za-z0-9]{20,})\\b/g,\n severity: 'critical',\n category: 'secret',\n },\n\n // npm\n {\n name: 'npm_token',\n pattern: /\\b(npm_[A-Za-z0-9]{36,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // SendGrid\n {\n name: 'sendgrid_key',\n pattern: /\\b(SG\\.[A-Za-z0-9_-]{22,}\\.[A-Za-z0-9_-]{22,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // Generic API key patterns (env-var style assignments)\n {\n name: 'generic_api_key',\n pattern:\n /\\b(?:API_KEY|API_SECRET|ACCESS_TOKEN|AUTH_TOKEN|SECRET_KEY)\\s*[=:]\\s*['\"]?([A-Za-z0-9_-]{16,})['\"]?/gi,\n severity: 'medium',\n category: 'secret',\n },\n\n // High-entropy string near keyword context\n {\n name: 'generic_secret_assignment',\n pattern: /\\b(?:password|passwd|secret|token|credential)\\s*[=:]\\s*['\"]([^'\"]{8,})['\"]?/gi,\n severity: 'medium',\n category: 'secret',\n },\n];\n\nexport const PII_PATTERNS: DlpPatternDef[] = [\n // SSN (US)\n {\n name: 'ssn',\n pattern: /\\b(\\d{3}-\\d{2}-\\d{4})\\b/g,\n severity: 'critical',\n category: 'pii',\n },\n\n // Credit card numbers\n {\n name: 'credit_card',\n pattern:\n /\\b(4\\d{3}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}|5[1-5]\\d{2}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}|3[47]\\d{2}[\\s-]?\\d{6}[\\s-]?\\d{5}|6(?:011|5\\d{2})[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4})\\b/g,\n severity: 'critical',\n category: 'pii',\n },\n\n // Email address\n {\n name: 'email',\n pattern: /\\b([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,})\\b/g,\n severity: 'low',\n category: 'pii',\n },\n\n // US phone number\n {\n name: 'phone_us',\n pattern: /\\b(\\+?1?[-.\\s]?\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4})\\b/g,\n severity: 'medium',\n category: 'pii',\n },\n\n // IPv4 address\n {\n name: 'ipv4',\n pattern:\n /\\b((?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))\\b/g,\n severity: 'low',\n category: 'pii',\n },\n];\n","import { SECRET_PATTERNS, PII_PATTERNS } from './patterns.js';\nimport type { DlpPatternDef, DlpSeverity, DlpCategory } from './patterns.js';\n\nexport type DlpAction = 'audit' | 'mask' | 'block';\n\nexport interface DlpMatch {\n patternName: string;\n category: DlpCategory;\n severity: DlpSeverity;\n start: number;\n end: number;\n matched: string;\n}\n\nexport interface DlpScanResult {\n hasMatches: boolean;\n matches: DlpMatch[];\n}\n\nexport interface DlpCustomPattern {\n name: string;\n pattern: string;\n severity: DlpSeverity;\n action?: DlpAction;\n}\n\nexport interface DlpAllowlistEntry {\n pattern: string;\n}\n\nexport interface DlpScannerConfig {\n enabled: boolean;\n mode: DlpAction;\n on_input?: DlpAction;\n on_output?: DlpAction;\n severity_threshold: DlpSeverity;\n built_in: { secrets: boolean; pii: boolean };\n custom_patterns: DlpCustomPattern[];\n allowlist: DlpAllowlistEntry[];\n pattern_overrides: Map<string, DlpAction>;\n}\n\nconst SEVERITY_ORDER: Record<DlpSeverity, number> = {\n low: 0,\n medium: 1,\n high: 2,\n critical: 3,\n};\n\ninterface CompiledPattern {\n def: DlpPatternDef;\n action?: DlpAction;\n}\n\nexport class DlpScanner {\n private patterns: CompiledPattern[];\n private allowlistRegexps: RegExp[];\n private severityThreshold: number;\n private config: DlpScannerConfig;\n\n constructor(config: DlpScannerConfig) {\n this.config = config;\n this.severityThreshold = SEVERITY_ORDER[config.severity_threshold];\n this.patterns = [];\n this.allowlistRegexps = [];\n\n // Compile built-in patterns\n if (config.built_in.secrets) {\n for (const def of SECRET_PATTERNS) {\n this.patterns.push({ def });\n }\n }\n if (config.built_in.pii) {\n for (const def of PII_PATTERNS) {\n this.patterns.push({ def });\n }\n }\n\n // Compile custom patterns\n for (const cp of config.custom_patterns) {\n const def: DlpPatternDef = {\n name: cp.name,\n pattern: new RegExp(cp.pattern, 'g'),\n severity: cp.severity,\n category: 'custom',\n };\n this.patterns.push({ def, action: cp.action });\n }\n\n // Compile pattern overrides from config\n for (const compiled of this.patterns) {\n const override = config.pattern_overrides.get(compiled.def.name);\n if (override) {\n compiled.action = override;\n }\n }\n\n // Compile allowlist\n for (const entry of config.allowlist) {\n this.allowlistRegexps.push(new RegExp(entry.pattern));\n }\n }\n\n scan(text: string): DlpScanResult {\n if (!this.config.enabled || text.length === 0) {\n return { hasMatches: false, matches: [] };\n }\n\n const matches: DlpMatch[] = [];\n\n for (const compiled of this.patterns) {\n // Skip patterns below severity threshold\n if (SEVERITY_ORDER[compiled.def.severity] < this.severityThreshold) {\n continue;\n }\n\n // Reset the regex (global flag means lastIndex needs reset)\n const regex = new RegExp(compiled.def.pattern.source, compiled.def.pattern.flags);\n\n let match: RegExpExecArray | null;\n while ((match = regex.exec(text)) !== null) {\n // Use the first capturing group if present, otherwise the full match\n const matched = match[1] ?? match[0];\n const start = match[1] ? match.index + match[0].indexOf(match[1]) : match.index;\n const end = start + matched.length;\n\n // Check allowlist\n if (this.isAllowlisted(matched)) {\n continue;\n }\n\n matches.push({\n patternName: compiled.def.name,\n category: compiled.def.category,\n severity: compiled.def.severity,\n start,\n end,\n matched,\n });\n }\n }\n\n return { hasMatches: matches.length > 0, matches };\n }\n\n getAction(direction: 'input' | 'output'): DlpAction {\n if (direction === 'input' && this.config.on_input) {\n return this.config.on_input;\n }\n if (direction === 'output' && this.config.on_output) {\n return this.config.on_output;\n }\n return this.config.mode;\n }\n\n getPatternAction(match: DlpMatch, direction: 'input' | 'output'): DlpAction {\n // Check per-pattern override first\n const compiled = this.patterns.find((p) => p.def.name === match.patternName);\n if (compiled?.action) {\n return compiled.action;\n }\n\n // Fall back to directional override or global mode\n return this.getAction(direction);\n }\n\n private isAllowlisted(value: string): boolean {\n for (const re of this.allowlistRegexps) {\n if (re.test(value)) return true;\n }\n return false;\n }\n}\n\nexport function compareSeverity(a: DlpSeverity, b: DlpSeverity): number {\n return SEVERITY_ORDER[a] - SEVERITY_ORDER[b];\n}\n","import { createHash } from 'node:crypto';\nimport type { DlpMatch } from './scanner.js';\n\nexport interface MaskingConfig {\n strategy: 'partial' | 'full' | 'hash';\n show_chars: number;\n placeholder: string;\n}\n\nconst DEFAULT_CONFIG: MaskingConfig = {\n strategy: 'partial',\n show_chars: 4,\n placeholder: '***',\n};\n\nexport class DlpMasker {\n private config: MaskingConfig;\n\n constructor(config?: Partial<MaskingConfig>) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n\n maskValue(value: string): string {\n switch (this.config.strategy) {\n case 'full':\n return this.config.placeholder;\n case 'hash': {\n const hash = createHash('sha256').update(value).digest('hex').slice(0, 8);\n return `[REDACTED:${hash}]`;\n }\n case 'partial':\n default: {\n if (value.length <= this.config.show_chars) {\n return this.config.placeholder;\n }\n return this.config.placeholder + value.slice(-this.config.show_chars);\n }\n }\n }\n\n maskText(text: string, matches: DlpMatch[]): string {\n if (matches.length === 0) return text;\n\n // Sort by position descending to avoid index shifting\n const sorted = [...matches].sort((a, b) => b.start - a.start);\n\n let result = text;\n for (const match of sorted) {\n const masked = this.maskValue(match.matched);\n result = result.slice(0, match.start) + masked + result.slice(match.end);\n }\n return result;\n }\n}\n","/**\n * Tracks tool invocation count as a proxy for token budget.\n * The budget value represents max invocations per session; -1 means unlimited.\n */\nexport class BudgetTracker {\n private _used = 0;\n private readonly _budget: number;\n\n constructor(budget: number) {\n this._budget = budget;\n }\n\n /** Returns false if consuming would exceed the budget. On success, increments the counter. */\n consume(amount = 1): boolean {\n if (this._budget === -1) {\n this._used += amount;\n return true;\n }\n if (this._used + amount > this._budget) return false;\n this._used += amount;\n return true;\n }\n\n remaining(): number {\n if (this._budget === -1) return Infinity;\n return Math.max(0, this._budget - this._used);\n }\n\n used(): number {\n return this._used;\n }\n\n isUnlimited(): boolean {\n return this._budget === -1;\n }\n}\n","import { watch, readFileSync, type FSWatcher } from 'node:fs';\nimport { parse as parseYaml } from 'yaml';\nimport { Value } from '@sinclair/typebox/value';\nimport { GovernanceConfigSchema, type GovernanceConfig } from './schema.js';\n\n/**\n * Watches a governance config file for changes and triggers a validated reload.\n * Uses fs.watch() with a 500ms debounce to avoid rapid reloads.\n */\nexport class ConfigWatcher {\n private watcher: FSWatcher | undefined;\n private debounceTimer: ReturnType<typeof setTimeout> | undefined;\n private readonly configPath: string;\n private readonly onChange: (config: GovernanceConfig) => void;\n private readonly onError?: (error: Error) => void;\n\n constructor(\n configPath: string,\n onChange: (config: GovernanceConfig) => void,\n onError?: (error: Error) => void,\n ) {\n this.configPath = configPath;\n this.onChange = onChange;\n this.onError = onError;\n }\n\n start(): void {\n if (this.watcher) return;\n this.watcher = watch(this.configPath, () => this.handleChange());\n }\n\n stop(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = undefined;\n }\n if (this.watcher) {\n this.watcher.close();\n this.watcher = undefined;\n }\n }\n\n private handleChange(): void {\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(() => this.reload(), 500);\n }\n\n private reload(): void {\n try {\n const raw = readFileSync(this.configPath, 'utf-8');\n const parsed = parseYaml(raw);\n const errors = [...Value.Errors(GovernanceConfigSchema, parsed)];\n if (errors.length > 0) {\n const msg = errors.map((e) => `${e.path}: ${e.message}`).join('; ');\n this.onError?.(new Error(`Config validation failed: ${msg}`));\n return;\n }\n const config = Value.Default(GovernanceConfigSchema, parsed) as GovernanceConfig;\n this.onChange(config);\n } catch (err) {\n this.onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }\n}\n","import { existsSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface TemplateSelectorConfig {\n directory?: string;\n default?: string;\n}\n\nfunction getBundledDir(): string {\n try {\n // ESM path\n return resolve(dirname(fileURLToPath(import.meta.url)), '../../../prompts');\n } catch {\n // CJS fallback\n return resolve(__dirname, '../../../prompts');\n }\n}\n\nexport class TemplateSelector {\n private userDirectory: string;\n private bundledDirectory: string;\n\n constructor(config?: TemplateSelectorConfig) {\n this.userDirectory = config?.directory ?? './templates/';\n this.bundledDirectory = getBundledDir();\n }\n\n /**\n * Resolve a template name to an absolute file path.\n * User templates take precedence over bundled templates.\n */\n resolve(templateName: string): string {\n // Check user directory first\n const userPath = resolve(join(this.userDirectory, `${templateName}.md`));\n if (existsSync(userPath)) return userPath;\n\n // Fall back to bundled templates\n const bundledPath = resolve(join(this.bundledDirectory, `${templateName}.md`));\n if (existsSync(bundledPath)) return bundledPath;\n\n throw new Error(\n `Prompt template '${templateName}' not found. Searched: ${userPath}, ${bundledPath}`,\n );\n }\n}\n","/**\n * Render a template string by substituting {{variable}} placeholders\n * with the corresponding values from the variables map.\n *\n * - String values replace the placeholder directly.\n * - Array values are joined with newlines.\n * - Unresolved variables (no matching key) are left as-is.\n */\nexport function render(\n templateContent: string,\n variables: Record<string, string | string[]>,\n): string {\n return templateContent.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key: string) => {\n const value = variables[key];\n if (value === undefined) return match;\n if (Array.isArray(value)) return value.join('\\n');\n return value;\n });\n}\n","import { randomUUID } from 'node:crypto';\nimport type { AuditRecord, AuditEventType } from './schema.js';\nimport type { AuditSink } from './sinks/sink.js';\nimport { JsonlAuditSink } from './sinks/jsonl.js';\nimport { WebhookAuditSink } from './sinks/webhook.js';\n\ninterface AuditSinkConfig {\n type: 'jsonl' | 'webhook' | 'postgres';\n path?: string;\n url?: string;\n connection?: string;\n}\n\ninterface AuditConfig {\n sinks: AuditSinkConfig[];\n}\n\nexport class AuditLogger {\n private sinks: AuditSink[];\n private counts: Map<AuditEventType, number> = new Map();\n\n constructor(config?: AuditConfig) {\n const sinkConfigs = config?.sinks ?? [\n { type: 'jsonl' as const, path: '~/.pi/agent/audit.jsonl' },\n ];\n this.sinks = [];\n\n for (const sc of sinkConfigs) {\n if (sc.type === 'jsonl') {\n this.sinks.push(new JsonlAuditSink(sc.path ?? '~/.pi/agent/audit.jsonl'));\n } else if (sc.type === 'webhook' && sc.url) {\n this.sinks.push(new WebhookAuditSink(sc.url));\n }\n // postgres: skip for now\n }\n\n // Ensure at least one sink\n if (this.sinks.length === 0) {\n this.sinks.push(new JsonlAuditSink('~/.pi/agent/audit.jsonl'));\n }\n }\n\n async log(record: Omit<AuditRecord, 'id' | 'timestamp'>): Promise<void> {\n const full: AuditRecord = {\n ...record,\n id: randomUUID(),\n timestamp: new Date().toISOString(),\n };\n\n this.counts.set(full.event, (this.counts.get(full.event) ?? 0) + 1);\n\n await Promise.all(this.sinks.map((s) => s.write(full as unknown as Record<string, unknown>)));\n }\n\n async flush(): Promise<void> {\n await Promise.all(this.sinks.map((s) => s.flush()));\n }\n\n getSummary(): Map<AuditEventType, number> {\n return new Map(this.counts);\n }\n}\n","import { appendFile, mkdir } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AuditSink } from './sink.js';\n\nexport class JsonlAuditSink implements AuditSink {\n private path: string;\n private buffer: Record<string, unknown>[] = [];\n private readonly flushThreshold = 10;\n\n constructor(path: string) {\n this.path = path.replace(/^~/, homedir());\n }\n\n async write(record: Record<string, unknown>): Promise<void> {\n this.buffer.push(record);\n if (this.buffer.length >= this.flushThreshold) {\n await this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.buffer.length === 0) return;\n const lines = this.buffer.map((r) => JSON.stringify(r)).join('\\n') + '\\n';\n this.buffer = [];\n await mkdir(dirname(this.path), { recursive: true });\n await appendFile(this.path, lines, 'utf-8');\n }\n}\n","import type { AuditSink } from './sink.js';\n\nexport class WebhookAuditSink implements AuditSink {\n private url: string;\n private buffer: Record<string, unknown>[] = [];\n private readonly flushThreshold = 10;\n\n constructor(url: string) {\n this.url = url;\n }\n\n async write(record: Record<string, unknown>): Promise<void> {\n this.buffer.push(record);\n if (this.buffer.length >= this.flushThreshold) {\n await this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.buffer.length === 0) return;\n const records = [...this.buffer];\n this.buffer = [];\n\n try {\n await this.send(records);\n } catch {\n // Retry once\n try {\n await this.send(records);\n } catch {\n // Drop records after second failure\n }\n }\n }\n\n private async send(records: Record<string, unknown>[]): Promise<void> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n\n try {\n const response = await fetch(this.url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(records),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Webhook returned ${response.status}`);\n }\n } finally {\n clearTimeout(timeout);\n }\n }\n}\n","import type { ApprovalFlow, ApprovalResult, GovernanceToolCall, ConfirmUI } from './approval.js';\n\nexport class CliApprover implements ApprovalFlow {\n private ui: ConfirmUI;\n private timeoutSeconds: number;\n\n constructor(ui: ConfirmUI, timeoutSeconds: number = 300) {\n this.ui = ui;\n this.timeoutSeconds = timeoutSeconds;\n }\n\n async requestApproval(\n toolCall: GovernanceToolCall,\n context: { userId: string; role: string; orgUnit: string },\n ): Promise<ApprovalResult> {\n const title = `Approval Required: ${toolCall.toolName}`;\n const inputSummary = Object.entries(toolCall.input)\n .map(\n ([k, v]) =>\n ` ${k}: ${typeof v === 'string' ? v.slice(0, 200) : JSON.stringify(v).slice(0, 200)}`,\n )\n .join('\\n');\n const message = `User: ${context.userId} (${context.role})\\nOrg: ${context.orgUnit}\\n\\nTool: ${toolCall.toolName}\\nInput:\\n${inputSummary}`;\n\n const start = Date.now();\n\n try {\n const approved = await this.ui.confirm(title, message, {\n timeout: this.timeoutSeconds * 1000,\n });\n\n return {\n approved,\n approver: 'cli',\n duration: Date.now() - start,\n reason: approved ? undefined : 'Denied by user',\n };\n } catch {\n // Timeout or error — deny\n return {\n approved: false,\n approver: 'cli',\n duration: Date.now() - start,\n reason: 'Approval timed out',\n };\n }\n }\n}\n","import type { ApprovalFlow, ApprovalResult, GovernanceToolCall } from './approval.js';\n\nexport class WebhookApprover implements ApprovalFlow {\n private url: string;\n private timeoutMs: number;\n\n constructor(url: string, timeoutSeconds: number = 300) {\n this.url = url;\n this.timeoutMs = timeoutSeconds * 1000;\n }\n\n async requestApproval(\n toolCall: GovernanceToolCall,\n context: { userId: string; role: string; orgUnit: string },\n ): Promise<ApprovalResult> {\n const start = Date.now();\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n\n try {\n const response = await fetch(this.url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n toolCall: { toolName: toolCall.toolName, input: toolCall.input },\n context,\n }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n return {\n approved: false,\n approver: 'webhook',\n duration: Date.now() - start,\n reason: `Webhook returned ${response.status}`,\n };\n }\n\n const body = (await response.json()) as { approved: boolean; reason?: string };\n\n return {\n approved: body.approved,\n approver: 'webhook',\n duration: Date.now() - start,\n reason: body.reason,\n };\n } catch (err) {\n return {\n approved: false,\n approver: 'webhook',\n duration: Date.now() - start,\n reason:\n err instanceof Error && err.name === 'AbortError'\n ? 'Webhook timed out'\n : 'Webhook request failed',\n };\n } finally {\n clearTimeout(timeout);\n }\n }\n}\n","import { CliApprover } from './cli-approver.js';\nimport { WebhookApprover } from './webhook-approver.js';\n\nexport interface GovernanceToolCall {\n toolName: string;\n input: Record<string, unknown>;\n}\n\nexport interface ApprovalResult {\n approved: boolean;\n reason?: string;\n approver: string;\n duration: number;\n}\n\nexport interface ApprovalFlow {\n requestApproval(\n toolCall: GovernanceToolCall,\n context: { userId: string; role: string; orgUnit: string },\n ): Promise<ApprovalResult>;\n}\n\nexport interface ConfirmUI {\n confirm(title: string, message: string, opts?: { timeout?: number }): Promise<boolean>;\n}\n\nexport interface HitlConfig {\n default_mode: 'autonomous' | 'supervised' | 'dry_run';\n approval_channel: 'cli' | 'webhook';\n timeout_seconds: number;\n webhook?: { url: string };\n}\n\nexport function createApprovalFlow(config: HitlConfig, ui?: ConfirmUI): ApprovalFlow {\n if (config.approval_channel === 'webhook' && config.webhook?.url) {\n return new WebhookApprover(config.webhook.url, config.timeout_seconds);\n }\n\n // Fall back to CLI (also handles webhook without URL)\n if (!ui) {\n throw new Error('CLI approval channel requires a ConfirmUI (ExtensionContext.ui)');\n }\n\n return new CliApprover(ui, config.timeout_seconds);\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from 'node:http';\nimport { writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { stringify } from 'yaml';\nimport type { GovernanceConfig } from '../config/schema.js';\nimport { DEFAULTS } from '../config/defaults.js';\nimport { WIZARD_HTML } from './html.js';\n\nexport interface WizardServerOptions {\n workingDirectory: string;\n existingConfig?: GovernanceConfig;\n onComplete: (files: { path: string; content: string }[]) => void;\n onError: (error: Error) => void;\n}\n\nconst AUTO_SHUTDOWN_MS = 10 * 60 * 1000;\n\nconst BUILTIN_ROLES = {\n analyst: {\n allowed_tools: ['read', 'grep', 'find', 'ls'],\n blocked_tools: ['bash', 'write', 'edit'],\n hitl_mode: 'dry_run' as const,\n },\n project_lead: {\n allowed_tools: ['read', 'write', 'edit', 'grep', 'find', 'ls', 'bash'],\n blocked_tools: [],\n hitl_mode: 'supervised' as const,\n },\n admin: {\n allowed_tools: ['read', 'write', 'edit', 'grep', 'find', 'ls', 'bash'],\n blocked_tools: [],\n hitl_mode: 'autonomous' as const,\n },\n auditor: {\n allowed_tools: ['read', 'grep', 'find', 'ls'],\n blocked_tools: ['bash', 'write', 'edit'],\n hitl_mode: 'dry_run' as const,\n },\n};\n\nfunction setCorsHeaders(res: ServerResponse): void {\n res.setHeader('Access-Control-Allow-Origin', 'http://localhost');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n}\n\nfunction sendJson(res: ServerResponse, status: number, data: unknown): void {\n res.writeHead(status, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(data));\n}\n\nfunction readBody(req: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n req.on('data', (chunk: Buffer) => chunks.push(chunk));\n req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));\n req.on('error', reject);\n });\n}\n\nexport function startWizardServer(\n options: WizardServerOptions,\n): Promise<{ port: number; close: () => void }> {\n return new Promise((resolve, reject) => {\n let shutdownTimer: ReturnType<typeof setTimeout> | undefined;\n\n const server = createServer((req, res) => {\n setCorsHeaders(res);\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n const url = req.url ?? '/';\n\n try {\n if (req.method === 'GET' && url === '/') {\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(WIZARD_HTML);\n return;\n }\n\n if (req.method === 'GET' && url === '/api/config') {\n sendJson(res, 200, options.existingConfig ?? DEFAULTS);\n return;\n }\n\n if (req.method === 'GET' && url === '/api/defaults') {\n sendJson(res, 200, { defaults: DEFAULTS, roles: BUILTIN_ROLES });\n return;\n }\n\n if (req.method === 'POST' && url === '/api/save') {\n readBody(req)\n .then((body) => {\n const parsed: unknown = JSON.parse(body);\n if (typeof parsed !== 'object' || parsed === null || !('governance' in parsed)) {\n sendJson(res, 400, { error: 'Request body must include \"governance\" property' });\n return;\n }\n\n const payload = parsed as { governance: GovernanceConfig; rules?: unknown };\n const governanceYaml = stringify(payload.governance);\n const piDir = join(options.workingDirectory, '.pi');\n const governancePath = join(piDir, 'governance.yaml');\n\n mkdirSync(piDir, { recursive: true });\n writeFileSync(governancePath, governanceYaml, 'utf-8');\n\n const files: { path: string; content: string }[] = [\n { path: governancePath, content: governanceYaml },\n ];\n\n if (payload.rules !== undefined) {\n const rulesYaml = stringify(payload.rules);\n const rulesPath = join(options.workingDirectory, 'governance-rules.yaml');\n writeFileSync(rulesPath, rulesYaml, 'utf-8');\n files.push({ path: rulesPath, content: rulesYaml });\n }\n\n sendJson(res, 200, { ok: true, files: files.map((f) => f.path) });\n options.onComplete(files);\n })\n .catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n sendJson(res, 400, { error: `Invalid request body: ${message}` });\n });\n return;\n }\n\n if (req.method === 'POST' && url === '/api/close') {\n sendJson(res, 200, { ok: true });\n setTimeout(() => {\n closeServer();\n }, 100);\n return;\n }\n\n sendJson(res, 404, { error: 'Not found' });\n } catch (err: unknown) {\n const error = err instanceof Error ? err : new Error(String(err));\n options.onError(error);\n sendJson(res, 500, { error: 'Internal server error' });\n }\n });\n\n function closeServer(): void {\n if (shutdownTimer !== undefined) {\n clearTimeout(shutdownTimer);\n shutdownTimer = undefined;\n }\n server.close();\n }\n\n server.on('error', (err) => {\n options.onError(err);\n reject(err);\n });\n\n server.listen(0, () => {\n const addr = server.address();\n if (addr === null || typeof addr === 'string') {\n const err = new Error('Failed to get server address');\n options.onError(err);\n reject(err);\n return;\n }\n\n shutdownTimer = setTimeout(() => {\n closeServer();\n }, AUTO_SHUTDOWN_MS);\n\n resolve({ port: addr.port, close: closeServer });\n });\n });\n}\n","export const WIZARD_HTML: string = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Pi Governance — Setup Wizard</title>\n<style>\n :root {\n --bg: #f8f9fa;\n --bg-surface: #ffffff;\n --bg-surface-alt: #f1f3f5;\n --bg-code: #e9ecef;\n --text: #212529;\n --text-muted: #6c757d;\n --text-inverse: #ffffff;\n --border: #dee2e6;\n --border-focus: #4263eb;\n --primary: #4263eb;\n --primary-hover: #3b5bdb;\n --primary-subtle: #dbe4ff;\n --success: #2f9e44;\n --success-subtle: #d3f9d8;\n --danger: #e03131;\n --danger-subtle: #ffe3e3;\n --warning: #f08c00;\n --warning-subtle: #fff3bf;\n --radius: 8px;\n --radius-sm: 4px;\n --shadow: 0 1px 3px rgba(0,0,0,0.08);\n --shadow-lg: 0 4px 12px rgba(0,0,0,0.1);\n --font-mono: 'SF Mono', 'Cascadia Code', 'Fira Code', monospace;\n --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;\n --transition: 150ms ease;\n }\n\n @media (prefers-color-scheme: dark) {\n :root {\n --bg: #1a1b1e;\n --bg-surface: #25262b;\n --bg-surface-alt: #2c2e33;\n --bg-code: #2c2e33;\n --text: #c1c2c5;\n --text-muted: #909296;\n --text-inverse: #1a1b1e;\n --border: #373a40;\n --border-focus: #5c7cfa;\n --primary: #5c7cfa;\n --primary-hover: #748ffc;\n --primary-subtle: #1b2559;\n --success: #51cf66;\n --success-subtle: #0b3d1a;\n --danger: #ff6b6b;\n --danger-subtle: #3d0b0b;\n --warning: #fcc419;\n --warning-subtle: #3d2e00;\n --shadow: 0 1px 3px rgba(0,0,0,0.3);\n --shadow-lg: 0 4px 12px rgba(0,0,0,0.4);\n }\n }\n\n * { margin: 0; padding: 0; box-sizing: border-box; }\n\n body {\n font-family: var(--font-sans);\n background: var(--bg);\n color: var(--text);\n line-height: 1.6;\n min-height: 100vh;\n }\n\n .layout {\n display: grid;\n grid-template-columns: 1fr 420px;\n gap: 0;\n min-height: 100vh;\n }\n\n @media (max-width: 1024px) {\n .layout { grid-template-columns: 1fr; }\n .preview-panel { display: none; }\n }\n\n /* --- Left column: Form --- */\n .form-column {\n padding: 32px 40px 80px;\n overflow-y: auto;\n max-height: 100vh;\n }\n\n .logo {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 8px;\n }\n\n .logo-icon {\n width: 36px; height: 36px;\n background: var(--primary);\n border-radius: var(--radius);\n display: flex; align-items: center; justify-content: center;\n color: var(--text-inverse);\n font-weight: 700; font-size: 18px;\n }\n\n .logo-text {\n font-size: 20px;\n font-weight: 700;\n color: var(--text);\n }\n\n .logo-text span { color: var(--text-muted); font-weight: 400; }\n\n h1 {\n font-size: 28px;\n font-weight: 700;\n margin: 24px 0 8px;\n }\n\n .subtitle {\n color: var(--text-muted);\n font-size: 15px;\n margin-bottom: 32px;\n }\n\n /* Sections */\n .section {\n background: var(--bg-surface);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 24px;\n margin-bottom: 20px;\n box-shadow: var(--shadow);\n }\n\n .section-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 16px;\n cursor: pointer;\n user-select: none;\n }\n\n .section-header h2 {\n font-size: 16px;\n font-weight: 600;\n flex: 1;\n }\n\n .section-badge {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .badge-required { background: var(--danger-subtle); color: var(--danger); }\n .badge-optional { background: var(--primary-subtle); color: var(--primary); }\n\n .section-icon {\n width: 32px; height: 32px;\n border-radius: var(--radius-sm);\n display: flex; align-items: center; justify-content: center;\n font-size: 16px;\n flex-shrink: 0;\n }\n\n .section-body { display: block; }\n .section.collapsed .section-body { display: none; }\n .section-chevron {\n transition: transform var(--transition);\n color: var(--text-muted);\n font-size: 12px;\n }\n .section.collapsed .section-chevron { transform: rotate(-90deg); }\n\n /* Form elements */\n label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--text);\n margin-bottom: 4px;\n }\n\n .label-hint {\n font-weight: 400;\n color: var(--text-muted);\n font-size: 12px;\n }\n\n input[type=\"text\"],\n input[type=\"number\"],\n select {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--border);\n border-radius: var(--radius-sm);\n background: var(--bg-surface);\n color: var(--text);\n font-size: 14px;\n font-family: var(--font-sans);\n transition: border-color var(--transition);\n outline: none;\n }\n\n input:focus, select:focus {\n border-color: var(--border-focus);\n box-shadow: 0 0 0 2px var(--primary-subtle);\n }\n\n .field { margin-bottom: 16px; }\n\n .field-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n }\n\n .field-row-3 {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 12px;\n }\n\n /* Toggle switch */\n .toggle-row {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 12px;\n }\n\n .toggle {\n position: relative;\n width: 40px; height: 22px;\n flex-shrink: 0;\n }\n\n .toggle input { display: none; }\n\n .toggle-slider {\n position: absolute;\n inset: 0;\n background: var(--border);\n border-radius: 11px;\n cursor: pointer;\n transition: background var(--transition);\n }\n\n .toggle-slider::before {\n content: '';\n position: absolute;\n width: 16px; height: 16px;\n left: 3px; top: 3px;\n background: white;\n border-radius: 50%;\n transition: transform var(--transition);\n }\n\n .toggle input:checked + .toggle-slider {\n background: var(--primary);\n }\n\n .toggle input:checked + .toggle-slider::before {\n transform: translateX(18px);\n }\n\n .toggle-label {\n font-size: 14px;\n font-weight: 500;\n }\n\n /* Role cards */\n .role-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n }\n\n .role-card {\n border: 2px solid var(--border);\n border-radius: var(--radius);\n padding: 16px;\n cursor: pointer;\n transition: all var(--transition);\n position: relative;\n }\n\n .role-card:hover { border-color: var(--primary); }\n\n .role-card.selected {\n border-color: var(--primary);\n background: var(--primary-subtle);\n }\n\n .role-card-check {\n position: absolute;\n top: 12px; right: 12px;\n width: 20px; height: 20px;\n border: 2px solid var(--border);\n border-radius: 4px;\n display: flex; align-items: center; justify-content: center;\n font-size: 12px;\n color: transparent;\n transition: all var(--transition);\n }\n\n .role-card.selected .role-card-check {\n background: var(--primary);\n border-color: var(--primary);\n color: white;\n }\n\n .role-name {\n font-weight: 600;\n font-size: 14px;\n margin-bottom: 4px;\n }\n\n .role-desc {\n font-size: 12px;\n color: var(--text-muted);\n margin-bottom: 8px;\n }\n\n .role-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n\n .role-tag {\n font-size: 11px;\n padding: 1px 6px;\n border-radius: 3px;\n background: var(--bg-surface-alt);\n color: var(--text-muted);\n font-family: var(--font-mono);\n }\n\n .role-details {\n display: none;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border);\n }\n\n .role-card.selected .role-details { display: block; }\n\n /* Chip selector */\n .chip-group {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n margin-bottom: 12px;\n }\n\n .chip {\n padding: 5px 14px;\n border: 1px solid var(--border);\n border-radius: 16px;\n font-size: 13px;\n cursor: pointer;\n transition: all var(--transition);\n background: var(--bg-surface);\n color: var(--text);\n }\n\n .chip:hover { border-color: var(--primary); }\n\n .chip.active {\n background: var(--primary);\n border-color: var(--primary);\n color: var(--text-inverse);\n }\n\n /* Pattern list */\n .pattern-list { margin-top: 12px; }\n\n .pattern-item {\n display: grid;\n grid-template-columns: 1fr 1.5fr auto auto;\n gap: 8px;\n align-items: center;\n margin-bottom: 8px;\n }\n\n .pattern-item input, .pattern-item select {\n font-size: 13px;\n padding: 6px 8px;\n }\n\n .btn-remove {\n background: none;\n border: none;\n color: var(--danger);\n cursor: pointer;\n font-size: 18px;\n padding: 4px;\n line-height: 1;\n }\n\n .btn-add {\n background: none;\n border: 1px dashed var(--border);\n border-radius: var(--radius-sm);\n padding: 6px 14px;\n color: var(--primary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition);\n }\n\n .btn-add:hover {\n border-color: var(--primary);\n background: var(--primary-subtle);\n }\n\n /* Allowlist */\n .allowlist-item {\n display: flex;\n gap: 8px;\n margin-bottom: 8px;\n }\n\n .allowlist-item input { flex: 1; font-size: 13px; padding: 6px 8px; }\n\n /* Sink list */\n .sink-item {\n background: var(--bg-surface-alt);\n border-radius: var(--radius-sm);\n padding: 12px;\n margin-bottom: 8px;\n position: relative;\n }\n\n .sink-item .btn-remove {\n position: absolute;\n top: 8px; right: 8px;\n }\n\n /* --- Right column: Preview --- */\n .preview-panel {\n background: var(--bg-surface-alt);\n border-left: 1px solid var(--border);\n padding: 24px;\n display: flex;\n flex-direction: column;\n position: sticky;\n top: 0;\n height: 100vh;\n overflow: hidden;\n }\n\n .preview-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n flex-shrink: 0;\n }\n\n .preview-header h3 {\n font-size: 14px;\n font-weight: 600;\n }\n\n .preview-tabs {\n display: flex;\n gap: 4px;\n margin-bottom: 12px;\n flex-shrink: 0;\n }\n\n .preview-tab {\n padding: 4px 12px;\n font-size: 12px;\n border: 1px solid var(--border);\n border-radius: var(--radius-sm);\n background: var(--bg-surface);\n cursor: pointer;\n color: var(--text-muted);\n transition: all var(--transition);\n }\n\n .preview-tab.active {\n background: var(--primary);\n border-color: var(--primary);\n color: var(--text-inverse);\n }\n\n .preview-content {\n flex: 1;\n overflow-y: auto;\n background: var(--bg-surface);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 16px;\n }\n\n .preview-content pre {\n font-family: var(--font-mono);\n font-size: 12px;\n line-height: 1.5;\n white-space: pre;\n color: var(--text);\n margin: 0;\n }\n\n /* Bottom bar */\n .bottom-bar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 420px;\n padding: 16px 40px;\n background: var(--bg-surface);\n border-top: 1px solid var(--border);\n display: flex;\n align-items: center;\n justify-content: space-between;\n z-index: 100;\n box-shadow: 0 -2px 8px rgba(0,0,0,0.06);\n }\n\n @media (max-width: 1024px) {\n .bottom-bar { right: 0; }\n }\n\n .btn-primary {\n padding: 10px 28px;\n background: var(--primary);\n color: var(--text-inverse);\n border: none;\n border-radius: var(--radius);\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: background var(--transition);\n }\n\n .btn-primary:hover { background: var(--primary-hover); }\n .btn-primary:disabled { opacity: 0.5; cursor: not-allowed; }\n\n .btn-secondary {\n padding: 10px 20px;\n background: var(--bg-surface);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition);\n }\n\n .btn-secondary:hover { border-color: var(--primary); color: var(--primary); }\n\n .save-status {\n font-size: 13px;\n color: var(--text-muted);\n }\n\n .save-status.success { color: var(--success); }\n .save-status.error { color: var(--danger); }\n\n /* Toast */\n .toast {\n position: fixed;\n top: 20px;\n right: 20px;\n padding: 12px 20px;\n border-radius: var(--radius);\n font-size: 14px;\n font-weight: 500;\n z-index: 1000;\n box-shadow: var(--shadow-lg);\n transform: translateY(-10px);\n opacity: 0;\n transition: all 300ms ease;\n pointer-events: none;\n }\n\n .toast.visible { transform: translateY(0); opacity: 1; pointer-events: auto; }\n .toast.success { background: var(--success); color: white; }\n .toast.error { background: var(--danger); color: white; }\n\n /* Helpers */\n .help-text {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 4px;\n }\n\n .divider {\n border: none;\n border-top: 1px solid var(--border);\n margin: 16px 0;\n }\n\n .hidden { display: none !important; }\n</style>\n</head>\n<body>\n<div class=\"layout\">\n <!-- ═══════════ LEFT: FORM ═══════════ -->\n <div class=\"form-column\">\n <div class=\"logo\">\n <div class=\"logo-icon\">G</div>\n <div class=\"logo-text\">Pi Governance <span>Setup Wizard</span></div>\n </div>\n\n <h1>Configure your governance policy</h1>\n <p class=\"subtitle\">\n AI coding agents are powerful but need guardrails. This wizard generates a\n <code>governance.yaml</code> and <code>governance-rules.yaml</code> to control\n tool access, bash safety, data-loss prevention, human approvals, and audit logging.\n </p>\n\n <!-- ── 1. Roles ── -->\n <div class=\"section\" id=\"sec-roles\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-roles')\">\n <div class=\"section-icon\" style=\"background:var(--primary-subtle);color:var(--primary)\">&#x1f465;</div>\n <h2>Roles</h2>\n <span class=\"section-badge badge-required\">Required</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <p class=\"help-text\" style=\"margin-bottom:12px\">Select the roles your team needs. Each role defines tool access, execution mode, and approval rules.</p>\n <div class=\"role-grid\" id=\"role-grid\"></div>\n </div>\n </div>\n\n <!-- ── 2. DLP ── -->\n <div class=\"section\" id=\"sec-dlp\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-dlp')\">\n <div class=\"section-icon\" style=\"background:var(--warning-subtle);color:var(--warning)\">&#x1f6e1;</div>\n <h2>Data Loss Prevention</h2>\n <span class=\"section-badge badge-optional\">Optional</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <div class=\"toggle-row\">\n <label class=\"toggle\"><input type=\"checkbox\" id=\"dlp-enabled\" checked onchange=\"updatePreview()\"><span class=\"toggle-slider\"></span></label>\n <span class=\"toggle-label\">Enable DLP scanning</span>\n </div>\n\n <div id=\"dlp-options\">\n <div class=\"field\">\n <label>Default Mode</label>\n <div class=\"chip-group\" id=\"dlp-mode\">\n <span class=\"chip active\" data-value=\"audit\" onclick=\"selectChip(this)\">Audit</span>\n <span class=\"chip\" data-value=\"mask\" onclick=\"selectChip(this)\">Mask</span>\n <span class=\"chip\" data-value=\"block\" onclick=\"selectChip(this)\">Block</span>\n </div>\n </div>\n\n <div class=\"field-row\">\n <div class=\"field\">\n <label>On Input <span class=\"label-hint\">(agent receives)</span></label>\n <select id=\"dlp-on-input\" onchange=\"updatePreview()\">\n <option value=\"\">Use default mode</option>\n <option value=\"audit\">Audit</option>\n <option value=\"mask\">Mask</option>\n <option value=\"block\" selected>Block</option>\n </select>\n </div>\n <div class=\"field\">\n <label>On Output <span class=\"label-hint\">(agent produces)</span></label>\n <select id=\"dlp-on-output\" onchange=\"updatePreview()\">\n <option value=\"\">Use default mode</option>\n <option value=\"audit\">Audit</option>\n <option value=\"mask\" selected>Mask</option>\n <option value=\"block\">Block</option>\n </select>\n </div>\n </div>\n\n <hr class=\"divider\">\n <label>Built-in Patterns</label>\n <div class=\"toggle-row\" style=\"margin-top:6px\">\n <label class=\"toggle\"><input type=\"checkbox\" id=\"dlp-secrets\" checked onchange=\"updatePreview()\"><span class=\"toggle-slider\"></span></label>\n <span class=\"toggle-label\">Secrets <span class=\"label-hint\">(API keys, tokens, passwords)</span></span>\n </div>\n <div class=\"toggle-row\">\n <label class=\"toggle\"><input type=\"checkbox\" id=\"dlp-pii\" checked onchange=\"updatePreview()\"><span class=\"toggle-slider\"></span></label>\n <span class=\"toggle-label\">PII <span class=\"label-hint\">(emails, phone numbers, SSNs)</span></span>\n </div>\n\n <hr class=\"divider\">\n <label>Masking Options</label>\n <div class=\"field-row-3\" style=\"margin-top:8px\">\n <div class=\"field\">\n <label>Strategy</label>\n <select id=\"dlp-mask-strategy\" onchange=\"updatePreview()\">\n <option value=\"partial\" selected>Partial</option>\n <option value=\"full\">Full</option>\n <option value=\"hash\">Hash</option>\n </select>\n </div>\n <div class=\"field\">\n <label>Show Chars</label>\n <input type=\"number\" id=\"dlp-mask-show\" value=\"4\" min=\"0\" onchange=\"updatePreview()\">\n </div>\n <div class=\"field\">\n <label>Placeholder</label>\n <input type=\"text\" id=\"dlp-mask-placeholder\" value=\"***\" onchange=\"updatePreview()\">\n </div>\n </div>\n\n <hr class=\"divider\">\n <label>Severity Threshold <span class=\"label-hint\">(minimum severity to trigger DLP)</span></label>\n <div class=\"chip-group\" id=\"dlp-severity\" style=\"margin-top:6px\">\n <span class=\"chip active\" data-value=\"low\" onclick=\"selectChip(this)\">Low</span>\n <span class=\"chip\" data-value=\"medium\" onclick=\"selectChip(this)\">Medium</span>\n <span class=\"chip\" data-value=\"high\" onclick=\"selectChip(this)\">High</span>\n <span class=\"chip\" data-value=\"critical\" onclick=\"selectChip(this)\">Critical</span>\n </div>\n\n <hr class=\"divider\">\n <label>Custom Patterns</label>\n <div class=\"pattern-list\" id=\"dlp-custom-patterns\"></div>\n <button class=\"btn-add\" onclick=\"addCustomPattern()\">+ Add pattern</button>\n\n <hr class=\"divider\">\n <label>Allowlist <span class=\"label-hint\">(patterns to ignore)</span></label>\n <div id=\"dlp-allowlist\"></div>\n <button class=\"btn-add\" onclick=\"addAllowlistEntry()\" style=\"margin-top:8px\">+ Add entry</button>\n </div>\n </div>\n </div>\n\n <!-- ── 3. Bash Classification ── -->\n <div class=\"section\" id=\"sec-bash\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-bash')\">\n <div class=\"section-icon\" style=\"background:var(--danger-subtle);color:var(--danger)\">&#x1f4bb;</div>\n <h2>Bash Classification</h2>\n <span class=\"section-badge badge-optional\">Optional</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <p class=\"help-text\" style=\"margin-bottom:12px\">The built-in bash classifier categorizes commands by danger level. Adjust the threshold for auto-blocking.</p>\n <div class=\"field\">\n <label>Auto-block Severity</label>\n <p class=\"help-text\">Commands at or above this severity are blocked without HITL.</p>\n <div class=\"chip-group\" id=\"bash-severity\" style=\"margin-top:6px\">\n <span class=\"chip\" data-value=\"low\" onclick=\"selectChip(this)\">Low</span>\n <span class=\"chip\" data-value=\"medium\" onclick=\"selectChip(this)\">Medium</span>\n <span class=\"chip active\" data-value=\"high\" onclick=\"selectChip(this)\">High</span>\n <span class=\"chip\" data-value=\"critical\" onclick=\"selectChip(this)\">Critical</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- ── 4. HITL ── -->\n <div class=\"section\" id=\"sec-hitl\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-hitl')\">\n <div class=\"section-icon\" style=\"background:var(--success-subtle);color:var(--success)\">&#x1f9d1;</div>\n <h2>Human-in-the-Loop</h2>\n <span class=\"section-badge badge-required\">Required</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <div class=\"field\">\n <label>Default Execution Mode</label>\n <div class=\"chip-group\" id=\"hitl-mode\">\n <span class=\"chip\" data-value=\"autonomous\" onclick=\"selectChip(this)\">Autonomous</span>\n <span class=\"chip active\" data-value=\"supervised\" onclick=\"selectChip(this)\">Supervised</span>\n <span class=\"chip\" data-value=\"dry_run\" onclick=\"selectChip(this)\">Dry Run</span>\n </div>\n </div>\n <div class=\"field-row\">\n <div class=\"field\">\n <label>Approval Channel</label>\n <select id=\"hitl-channel\" onchange=\"updatePreview()\">\n <option value=\"cli\" selected>CLI (terminal prompt)</option>\n <option value=\"webhook\">Webhook</option>\n </select>\n </div>\n <div class=\"field\">\n <label>Timeout <span class=\"label-hint\">(seconds)</span></label>\n <input type=\"number\" id=\"hitl-timeout\" value=\"300\" min=\"10\" max=\"3600\" onchange=\"updatePreview()\">\n </div>\n </div>\n <div class=\"field hidden\" id=\"hitl-webhook-field\">\n <label>Webhook URL</label>\n <input type=\"text\" id=\"hitl-webhook-url\" placeholder=\"https://...\" onchange=\"updatePreview()\">\n </div>\n </div>\n </div>\n\n <!-- ── 5. Audit ── -->\n <div class=\"section\" id=\"sec-audit\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-audit')\">\n <div class=\"section-icon\" style=\"background:var(--primary-subtle);color:var(--primary)\">&#x1f4dd;</div>\n <h2>Audit Logging</h2>\n <span class=\"section-badge badge-required\">Required</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <p class=\"help-text\" style=\"margin-bottom:12px\">All governance events are logged to one or more sinks.</p>\n <div id=\"audit-sinks\"></div>\n <button class=\"btn-add\" onclick=\"addAuditSink()\" style=\"margin-top:8px\">+ Add sink</button>\n </div>\n </div>\n\n <!-- ── 6. Auth ── -->\n <div class=\"section collapsed\" id=\"sec-auth\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-auth')\">\n <div class=\"section-icon\" style=\"background:var(--bg-surface-alt);color:var(--text-muted)\">&#x1f511;</div>\n <h2>Authentication</h2>\n <span class=\"section-badge badge-optional\">Optional</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <div class=\"field\">\n <label>Provider</label>\n <div class=\"chip-group\" id=\"auth-provider\">\n <span class=\"chip active\" data-value=\"env\" onclick=\"selectChip(this)\">Environment Vars</span>\n <span class=\"chip\" data-value=\"local\" onclick=\"selectChip(this)\">Local File</span>\n <span class=\"chip\" data-value=\"oidc\" onclick=\"selectChip(this)\">OIDC</span>\n </div>\n </div>\n <div id=\"auth-env-fields\">\n <div class=\"field-row-3\">\n <div class=\"field\">\n <label>User Var</label>\n <input type=\"text\" id=\"auth-user-var\" value=\"PI_GOV_USER\" onchange=\"updatePreview()\">\n </div>\n <div class=\"field\">\n <label>Role Var</label>\n <input type=\"text\" id=\"auth-role-var\" value=\"PI_GOV_ROLE\" onchange=\"updatePreview()\">\n </div>\n <div class=\"field\">\n <label>Org Unit Var</label>\n <input type=\"text\" id=\"auth-org-unit-var\" value=\"PI_GOV_ORG_UNIT\" onchange=\"updatePreview()\">\n </div>\n </div>\n </div>\n <div id=\"auth-local-fields\" class=\"hidden\">\n <div class=\"field\">\n <label>Users File</label>\n <input type=\"text\" id=\"auth-users-file\" value=\"./users.yaml\" onchange=\"updatePreview()\">\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"height:80px\"></div>\n </div>\n\n <!-- ═══════════ RIGHT: PREVIEW ═══════════ -->\n <div class=\"preview-panel\">\n <div class=\"preview-header\">\n <h3>Live Preview</h3>\n </div>\n <div class=\"preview-tabs\">\n <span class=\"preview-tab active\" data-tab=\"governance\" onclick=\"switchTab(this)\">governance.yaml</span>\n <span class=\"preview-tab\" data-tab=\"rules\" onclick=\"switchTab(this)\">governance-rules.yaml</span>\n </div>\n <div class=\"preview-content\">\n <pre id=\"preview-yaml\"></pre>\n </div>\n </div>\n</div>\n\n<!-- ── Bottom bar ── -->\n<div class=\"bottom-bar\">\n <span class=\"save-status\" id=\"save-status\"></span>\n <div style=\"display:flex;gap:10px\">\n <button class=\"btn-secondary\" onclick=\"handleClose()\">Cancel</button>\n <button class=\"btn-primary\" id=\"btn-save\" onclick=\"handleSave()\">Save Configuration</button>\n </div>\n</div>\n\n<!-- Toast -->\n<div class=\"toast\" id=\"toast\"></div>\n\n<script>\n// ─── State ───────────────────────────────────────────────────────────\nconst PRESET_ROLES = {\n analyst: {\n label: 'Analyst',\n desc: 'Read-only access, every action requires approval.',\n allowed_tools: ['read','grep','find','ls'],\n blocked_tools: ['write','edit','bash'],\n prompt_template: 'analyst',\n execution_mode: 'supervised',\n human_approval: { required_for: ['all'] },\n token_budget_daily: 100000,\n allowed_paths: ['{{project_path}}/**'],\n blocked_paths: ['**/secrets/**', '**/.env*']\n },\n project_lead: {\n label: 'Project Lead',\n desc: 'Full tools, bash & write need human approval.',\n allowed_tools: ['read','write','edit','bash','grep','find','ls'],\n blocked_tools: [],\n prompt_template: 'project-lead',\n execution_mode: 'supervised',\n human_approval: { required_for: ['bash','write'], auto_approve: ['read','edit','grep','find','ls'] },\n token_budget_daily: 500000,\n allowed_paths: ['{{project_path}}/**'],\n blocked_paths: ['**/secrets/**', '**/.env*'],\n bash_overrides: { additional_blocked: ['sudo','ssh','curl.*\\\\\\\\|.*sh'] }\n },\n admin: {\n label: 'Admin',\n desc: 'Full autonomous access, no approvals, unlimited budget.',\n allowed_tools: ['all'],\n blocked_tools: [],\n prompt_template: 'admin',\n execution_mode: 'autonomous',\n human_approval: { required_for: [] },\n token_budget_daily: -1,\n allowed_paths: ['**'],\n blocked_paths: []\n },\n auditor: {\n label: 'Auditor',\n desc: 'Dry-run: all calls logged, nothing executed.',\n allowed_tools: ['read','grep','find','ls'],\n blocked_tools: ['write','edit','bash'],\n prompt_template: 'analyst',\n execution_mode: 'dry_run',\n human_approval: { required_for: ['all'] },\n token_budget_daily: 50000,\n allowed_paths: ['**'],\n blocked_paths: ['**/secrets/**']\n }\n};\n\nlet selectedRoles = { analyst: false, project_lead: true, admin: false, auditor: false };\nlet customPatterns = [];\nlet allowlistEntries = [];\nlet auditSinks = [{ type: 'jsonl', path: '~/.pi/agent/audit.jsonl' }];\nlet activePreviewTab = 'governance';\n\n// ─── Init ────────────────────────────────────────────────────────────\ndocument.addEventListener('DOMContentLoaded', async () => {\n renderRoles();\n renderAuditSinks();\n updatePreview();\n\n try {\n const [configRes, defaultsRes] = await Promise.all([\n fetch('/api/config').catch(() => null),\n fetch('/api/defaults').catch(() => null)\n ]);\n if (configRes && configRes.ok) {\n const cfg = await configRes.json();\n applyConfig(cfg);\n }\n if (defaultsRes && defaultsRes.ok) {\n const defs = await defaultsRes.json();\n if (!configRes || !configRes.ok) applyConfig(defs);\n }\n } catch (e) { /* use built-in defaults */ }\n\n // watch for webhook channel\n document.getElementById('hitl-channel').addEventListener('change', (e) => {\n document.getElementById('hitl-webhook-field').classList.toggle('hidden', e.target.value !== 'webhook');\n updatePreview();\n });\n\n // watch dlp toggle\n document.getElementById('dlp-enabled').addEventListener('change', (e) => {\n document.getElementById('dlp-options').classList.toggle('hidden', !e.target.checked);\n updatePreview();\n });\n});\n\n// ─── Apply Config ────────────────────────────────────────────────────\nfunction applyConfig(cfg) {\n if (!cfg) return;\n\n // Auth\n if (cfg.auth) {\n setChipValue('auth-provider', cfg.auth.provider || 'env');\n if (cfg.auth.env) {\n if (cfg.auth.env.user_var) document.getElementById('auth-user-var').value = cfg.auth.env.user_var;\n if (cfg.auth.env.role_var) document.getElementById('auth-role-var').value = cfg.auth.env.role_var;\n if (cfg.auth.env.org_unit_var) document.getElementById('auth-org-unit-var').value = cfg.auth.env.org_unit_var;\n }\n if (cfg.auth.local && cfg.auth.local.users_file) {\n document.getElementById('auth-users-file').value = cfg.auth.local.users_file;\n }\n }\n\n // HITL\n if (cfg.hitl) {\n if (cfg.hitl.default_mode) setChipValue('hitl-mode', cfg.hitl.default_mode);\n if (cfg.hitl.approval_channel) {\n document.getElementById('hitl-channel').value = cfg.hitl.approval_channel;\n document.getElementById('hitl-webhook-field').classList.toggle('hidden', cfg.hitl.approval_channel !== 'webhook');\n }\n if (cfg.hitl.timeout_seconds) document.getElementById('hitl-timeout').value = cfg.hitl.timeout_seconds;\n if (cfg.hitl.webhook && cfg.hitl.webhook.url) document.getElementById('hitl-webhook-url').value = cfg.hitl.webhook.url;\n }\n\n // DLP\n if (cfg.dlp) {\n document.getElementById('dlp-enabled').checked = cfg.dlp.enabled !== false;\n document.getElementById('dlp-options').classList.toggle('hidden', !cfg.dlp.enabled);\n if (cfg.dlp.mode) setChipValue('dlp-mode', cfg.dlp.mode);\n if (cfg.dlp.on_input) document.getElementById('dlp-on-input').value = cfg.dlp.on_input;\n if (cfg.dlp.on_output) document.getElementById('dlp-on-output').value = cfg.dlp.on_output;\n if (cfg.dlp.masking) {\n if (cfg.dlp.masking.strategy) document.getElementById('dlp-mask-strategy').value = cfg.dlp.masking.strategy;\n if (cfg.dlp.masking.show_chars != null) document.getElementById('dlp-mask-show').value = cfg.dlp.masking.show_chars;\n if (cfg.dlp.masking.placeholder) document.getElementById('dlp-mask-placeholder').value = cfg.dlp.masking.placeholder;\n }\n if (cfg.dlp.severity_threshold) setChipValue('dlp-severity', cfg.dlp.severity_threshold);\n if (cfg.dlp.built_in) {\n if (cfg.dlp.built_in.secrets != null) document.getElementById('dlp-secrets').checked = cfg.dlp.built_in.secrets;\n if (cfg.dlp.built_in.pii != null) document.getElementById('dlp-pii').checked = cfg.dlp.built_in.pii;\n }\n if (cfg.dlp.custom_patterns) {\n customPatterns = cfg.dlp.custom_patterns;\n renderCustomPatterns();\n }\n if (cfg.dlp.allowlist) {\n allowlistEntries = cfg.dlp.allowlist.map(e => e.pattern || e);\n renderAllowlist();\n }\n }\n\n // Audit\n if (cfg.audit && cfg.audit.sinks) {\n auditSinks = cfg.audit.sinks;\n renderAuditSinks();\n }\n\n updatePreview();\n}\n\n// ─── Roles ───────────────────────────────────────────────────────────\nfunction renderRoles() {\n const grid = document.getElementById('role-grid');\n grid.innerHTML = '';\n for (const [key, role] of Object.entries(PRESET_ROLES)) {\n const sel = selectedRoles[key];\n const card = document.createElement('div');\n card.className = 'role-card' + (sel ? ' selected' : '');\n card.dataset.role = key;\n card.onclick = () => { toggleRole(key); };\n card.innerHTML =\n '<div class=\"role-card-check\">&#10003;</div>' +\n '<div class=\"role-name\">' + role.label + '</div>' +\n '<div class=\"role-desc\">' + role.desc + '</div>' +\n '<div class=\"role-tags\">' +\n '<span class=\"role-tag\">' + role.execution_mode + '</span>' +\n '<span class=\"role-tag\">' + (role.token_budget_daily === -1 ? 'unlimited' : role.token_budget_daily.toLocaleString()) + ' budget</span>' +\n '</div>' +\n '<div class=\"role-details\">' +\n '<div class=\"field\"><label>Allowed Tools</label>' +\n '<input type=\"text\" value=\"' + role.allowed_tools.join(', ') + '\" onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'allowed_tools\\\\', this.value)\" onclick=\"event.stopPropagation()\">' +\n '</div>' +\n '<div class=\"field\"><label>Blocked Tools</label>' +\n '<input type=\"text\" value=\"' + role.blocked_tools.join(', ') + '\" onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'blocked_tools\\\\', this.value)\" onclick=\"event.stopPropagation()\">' +\n '</div>' +\n '<div class=\"field\"><label>Execution Mode</label>' +\n '<select onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'execution_mode\\\\', this.value)\" onclick=\"event.stopPropagation()\">' +\n '<option value=\"supervised\"' + (role.execution_mode === 'supervised' ? ' selected' : '') + '>Supervised</option>' +\n '<option value=\"autonomous\"' + (role.execution_mode === 'autonomous' ? ' selected' : '') + '>Autonomous</option>' +\n '<option value=\"dry_run\"' + (role.execution_mode === 'dry_run' ? ' selected' : '') + '>Dry Run</option>' +\n '</select>' +\n '</div>' +\n '<div class=\"field\"><label>Token Budget Daily</label>' +\n '<input type=\"number\" value=\"' + role.token_budget_daily + '\" onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'token_budget_daily\\\\', parseInt(this.value))\" onclick=\"event.stopPropagation()\">' +\n '</div>' +\n '</div>';\n grid.appendChild(card);\n }\n}\n\nfunction toggleRole(key) {\n selectedRoles[key] = !selectedRoles[key];\n renderRoles();\n updatePreview();\n}\n\nfunction updateRoleField(key, field, value) {\n if (field === 'allowed_tools' || field === 'blocked_tools') {\n PRESET_ROLES[key][field] = value.split(',').map(s => s.trim()).filter(Boolean);\n } else {\n PRESET_ROLES[key][field] = value;\n }\n updatePreview();\n}\n\n// ─── Section Toggle ──────────────────────────────────────────────────\nfunction toggleSection(id) {\n document.getElementById(id).classList.toggle('collapsed');\n}\n\n// ─── Chip Groups ─────────────────────────────────────────────────────\nfunction selectChip(el) {\n const group = el.parentElement;\n group.querySelectorAll('.chip').forEach(c => c.classList.remove('active'));\n el.classList.add('active');\n\n // Auth provider visibility\n if (group.id === 'auth-provider') {\n const val = el.dataset.value;\n document.getElementById('auth-env-fields').classList.toggle('hidden', val !== 'env');\n document.getElementById('auth-local-fields').classList.toggle('hidden', val !== 'local');\n }\n\n updatePreview();\n}\n\nfunction getChipValue(groupId) {\n const active = document.querySelector('#' + groupId + ' .chip.active');\n return active ? active.dataset.value : '';\n}\n\nfunction setChipValue(groupId, value) {\n const group = document.getElementById(groupId);\n if (!group) return;\n group.querySelectorAll('.chip').forEach(c => {\n c.classList.toggle('active', c.dataset.value === value);\n });\n}\n\n// ─── Custom Patterns ─────────────────────────────────────────────────\nfunction addCustomPattern() {\n customPatterns.push({ name: '', pattern: '', severity: 'medium', action: 'audit' });\n renderCustomPatterns();\n}\n\nfunction renderCustomPatterns() {\n const container = document.getElementById('dlp-custom-patterns');\n container.innerHTML = '';\n customPatterns.forEach((p, i) => {\n const div = document.createElement('div');\n div.className = 'pattern-item';\n div.innerHTML =\n '<input type=\"text\" placeholder=\"Name\" value=\"' + esc(p.name) + '\" onchange=\"customPatterns[' + i + '].name=this.value;updatePreview()\">' +\n '<input type=\"text\" placeholder=\"Regex pattern\" value=\"' + esc(p.pattern) + '\" onchange=\"customPatterns[' + i + '].pattern=this.value;updatePreview()\">' +\n '<select onchange=\"customPatterns[' + i + '].severity=this.value;updatePreview()\">' +\n '<option value=\"low\"' + (p.severity==='low'?' selected':'') + '>Low</option>' +\n '<option value=\"medium\"' + (p.severity==='medium'?' selected':'') + '>Medium</option>' +\n '<option value=\"high\"' + (p.severity==='high'?' selected':'') + '>High</option>' +\n '<option value=\"critical\"' + (p.severity==='critical'?' selected':'') + '>Critical</option>' +\n '</select>' +\n '<button class=\"btn-remove\" onclick=\"customPatterns.splice(' + i + ',1);renderCustomPatterns();updatePreview()\">&times;</button>';\n container.appendChild(div);\n });\n}\n\n// ─── Allowlist ───────────────────────────────────────────────────────\nfunction addAllowlistEntry() {\n allowlistEntries.push('');\n renderAllowlist();\n}\n\nfunction renderAllowlist() {\n const container = document.getElementById('dlp-allowlist');\n container.innerHTML = '';\n allowlistEntries.forEach((entry, i) => {\n const div = document.createElement('div');\n div.className = 'allowlist-item';\n div.innerHTML =\n '<input type=\"text\" placeholder=\"Pattern to allow\" value=\"' + esc(entry) + '\" onchange=\"allowlistEntries[' + i + ']=this.value;updatePreview()\">' +\n '<button class=\"btn-remove\" onclick=\"allowlistEntries.splice(' + i + ',1);renderAllowlist();updatePreview()\">&times;</button>';\n container.appendChild(div);\n });\n}\n\n// ─── Audit Sinks ─────────────────────────────────────────────────────\nfunction addAuditSink() {\n auditSinks.push({ type: 'jsonl', path: '' });\n renderAuditSinks();\n}\n\nfunction renderAuditSinks() {\n const container = document.getElementById('audit-sinks');\n container.innerHTML = '';\n auditSinks.forEach((sink, i) => {\n const div = document.createElement('div');\n div.className = 'sink-item';\n let inner = '<button class=\"btn-remove\" onclick=\"auditSinks.splice(' + i + ',1);renderAuditSinks();updatePreview()\">&times;</button>';\n inner += '<div class=\"field\"><label>Sink Type</label>' +\n '<select onchange=\"auditSinks[' + i + '].type=this.value;renderAuditSinks();updatePreview()\">' +\n '<option value=\"jsonl\"' + (sink.type==='jsonl'?' selected':'') + '>JSONL File</option>' +\n '<option value=\"webhook\"' + (sink.type==='webhook'?' selected':'') + '>Webhook</option>' +\n '<option value=\"postgres\"' + (sink.type==='postgres'?' selected':'') + '>PostgreSQL</option>' +\n '</select></div>';\n if (sink.type === 'jsonl') {\n inner += '<div class=\"field\"><label>File Path</label>' +\n '<input type=\"text\" value=\"' + esc(sink.path || '') + '\" placeholder=\"~/.pi/agent/audit.jsonl\" ' +\n 'onchange=\"auditSinks[' + i + '].path=this.value;updatePreview()\"></div>';\n } else if (sink.type === 'webhook') {\n inner += '<div class=\"field\"><label>Webhook URL</label>' +\n '<input type=\"text\" value=\"' + esc(sink.url || '') + '\" placeholder=\"https://...\" ' +\n 'onchange=\"auditSinks[' + i + '].url=this.value;updatePreview()\"></div>';\n } else if (sink.type === 'postgres') {\n inner += '<div class=\"field\"><label>Connection String</label>' +\n '<input type=\"text\" value=\"' + esc(sink.connection || '') + '\" placeholder=\"postgresql://...\" ' +\n 'onchange=\"auditSinks[' + i + '].connection=this.value;updatePreview()\"></div>';\n }\n div.innerHTML = inner;\n container.appendChild(div);\n });\n}\n\n// ─── Preview Tabs ────────────────────────────────────────────────────\nfunction switchTab(el) {\n document.querySelectorAll('.preview-tab').forEach(t => t.classList.remove('active'));\n el.classList.add('active');\n activePreviewTab = el.dataset.tab;\n updatePreview();\n}\n\n// ─── YAML Generator ──────────────────────────────────────────────────\nfunction toYaml(obj, indent) {\n indent = indent || 0;\n const pad = ' '.repeat(indent);\n let out = '';\n\n if (Array.isArray(obj)) {\n if (obj.length === 0) return ' []\\\\n';\n for (const item of obj) {\n if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n const keys = Object.keys(item);\n if (keys.length > 0) {\n out += pad + '- ' + keys[0] + ': ' + formatScalar(item[keys[0]]) + '\\\\n';\n for (let k = 1; k < keys.length; k++) {\n const val = item[keys[k]];\n if (typeof val === 'object' && val !== null) {\n out += pad + ' ' + keys[k] + ':\\\\n' + toYaml(val, indent + 2);\n } else {\n out += pad + ' ' + keys[k] + ': ' + formatScalar(val) + '\\\\n';\n }\n }\n }\n } else {\n out += pad + '- ' + formatScalar(item) + '\\\\n';\n }\n }\n return out;\n }\n\n if (typeof obj === 'object' && obj !== null) {\n for (const [key, val] of Object.entries(obj)) {\n if (val === undefined || val === null) continue;\n if (typeof val === 'object') {\n const yamlVal = toYaml(val, indent + 1);\n if (Array.isArray(val) && val.length === 0) {\n out += pad + key + ': []\\\\n';\n } else {\n out += pad + key + ':\\\\n' + yamlVal;\n }\n } else {\n out += pad + key + ': ' + formatScalar(val) + '\\\\n';\n }\n }\n return out;\n }\n\n return pad + formatScalar(obj) + '\\\\n';\n}\n\nfunction formatScalar(val) {\n if (typeof val === 'boolean') return val ? 'true' : 'false';\n if (typeof val === 'number') return String(val);\n if (typeof val === 'string') {\n if (val === '') return \"''\";\n if (val === 'true' || val === 'false' || !isNaN(val)) return \"'\" + val + \"'\";\n if (/[:#{}\\\\[\\\\],&*?|\\\\->!%@]/.test(val) || val.includes('\\\\\\\\')) return \"'\" + val.replace(/'/g, \"''\") + \"'\";\n return val;\n }\n return String(val);\n}\n\n// ─── Build Config Objects ────────────────────────────────────────────\nfunction buildGovernanceConfig() {\n const cfg = {};\n\n // Auth\n const authProvider = getChipValue('auth-provider');\n cfg.auth = { provider: authProvider };\n if (authProvider === 'env') {\n cfg.auth.env = {\n user_var: document.getElementById('auth-user-var').value || 'PI_GOV_USER',\n role_var: document.getElementById('auth-role-var').value || 'PI_GOV_ROLE',\n org_unit_var: document.getElementById('auth-org-unit-var').value || 'PI_GOV_ORG_UNIT'\n };\n } else if (authProvider === 'local') {\n cfg.auth.local = {\n users_file: document.getElementById('auth-users-file').value || './users.yaml'\n };\n }\n\n // Policy\n cfg.policy = {\n engine: 'yaml',\n yaml: { rules_file: './governance-rules.yaml' }\n };\n\n // HITL\n cfg.hitl = {\n default_mode: getChipValue('hitl-mode') || 'supervised',\n approval_channel: document.getElementById('hitl-channel').value,\n timeout_seconds: parseInt(document.getElementById('hitl-timeout').value) || 300\n };\n if (cfg.hitl.approval_channel === 'webhook') {\n const url = document.getElementById('hitl-webhook-url').value;\n if (url) cfg.hitl.webhook = { url: url };\n }\n\n // Audit\n cfg.audit = { sinks: auditSinks.filter(s => {\n if (s.type === 'jsonl') return s.path;\n if (s.type === 'webhook') return s.url;\n if (s.type === 'postgres') return s.connection;\n return false;\n }).map(s => {\n if (s.type === 'jsonl') return { type: 'jsonl', path: s.path };\n if (s.type === 'webhook') return { type: 'webhook', url: s.url };\n if (s.type === 'postgres') return { type: 'postgres', connection: s.connection };\n return s;\n })};\n\n // DLP\n if (document.getElementById('dlp-enabled').checked) {\n cfg.dlp = {\n enabled: true,\n mode: getChipValue('dlp-mode') || 'audit'\n };\n const onInput = document.getElementById('dlp-on-input').value;\n const onOutput = document.getElementById('dlp-on-output').value;\n if (onInput) cfg.dlp.on_input = onInput;\n if (onOutput) cfg.dlp.on_output = onOutput;\n cfg.dlp.masking = {\n strategy: document.getElementById('dlp-mask-strategy').value,\n show_chars: parseInt(document.getElementById('dlp-mask-show').value) || 4,\n placeholder: document.getElementById('dlp-mask-placeholder').value || '***'\n };\n cfg.dlp.severity_threshold = getChipValue('dlp-severity') || 'low';\n cfg.dlp.built_in = {\n secrets: document.getElementById('dlp-secrets').checked,\n pii: document.getElementById('dlp-pii').checked\n };\n const patterns = customPatterns.filter(p => p.name && p.pattern);\n if (patterns.length > 0) cfg.dlp.custom_patterns = patterns;\n const al = allowlistEntries.filter(Boolean);\n if (al.length > 0) cfg.dlp.allowlist = al.map(p => ({ pattern: p }));\n } else {\n cfg.dlp = { enabled: false };\n }\n\n return cfg;\n}\n\nfunction buildRulesConfig() {\n const roles = {};\n for (const [key, sel] of Object.entries(selectedRoles)) {\n if (!sel) continue;\n const r = PRESET_ROLES[key];\n const role = {\n allowed_tools: r.allowed_tools,\n blocked_tools: r.blocked_tools,\n prompt_template: r.prompt_template,\n execution_mode: r.execution_mode,\n human_approval: r.human_approval,\n token_budget_daily: r.token_budget_daily,\n allowed_paths: r.allowed_paths,\n blocked_paths: r.blocked_paths\n };\n if (r.bash_overrides) role.bash_overrides = r.bash_overrides;\n roles[key] = role;\n }\n return { roles: roles };\n}\n\n// ─── Update Preview ──────────────────────────────────────────────────\nfunction updatePreview() {\n const el = document.getElementById('preview-yaml');\n if (activePreviewTab === 'governance') {\n const cfg = buildGovernanceConfig();\n el.textContent = '# governance.yaml\\\\n# Generated by Pi Governance Setup Wizard\\\\n\\\\n' + toYaml(cfg);\n } else {\n const rules = buildRulesConfig();\n el.textContent = '# governance-rules.yaml\\\\n# Generated by Pi Governance Setup Wizard\\\\n\\\\n' + toYaml(rules);\n }\n}\n\n// ─── Save ────────────────────────────────────────────────────────────\nasync function handleSave() {\n const btn = document.getElementById('btn-save');\n const status = document.getElementById('save-status');\n btn.disabled = true;\n status.textContent = 'Saving...';\n status.className = 'save-status';\n\n try {\n const payload = {\n governance: buildGovernanceConfig(),\n rules: buildRulesConfig()\n };\n const res = await fetch('/api/save', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload)\n });\n if (!res.ok) {\n const err = await res.text();\n throw new Error(err || 'Server error');\n }\n const result = await res.json();\n showToast('Configuration saved!', 'success');\n status.textContent = 'Saved: ' + (result.files || []).join(', ');\n status.className = 'save-status success';\n } catch (e) {\n showToast('Failed to save: ' + e.message, 'error');\n status.textContent = 'Error: ' + e.message;\n status.className = 'save-status error';\n } finally {\n btn.disabled = false;\n }\n}\n\nasync function handleClose() {\n try { await fetch('/api/close', { method: 'POST' }); } catch (e) { /* ignore */ }\n window.close();\n}\n\n// ─── Toast ───────────────────────────────────────────────────────────\nfunction showToast(msg, type) {\n const toast = document.getElementById('toast');\n toast.textContent = msg;\n toast.className = 'toast ' + type + ' visible';\n setTimeout(() => { toast.classList.remove('visible'); }, 3000);\n}\n\n// ─── Util ────────────────────────────────────────────────────────────\nfunction esc(s) {\n return String(s).replace(/&/g,'&amp;').replace(/\"/g,'&quot;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n}\n</script>\n</body>\n</html>`;\n"],"mappings":"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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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","names":["exports","QueryEventKind","exports","module","ancestors","exports","exports","MessageKind","exports","exports","host","result","exports","exports","exports","exports","exports","v","exports","exports","module","ptr","query","exports","exports","exports","parseYaml","import_fs","import_yaml","parseYaml","OsoPolicyEngine","OsoMemoryFactStore","import_fs","import_yaml","parseYaml","import_yaml","parseYaml","import_node_fs","import_yaml","import_value","parseYaml","import_node_fs","import_node_crypto","import_node_path","import_node_fs","import_node_path","import_yaml","resolve"]}
1
+ {"version":3,"sources":["../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/types.ts","../node_modules/.pnpm/lodash-isequal-shim@file+packages+lodash-isequal-shim/node_modules/lodash-isequal-shim/index.cjs","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/helpers.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/errors.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/messages.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/filter.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Query.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Expression.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Pattern.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Predicate.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Variable.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Host.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/dist/src/polar_wasm_api.js","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Polar.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/Oso.ts","../node_modules/.pnpm/oso@0.27.3/node_modules/oso/src/index.ts","../src/lib/policy/oso-engine.ts","../src/lib/facts/oso-memory-store.ts","../src/index.ts","../src/lib/config/loader.ts","../src/lib/config/schema.ts","../src/lib/config/defaults.ts","../src/lib/policy/yaml-engine.ts","../src/lib/policy/factory.ts","../src/lib/identity/env-provider.ts","../src/lib/identity/local-provider.ts","../src/lib/identity/chain.ts","../src/lib/facts/yaml-store.ts","../src/lib/bash/patterns.ts","../src/lib/bash/classifier.ts","../src/lib/dlp/patterns.ts","../src/lib/dlp/scanner.ts","../src/lib/dlp/masker.ts","../src/lib/deps/parser.ts","../src/lib/deps/registry.ts","../src/lib/deps/vulnerabilities.ts","../src/lib/deps/levenshtein.ts","../src/lib/deps/allowlist.ts","../src/lib/deps/risk.ts","../src/lib/deps/guardian.ts","../src/lib/budget/tracker.ts","../src/lib/config/watcher.ts","../src/lib/templates/selector.ts","../src/lib/templates/renderer.ts","../src/lib/audit/logger.ts","../src/lib/audit/sinks/jsonl.ts","../src/lib/audit/sinks/webhook.ts","../src/lib/hitl/cli-approver.ts","../src/lib/hitl/webhook-approver.ts","../src/lib/hitl/approval.ts","../src/lib/wizard/server.ts","../src/lib/wizard/html.ts"],"sourcesContent":[null,"// Drop-in replacement for deprecated lodash.isequal using Node.js built-in.\n// See: https://github.com/lodash/lodash/issues/5765\nconst { isDeepStrictEqual } = require('node:util');\nmodule.exports = isDeepStrictEqual;\n",null,null,null,null,null,null,null,null,null,null,"let imports = {};\nimports['__wbindgen_placeholder__'] = module.exports;\nlet wasm;\nconst { TextEncoder, TextDecoder } = require(`util`);\n\nconst heap = new Array(32).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet WASM_VECTOR_LEN = 0;\n\nlet cachedUint8Memory0 = new Uint8Array();\n\nfunction getUint8Memory0() {\n if (cachedUint8Memory0.byteLength === 0) {\n cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8Memory0;\n}\n\nlet cachedTextEncoder = new TextEncoder('utf-8');\n\nconst encodeString = (typeof cachedTextEncoder.encodeInto === 'function'\n ? function (arg, view) {\n return cachedTextEncoder.encodeInto(arg, view);\n}\n : function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n});\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length);\n getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len);\n\n const mem = getUint8Memory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3);\n const view = getUint8Memory0().subarray(ptr + offset, ptr + len);\n const ret = encodeString(arg, view);\n\n offset += ret.written;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nlet cachedInt32Memory0 = new Int32Array();\n\nfunction getInt32Memory0() {\n if (cachedInt32Memory0.byteLength === 0) {\n cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);\n }\n return cachedInt32Memory0;\n}\n\nlet heap_next = heap.length;\n\nfunction dropObject(idx) {\n if (idx < 36) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nlet cachedFloat64Memory0 = new Float64Array();\n\nfunction getFloat64Memory0() {\n if (cachedFloat64Memory0.byteLength === 0) {\n cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer);\n }\n return cachedFloat64Memory0;\n}\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nfunction getStringFromWasm0(ptr, len) {\n return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_exn_store(addHeapObject(e));\n }\n}\n/**\n*/\nclass Polar {\n\n static __wrap(ptr) {\n const obj = Object.create(Polar.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_polar_free(ptr);\n }\n /**\n */\n constructor() {\n const ret = wasm.polar_wasm_new();\n return Polar.__wrap(ret);\n }\n /**\n * @param {any} sources\n */\n load(sources) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.polar_load(retptr, this.ptr, addHeapObject(sources));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n */\n clearRules() {\n wasm.polar_clearRules(this.ptr);\n }\n /**\n * @param {string} name\n * @param {any} term\n */\n registerConstant(name, term) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.polar_registerConstant(retptr, this.ptr, ptr0, len0, addHeapObject(term));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {Query | undefined}\n */\n nextInlineQuery() {\n const ret = wasm.polar_nextInlineQuery(this.ptr);\n return ret === 0 ? undefined : Query.__wrap(ret);\n }\n /**\n * @param {string} src\n * @returns {Query}\n */\n newQueryFromStr(src) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(src, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.polar_newQueryFromStr(retptr, this.ptr, ptr0, len0);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return Query.__wrap(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {any} term\n * @returns {Query}\n */\n newQueryFromTerm(term) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.polar_newQueryFromTerm(retptr, this.ptr, addHeapObject(term));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return Query.__wrap(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {number}\n */\n newId() {\n const ret = wasm.polar_newId(this.ptr);\n return ret;\n }\n /**\n * @returns {any}\n */\n nextMessage() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.polar_nextMessage(retptr, this.ptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} name\n * @param {any} mro\n */\n registerMro(name, mro) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.polar_registerMro(retptr, this.ptr, ptr0, len0, addHeapObject(mro));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {any} types\n * @param {any} partial_results\n * @param {string} variable\n * @param {string} class_tag\n * @returns {any}\n */\n buildDataFilter(types, partial_results, variable, class_tag) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(variable, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(class_tag, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n wasm.polar_buildDataFilter(retptr, this.ptr, addHeapObject(types), addHeapObject(partial_results), ptr0, len0, ptr1, len1);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {boolean} ignore_no_allow_warning\n */\n setIgnoreNoAllowWarning(ignore_no_allow_warning) {\n wasm.polar_setIgnoreNoAllowWarning(this.ptr, ignore_no_allow_warning);\n }\n}\nmodule.exports.Polar = Polar;\n/**\n*/\nclass Query {\n\n static __wrap(ptr) {\n const obj = Object.create(Query.prototype);\n obj.ptr = ptr;\n\n return obj;\n }\n\n __destroy_into_raw() {\n const ptr = this.ptr;\n this.ptr = 0;\n\n return ptr;\n }\n\n free() {\n const ptr = this.__destroy_into_raw();\n wasm.__wbg_query_free(ptr);\n }\n /**\n * @returns {any}\n */\n nextEvent() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.query_nextEvent(retptr, this.ptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} call_id\n * @param {any} term\n */\n callResult(call_id, term) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.query_callResult(retptr, this.ptr, call_id, addHeapObject(term));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {number} call_id\n * @param {boolean} result\n */\n questionResult(call_id, result) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.query_questionResult(retptr, this.ptr, call_id, result);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} command\n */\n debugCommand(command) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(command, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.query_debugCommand(retptr, this.ptr, ptr0, len0);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string} msg\n */\n appError(msg) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(msg, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.query_appError(retptr, this.ptr, ptr0, len0);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {any}\n */\n nextMessage() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.query_nextMessage(retptr, this.ptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n var r2 = getInt32Memory0()[retptr / 4 + 2];\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @returns {string}\n */\n source() {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.query_source(retptr, this.ptr);\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n return getStringFromWasm0(r0, r1);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n wasm.__wbindgen_free(r0, r1);\n }\n }\n /**\n * @param {string} name\n * @param {any} term\n */\n bind(name, term) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n const ptr0 = passStringToWasm0(name, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n wasm.query_bind(retptr, this.ptr, ptr0, len0, addHeapObject(term));\n var r0 = getInt32Memory0()[retptr / 4 + 0];\n var r1 = getInt32Memory0()[retptr / 4 + 1];\n if (r1) {\n throw takeObject(r0);\n }\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n }\n /**\n * @param {string | undefined} rust_log\n * @param {string | undefined} polar_log\n */\n setLoggingOptions(rust_log, polar_log) {\n var ptr0 = isLikeNone(rust_log) ? 0 : passStringToWasm0(rust_log, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n var ptr1 = isLikeNone(polar_log) ? 0 : passStringToWasm0(polar_log, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len1 = WASM_VECTOR_LEN;\n wasm.query_setLoggingOptions(this.ptr, ptr0, len0, ptr1, len1);\n }\n}\nmodule.exports.Query = Query;\n\nmodule.exports.__wbindgen_string_get = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr0 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n var len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n};\n\nmodule.exports.__wbindgen_boolean_get = function(arg0) {\n const v = getObject(arg0);\n const ret = typeof(v) === 'boolean' ? (v ? 1 : 0) : 2;\n return ret;\n};\n\nmodule.exports.__wbindgen_number_get = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;\n getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);\n};\n\nmodule.exports.__wbindgen_is_object = function(arg0) {\n const val = getObject(arg0);\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n};\n\nmodule.exports.__wbindgen_is_string = function(arg0) {\n const ret = typeof(getObject(arg0)) === 'string';\n return ret;\n};\n\nmodule.exports.__wbindgen_is_null = function(arg0) {\n const ret = getObject(arg0) === null;\n return ret;\n};\n\nmodule.exports.__wbindgen_is_undefined = function(arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n};\n\nmodule.exports.__wbindgen_number_new = function(arg0) {\n const ret = arg0;\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbindgen_object_clone_ref = function(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbindgen_string_new = function(arg0, arg1) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_String_9aa17d6248d519a5 = function(arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbg_get_723f83ba0c34871a = function(arg0, arg1) {\n const ret = getObject(arg0)[takeObject(arg1)];\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_set_ce5827ace4c694dc = function(arg0, arg1, arg2) {\n getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n};\n\nmodule.exports.__wbg_new_abda76e883ba8a5f = function() {\n const ret = new Error();\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_stack_658279fe44541cf6 = function(arg0, arg1) {\n const ret = getObject(arg1).stack;\n const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbg_error_f851667af71bcfc6 = function(arg0, arg1) {\n try {\n console.error(getStringFromWasm0(arg0, arg1));\n } finally {\n wasm.__wbindgen_free(arg0, arg1);\n }\n};\n\nmodule.exports.__wbg_error_06ae29e21839d332 = function(arg0, arg1) {\n console.error(getStringFromWasm0(arg0, arg1));\n};\n\nmodule.exports.__wbg_get_57245cc7d7c7619d = function(arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_length_6e3bbe7c8bd4dbd8 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n};\n\nmodule.exports.__wbg_new_1d9a920c6bfc44a8 = function() {\n const ret = new Array();\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbindgen_is_function = function(arg0) {\n const ret = typeof(getObject(arg0)) === 'function';\n return ret;\n};\n\nmodule.exports.__wbg_new_268f7b7dd3430798 = function() {\n const ret = new Map();\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_next_579e583d33566a86 = function(arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_next_aaef7c8aa5e212ac = function() { return handleError(function (arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n}, arguments) };\n\nmodule.exports.__wbg_done_1b73b0672e15f234 = function(arg0) {\n const ret = getObject(arg0).done;\n return ret;\n};\n\nmodule.exports.__wbg_value_1ccc36bc03462d71 = function(arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_iterator_6f9d4f28845f426c = function() {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_get_765201544a2b6869 = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nmodule.exports.__wbg_call_97ae9d8645dc388b = function() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n}, arguments) };\n\nmodule.exports.__wbg_new_0b9bfdd97583284e = function() {\n const ret = new Object();\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_isArray_27c46c67f498e15d = function(arg0) {\n const ret = Array.isArray(getObject(arg0));\n return ret;\n};\n\nmodule.exports.__wbg_push_740e4b286702d964 = function(arg0, arg1) {\n const ret = getObject(arg0).push(getObject(arg1));\n return ret;\n};\n\nmodule.exports.__wbg_instanceof_ArrayBuffer_e5e48f4762c5610b = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nmodule.exports.__wbg_values_e42671acbf11ec04 = function(arg0) {\n const ret = getObject(arg0).values();\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_new_8d2af00bc1e329ee = function(arg0, arg1) {\n const ret = new Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_setname_d26cefd43ea3a082 = function(arg0, arg1, arg2) {\n getObject(arg0).name = getStringFromWasm0(arg1, arg2);\n};\n\nmodule.exports.__wbg_set_933729cf5b66ac11 = function(arg0, arg1, arg2) {\n const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_isSafeInteger_dfa0593e8d7ac35a = function(arg0) {\n const ret = Number.isSafeInteger(getObject(arg0));\n return ret;\n};\n\nmodule.exports.__wbg_now_58886682b7e790d7 = function() {\n const ret = Date.now();\n return ret;\n};\n\nmodule.exports.__wbg_entries_65a76a413fc91037 = function(arg0) {\n const ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_buffer_3f3d764d4747d564 = function(arg0) {\n const ret = getObject(arg0).buffer;\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_new_8c3f0052272a457a = function(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n};\n\nmodule.exports.__wbg_set_83db9690f9353e79 = function(arg0, arg1, arg2) {\n getObject(arg0).set(getObject(arg1), arg2 >>> 0);\n};\n\nmodule.exports.__wbg_length_9e1ae1900cb0fbd5 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n};\n\nmodule.exports.__wbg_instanceof_Uint8Array_971eeda69eb75003 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch {\n result = false;\n }\n const ret = result;\n return ret;\n};\n\nmodule.exports.__wbg_has_8359f114ce042f5a = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.has(getObject(arg0), getObject(arg1));\n return ret;\n}, arguments) };\n\nmodule.exports.__wbindgen_debug_string = function(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr0 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n getInt32Memory0()[arg0 / 4 + 1] = len0;\n getInt32Memory0()[arg0 / 4 + 0] = ptr0;\n};\n\nmodule.exports.__wbindgen_throw = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n};\n\nmodule.exports.__wbindgen_memory = function() {\n const ret = wasm.memory;\n return addHeapObject(ret);\n};\n\nconst path = require('path').join(__dirname, 'polar_wasm_api_bg.wasm');\nconst bytes = require('fs').readFileSync(path);\n\nconst wasmModule = new WebAssembly.Module(bytes);\nconst wasmInstance = new WebAssembly.Instance(wasmModule, imports);\nwasm = wasmInstance.exports;\nmodule.exports.__wasm = wasm;\n\n",null,null,null,"import type {\n PolicyEngine,\n PolicyDecision,\n PathOperation,\n ExecutionMode,\n BashOverrides,\n} from './engine.js';\nimport type { FactStore } from '../facts/store.js';\n\n// Resource classes for Oso registration\nclass User {\n constructor(\n public role: string,\n public orgUnit?: string,\n ) {}\n}\n\nclass Tool {\n constructor(public name: string) {}\n}\n\nclass FilePath {\n constructor(\n public path: string,\n public orgUnit: string,\n ) {}\n}\n\nclass AgentSession {}\n\nexport class OsoPolicyEngine implements PolicyEngine {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private oso: any;\n private roleConfigs: Map<string, Record<string, unknown>> = new Map();\n\n private constructor() {}\n\n static async create(polarFiles: string[], factStore: FactStore): Promise<OsoPolicyEngine> {\n let OsoClass;\n try {\n const osoModule = await import('oso');\n OsoClass = osoModule.Oso;\n } catch {\n throw new Error(\n 'oso package is not installed. Install it with: npm install oso\\n' +\n 'Or switch to the YAML policy engine: policy.engine: yaml',\n );\n }\n\n const engine = new OsoPolicyEngine();\n engine.oso = new OsoClass();\n\n engine.oso.registerClass(User);\n engine.oso.registerClass(Tool);\n engine.oso.registerClass(FilePath);\n engine.oso.registerClass(AgentSession);\n\n for (const file of polarFiles) {\n await engine.oso.loadFiles([file]);\n }\n\n const bindings = await factStore.getAllRoleBindings();\n for (const binding of bindings) {\n if (binding.config) {\n engine.roleConfigs.set(binding.role, binding.config);\n }\n }\n\n return engine;\n }\n\n evaluateTool(role: string, tool: string): PolicyDecision {\n const user = new User(role);\n const toolResource = new Tool(tool);\n\n // isAllowed is async in oso, but we need sync for the interface.\n // Use a synchronous check via queryRuleOnce if available,\n // otherwise we cache results. For now, use a sync wrapper.\n // NOTE: In practice, the Pi extension calls this in an async context,\n // so we provide an async-compatible path.\n try {\n // oso's isAllowed returns a Promise<boolean> — but we need sync.\n // This will be called from an async context in practice.\n // For the sync interface, we do a best-effort check using queryRule.\n const result = this.oso.isAllowedSync?.(user, 'invoke', toolResource);\n if (result !== undefined) {\n return result ? 'allow' : 'deny';\n }\n } catch {\n // isAllowedSync not available\n }\n\n // Fallback: deny if we can't check synchronously\n return 'deny';\n }\n\n async evaluateToolAsync(role: string, tool: string): Promise<PolicyDecision> {\n const user = new User(role);\n const toolResource = new Tool(tool);\n const allowed = await this.oso.isAllowed(user, 'invoke', toolResource);\n return allowed ? 'allow' : 'deny';\n }\n\n evaluatePath(\n role: string,\n orgUnit: string,\n operation: PathOperation,\n _path: string,\n ): PolicyDecision {\n const user = new User(role, orgUnit);\n const filePath = new FilePath(_path, orgUnit);\n\n try {\n const result = this.oso.isAllowedSync?.(user, operation, filePath);\n if (result !== undefined) {\n return result ? 'allow' : 'deny';\n }\n } catch {\n // fallback\n }\n return 'deny';\n }\n\n async evaluatePathAsync(\n role: string,\n orgUnit: string,\n operation: PathOperation,\n path: string,\n ): Promise<PolicyDecision> {\n const user = new User(role, orgUnit);\n const filePath = new FilePath(path, orgUnit);\n const allowed = await this.oso.isAllowed(user, operation, filePath);\n return allowed ? 'allow' : 'deny';\n }\n\n requiresApproval(role: string, tool: string): boolean {\n // Check if auto_approve is granted\n try {\n const user = new User(role);\n const toolResource = new Tool(tool);\n const result = this.oso.isAllowedSync?.(user, 'auto_approve', toolResource);\n if (result !== undefined) return !result;\n } catch {\n // fallback\n }\n return true; // default: require approval\n }\n\n getExecutionMode(role: string): ExecutionMode {\n const config = this.roleConfigs.get(role);\n return (config?.execution_mode as ExecutionMode) ?? 'supervised';\n }\n\n getTemplateName(role: string): string {\n const config = this.roleConfigs.get(role);\n return (config?.prompt_template as string) ?? 'project-lead';\n }\n\n getBashOverrides(role: string): BashOverrides {\n const config = this.roleConfigs.get(role);\n const overrides = config?.bash_overrides as\n | { additional_blocked?: string[]; additional_allowed?: string[] }\n | undefined;\n if (!overrides) return {};\n\n return {\n additionalBlocked: overrides.additional_blocked?.map((p) => new RegExp(p)),\n additionalAllowed: overrides.additional_allowed?.map((p) => new RegExp(p)),\n };\n }\n\n getTokenBudget(role: string): number {\n const config = this.roleConfigs.get(role);\n return (config?.token_budget_daily as number) ?? -1;\n }\n}\n","import type { FactStore, RoleBinding, Relation } from './store.js';\n\nexport class OsoMemoryFactStore implements FactStore {\n private bindings: RoleBinding[] = [];\n private relations: Relation[] = [];\n\n addRoleBinding(binding: RoleBinding): void {\n this.bindings.push(binding);\n }\n\n addRelation(relation: Relation): void {\n this.relations.push(relation);\n }\n\n async getRoles(userId: string): Promise<RoleBinding[]> {\n return this.bindings.filter((b) => b.userId === userId);\n }\n\n async getAllRoleBindings(): Promise<RoleBinding[]> {\n return [...this.bindings];\n }\n\n async getRelations(subject: string, predicate: string): Promise<Relation[]> {\n return this.relations.filter((r) => r.subject === subject && r.predicate === predicate);\n }\n}\n","// Config\nexport { type GovernanceConfig } from './lib/config/schema.js';\nexport { loadConfig, ConfigValidationError } from './lib/config/loader.js';\n\n// Policy engine\nexport {\n type PolicyEngine,\n type PolicyDecision,\n type PathOperation,\n type ExecutionMode,\n type BashOverrides,\n} from './lib/policy/engine.js';\nexport { YamlPolicyEngine, type YamlRules, type YamlRole } from './lib/policy/yaml-engine.js';\nexport { createPolicyEngine } from './lib/policy/factory.js';\n\n// Identity\nexport { type IdentityProvider, type ResolvedIdentity } from './lib/identity/provider.js';\nexport { EnvIdentityProvider } from './lib/identity/env-provider.js';\nexport { LocalIdentityProvider } from './lib/identity/local-provider.js';\nexport { IdentityChain, createIdentityChain } from './lib/identity/chain.js';\n\n// Facts / permissions\nexport { type FactStore, type RoleBinding, type Relation } from './lib/facts/store.js';\nexport { YamlFactStore } from './lib/facts/yaml-store.js';\nexport { OsoMemoryFactStore } from './lib/facts/oso-memory-store.js';\n\n// Bash security\nexport { type BashClassification, BashClassifier } from './lib/bash/classifier.js';\nexport { SAFE_PATTERNS, DANGEROUS_PATTERNS } from './lib/bash/patterns.js';\n\n// DLP (Data Loss Prevention)\nexport {\n DlpScanner,\n DlpMasker,\n SECRET_PATTERNS as DLP_SECRET_PATTERNS,\n PII_PATTERNS as DLP_PII_PATTERNS,\n compareSeverity,\n type DlpAction,\n type DlpMatch,\n type DlpScanResult,\n type DlpScannerConfig,\n type DlpCustomPattern,\n type DlpAllowlistEntry,\n type DlpPatternDef,\n type DlpSeverity,\n type DlpCategory,\n type MaskingConfig,\n} from './lib/dlp/index.js';\n\n// Dependency Guardian\nexport {\n evaluateInstall,\n type DependencyGuardianConfig,\n type GuardianResult,\n} from './lib/deps/guardian.js';\nexport { parseInstallCommand, type ParsedInstall, type ParsedPackage } from './lib/deps/parser.js';\nexport {\n levenshteinDistance,\n normalizedSimilarity,\n detectTyposquat,\n} from './lib/deps/levenshtein.js';\nexport { fetchRegistryMetadata, type RegistryMetadata } from './lib/deps/registry.js';\nexport {\n queryVulnerabilities,\n queryVulnerabilitiesBatch,\n type VulnEntry,\n type VulnerabilityResult,\n} from './lib/deps/vulnerabilities.js';\nexport { type DependencyGuardianConfigType } from './lib/config/schema.js';\n\n// Budget\nexport { BudgetTracker } from './lib/budget/tracker.js';\n\n// Config watcher\nexport { ConfigWatcher } from './lib/config/watcher.js';\n\n// Templates\nexport { TemplateSelector, type TemplateSelectorConfig } from './lib/templates/selector.js';\nexport { render as renderTemplate } from './lib/templates/renderer.js';\n\n// Audit\nexport { type AuditSink } from './lib/audit/sinks/sink.js';\nexport { type AuditRecord, type AuditEventType } from './lib/audit/schema.js';\nexport { AuditLogger } from './lib/audit/logger.js';\nexport { JsonlAuditSink } from './lib/audit/sinks/jsonl.js';\nexport { WebhookAuditSink } from './lib/audit/sinks/webhook.js';\n\n// HITL\nexport {\n type ApprovalFlow,\n type ApprovalResult,\n type GovernanceToolCall,\n type ConfirmUI,\n type HitlConfig,\n createApprovalFlow,\n} from './lib/hitl/approval.js';\nexport { CliApprover } from './lib/hitl/cli-approver.js';\nexport { WebhookApprover } from './lib/hitl/webhook-approver.js';\n\n// Wizard\nexport { startWizardServer, type WizardServerOptions } from './lib/wizard/index.js';\n","import { existsSync, readFileSync } from 'fs';\nimport { parse as parseYaml } from 'yaml';\nimport { Value } from '@sinclair/typebox/value';\nimport { GovernanceConfigSchema, type GovernanceConfig } from './schema.js';\nimport { DEFAULTS } from './defaults.js';\n\nfunction getConfigPaths(): (string | undefined)[] {\n return [\n process.env['PI_GOV_GOVERNANCE_CONFIG'],\n '.pi/governance.yaml',\n `${process.env['HOME']}/.pi/agent/governance.yaml`,\n ];\n}\n\nexport function loadConfig(): { config: GovernanceConfig; source: string } {\n for (const path of getConfigPaths()) {\n if (path && existsSync(path)) {\n const raw = readFileSync(path, 'utf-8');\n const parsed = parseYaml(raw);\n\n const resolved = resolveEnvVars(parsed);\n\n const errors = [...Value.Errors(GovernanceConfigSchema, resolved)];\n if (errors.length > 0) {\n throw new ConfigValidationError(\n path,\n errors.map((e) => ({ path: e.path, message: e.message })),\n );\n }\n\n const config = Value.Default(GovernanceConfigSchema, resolved) as GovernanceConfig;\n return { config, source: path };\n }\n }\n\n return { config: DEFAULTS, source: 'built-in' };\n}\n\nfunction resolveEnvVars(obj: unknown): unknown {\n if (typeof obj === 'string') {\n return obj.replace(/\\$\\{(\\w+)\\}/g, (_, name: string) => process.env[name] ?? '');\n }\n if (Array.isArray(obj)) return obj.map(resolveEnvVars);\n if (obj && typeof obj === 'object') {\n return Object.fromEntries(\n Object.entries(obj as Record<string, unknown>).map(([k, v]) => [k, resolveEnvVars(v)]),\n );\n }\n return obj;\n}\n\nexport class ConfigValidationError extends Error {\n constructor(path: string, errors: Array<{ path: string; message: string }>) {\n const details = errors.map((e) => ` ${e.path}: ${e.message}`).join('\\n');\n super(`Invalid governance config at ${path}:\\n${details}`);\n this.name = 'ConfigValidationError';\n }\n}\n","import { Type, type Static } from '@sinclair/typebox';\n\nconst AuthEnvConfig = Type.Object({\n user_var: Type.String({ default: 'PI_GOV_USER' }),\n role_var: Type.String({ default: 'PI_GOV_ROLE' }),\n org_unit_var: Type.String({ default: 'PI_GOV_ORG_UNIT' }),\n});\n\nconst AuthLocalConfig = Type.Object({\n users_file: Type.String({ default: './users.yaml' }),\n});\n\nconst AuthConfig = Type.Object({\n provider: Type.Union([Type.Literal('env'), Type.Literal('local'), Type.Literal('oidc')], {\n default: 'env',\n }),\n env: Type.Optional(AuthEnvConfig),\n local: Type.Optional(AuthLocalConfig),\n});\n\nexport type AuthConfigType = Static<typeof AuthConfig>;\n\nconst YamlPolicyConfig = Type.Object({\n rules_file: Type.String({ default: './governance-rules.yaml' }),\n});\n\nconst OsoPolicyConfig = Type.Object({\n polar_files: Type.Array(Type.String(), {\n default: ['./policies/base.polar', './policies/tools.polar'],\n }),\n});\n\nconst PolicyConfig = Type.Object({\n engine: Type.Union([Type.Literal('yaml'), Type.Literal('oso')], { default: 'yaml' }),\n yaml: Type.Optional(YamlPolicyConfig),\n oso: Type.Optional(OsoPolicyConfig),\n});\n\nconst TemplatesConfig = Type.Object({\n directory: Type.String({ default: './templates/' }),\n default: Type.String({ default: 'project-lead' }),\n});\n\nconst HitlWebhookConfig = Type.Object({\n url: Type.String(),\n});\n\nconst HitlConfig = Type.Object({\n default_mode: Type.Union(\n [Type.Literal('autonomous'), Type.Literal('supervised'), Type.Literal('dry_run')],\n { default: 'supervised' },\n ),\n approval_channel: Type.Union([Type.Literal('cli'), Type.Literal('webhook')], { default: 'cli' }),\n timeout_seconds: Type.Number({ default: 300, minimum: 10, maximum: 3600 }),\n webhook: Type.Optional(HitlWebhookConfig),\n});\n\nconst JsonlSinkConfig = Type.Object({\n type: Type.Literal('jsonl'),\n path: Type.String({ default: '~/.pi/agent/audit.jsonl' }),\n});\n\nconst WebhookSinkConfig = Type.Object({\n type: Type.Literal('webhook'),\n url: Type.String(),\n});\n\nconst PostgresSinkConfig = Type.Object({\n type: Type.Literal('postgres'),\n connection: Type.String(),\n});\n\nconst AuditSinkConfig = Type.Union([JsonlSinkConfig, WebhookSinkConfig, PostgresSinkConfig]);\n\nconst AuditConfig = Type.Object({\n sinks: Type.Array(AuditSinkConfig, {\n default: [{ type: 'jsonl', path: '~/.pi/agent/audit.jsonl' }],\n }),\n});\n\nconst OrgUnitOverride = Type.Object({\n hitl: Type.Optional(Type.Partial(HitlConfig)),\n policy: Type.Optional(\n Type.Object({\n extra_polar: Type.Optional(Type.String()),\n extra_rules: Type.Optional(Type.String()),\n }),\n ),\n});\n\n// --- DLP (Data Loss Prevention) ---\n\nconst DlpMaskingConfig = Type.Object({\n strategy: Type.Union([Type.Literal('partial'), Type.Literal('full'), Type.Literal('hash')], {\n default: 'partial',\n }),\n show_chars: Type.Optional(Type.Number({ default: 4, minimum: 0 })),\n placeholder: Type.Optional(Type.String({ default: '***' })),\n});\n\nconst DlpCustomPatternConfig = Type.Object({\n name: Type.String(),\n pattern: Type.String(),\n severity: Type.Union([\n Type.Literal('low'),\n Type.Literal('medium'),\n Type.Literal('high'),\n Type.Literal('critical'),\n ]),\n action: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n});\n\nconst DlpAllowlistEntryConfig = Type.Object({\n pattern: Type.String(),\n});\n\nconst DlpRoleOverrideConfig = Type.Object({\n enabled: Type.Optional(Type.Boolean()),\n mode: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n on_input: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n on_output: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n});\n\nconst DlpConfig = Type.Object({\n enabled: Type.Boolean({ default: false }),\n mode: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')], {\n default: 'audit',\n }),\n ),\n on_input: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n on_output: Type.Optional(\n Type.Union([Type.Literal('audit'), Type.Literal('mask'), Type.Literal('block')]),\n ),\n masking: Type.Optional(DlpMaskingConfig),\n severity_threshold: Type.Optional(\n Type.Union(\n [Type.Literal('low'), Type.Literal('medium'), Type.Literal('high'), Type.Literal('critical')],\n { default: 'low' },\n ),\n ),\n built_in: Type.Optional(\n Type.Object({\n secrets: Type.Boolean({ default: true }),\n pii: Type.Boolean({ default: true }),\n }),\n ),\n custom_patterns: Type.Optional(Type.Array(DlpCustomPatternConfig)),\n allowlist: Type.Optional(Type.Array(DlpAllowlistEntryConfig)),\n role_overrides: Type.Optional(Type.Record(Type.String(), DlpRoleOverrideConfig)),\n});\n\nexport type DlpConfigType = Static<typeof DlpConfig>;\n\n// --- Dependency Guardian ---\n\nconst DependencyGuardianChecksConfig = Type.Object({\n existence: Type.Boolean({ default: true }),\n reputation: Type.Boolean({ default: true }),\n typosquatting: Type.Boolean({ default: true }),\n install_scripts: Type.Boolean({ default: true }),\n vulnerabilities: Type.Boolean({ default: true }),\n});\n\nconst DependencyGuardianConfig = Type.Object({\n enabled: Type.Boolean({ default: true }),\n checks: Type.Optional(DependencyGuardianChecksConfig),\n risk_thresholds: Type.Optional(\n Type.Object({\n min_age_days: Type.Number({ default: 30, minimum: 0 }),\n min_weekly_downloads: Type.Number({ default: 100, minimum: 0 }),\n }),\n ),\n on_risk: Type.Optional(\n Type.Union([Type.Literal('escalate'), Type.Literal('block'), Type.Literal('audit')], {\n default: 'escalate',\n }),\n ),\n allowlist: Type.Optional(Type.Array(Type.String())),\n blocklist: Type.Optional(Type.Array(Type.String())),\n blocklist_patterns: Type.Optional(Type.Array(Type.String())),\n custom_registry_bypass: Type.Boolean({ default: true }),\n});\n\nexport type DependencyGuardianConfigType = Static<typeof DependencyGuardianConfig>;\n\nexport const GovernanceConfigSchema = Type.Object({\n auth: Type.Optional(AuthConfig),\n policy: Type.Optional(PolicyConfig),\n templates: Type.Optional(TemplatesConfig),\n hitl: Type.Optional(HitlConfig),\n audit: Type.Optional(AuditConfig),\n dlp: Type.Optional(DlpConfig),\n dependency_guardian: Type.Optional(DependencyGuardianConfig),\n org_units: Type.Optional(Type.Record(Type.String(), OrgUnitOverride)),\n});\n\nexport type GovernanceConfig = Static<typeof GovernanceConfigSchema>;\n","import type { GovernanceConfig } from './schema.js';\n\nexport const DEFAULTS: GovernanceConfig = {\n auth: {\n provider: 'env',\n env: {\n user_var: 'PI_GOV_USER',\n role_var: 'PI_GOV_ROLE',\n org_unit_var: 'PI_GOV_ORG_UNIT',\n },\n },\n policy: {\n engine: 'yaml',\n yaml: {\n rules_file: './governance-rules.yaml',\n },\n },\n templates: {\n directory: './templates/',\n default: 'project-lead',\n },\n hitl: {\n default_mode: 'supervised',\n approval_channel: 'cli',\n timeout_seconds: 300,\n },\n audit: {\n sinks: [{ type: 'jsonl', path: '~/.pi/agent/audit.jsonl' }],\n },\n dlp: {\n enabled: true,\n mode: 'audit',\n on_input: 'block',\n on_output: 'mask',\n masking: {\n strategy: 'partial',\n show_chars: 4,\n placeholder: '***',\n },\n severity_threshold: 'low',\n built_in: {\n secrets: true,\n pii: true,\n },\n },\n};\n","import { readFileSync } from 'fs';\nimport { parse as parseYaml } from 'yaml';\nimport { minimatch } from 'minimatch';\nimport type {\n PolicyEngine,\n PolicyDecision,\n PathOperation,\n ExecutionMode,\n BashOverrides,\n} from './engine.js';\n\nexport interface YamlRole {\n allowed_tools: string[];\n blocked_tools: string[];\n prompt_template: string;\n execution_mode: ExecutionMode;\n human_approval: {\n required_for: string[];\n auto_approve?: string[];\n };\n token_budget_daily: number;\n allowed_paths: string[];\n blocked_paths: string[];\n bash_overrides?: {\n additional_blocked?: string[];\n additional_allowed?: string[];\n };\n}\n\nexport interface YamlRules {\n roles: Record<string, YamlRole>;\n}\n\nexport class YamlPolicyEngine implements PolicyEngine {\n private rules: YamlRules;\n\n constructor(rulesFilePathOrRules: string | YamlRules) {\n if (typeof rulesFilePathOrRules === 'string') {\n const raw = readFileSync(rulesFilePathOrRules, 'utf-8');\n this.rules = parseYaml(raw) as YamlRules;\n } else {\n this.rules = rulesFilePathOrRules;\n }\n }\n\n private getRole(role: string): YamlRole {\n const r = this.rules.roles[role];\n if (!r) {\n throw new Error(\n `Unknown role: ${role}. Available roles: ${Object.keys(this.rules.roles).join(', ')}`,\n );\n }\n return r;\n }\n\n evaluateTool(role: string, tool: string): PolicyDecision {\n const r = this.getRole(role);\n\n // Check blocked list first\n if (r.blocked_tools.includes(tool)) return 'deny';\n\n // Check allowed list\n if (r.allowed_tools.includes('all') || r.allowed_tools.includes(tool)) {\n return 'allow';\n }\n\n // Not in either list — deny by default\n return 'deny';\n }\n\n evaluatePath(\n role: string,\n _orgUnit: string,\n _operation: PathOperation,\n path: string,\n ): PolicyDecision {\n const r = this.getRole(role);\n\n // Check blocked paths first (takes precedence)\n for (const pattern of r.blocked_paths) {\n if (minimatch(path, pattern, { dot: true })) {\n return 'deny';\n }\n }\n\n // Check allowed paths\n for (const pattern of r.allowed_paths) {\n const resolved = pattern.replace('{{project_path}}', process.cwd());\n if (minimatch(path, resolved, { dot: true })) {\n return 'allow';\n }\n }\n\n // Not in allowed paths — deny\n return 'deny';\n }\n\n requiresApproval(role: string, tool: string): boolean {\n const r = this.getRole(role);\n\n // Auto-approve takes precedence\n if (r.human_approval.auto_approve?.includes(tool)) return false;\n\n // Check required list\n if (r.human_approval.required_for.includes('all')) return true;\n return r.human_approval.required_for.includes(tool);\n }\n\n getExecutionMode(role: string): ExecutionMode {\n return this.getRole(role).execution_mode;\n }\n\n getTemplateName(role: string): string {\n return this.getRole(role).prompt_template;\n }\n\n getBashOverrides(role: string): BashOverrides {\n const r = this.getRole(role);\n const overrides = r.bash_overrides;\n if (!overrides) return {};\n\n return {\n additionalBlocked: overrides.additional_blocked?.map((p) => new RegExp(p)),\n additionalAllowed: overrides.additional_allowed?.map((p) => new RegExp(p)),\n };\n }\n\n getTokenBudget(role: string): number {\n return this.getRole(role).token_budget_daily;\n }\n}\n","import type { PolicyEngine } from './engine.js';\nimport { YamlPolicyEngine } from './yaml-engine.js';\n\ninterface PolicyConfig {\n engine?: 'yaml' | 'oso';\n yaml?: { rules_file?: string };\n oso?: { polar_files?: string[] };\n}\n\nexport async function createPolicyEngine(config?: PolicyConfig): Promise<PolicyEngine> {\n const engine = config?.engine ?? 'yaml';\n\n if (engine === 'yaml') {\n const rulesFile = config?.yaml?.rules_file ?? './governance-rules.yaml';\n return new YamlPolicyEngine(rulesFile);\n }\n\n if (engine === 'oso') {\n const { OsoPolicyEngine } = await import('./oso-engine.js');\n const { OsoMemoryFactStore } = await import('../facts/oso-memory-store.js');\n\n const polarFiles = config?.oso?.polar_files ?? [\n './policies/base.polar',\n './policies/tools.polar',\n ];\n\n const factStore = new OsoMemoryFactStore();\n return OsoPolicyEngine.create(polarFiles, factStore);\n }\n\n throw new Error(`Unknown policy engine: ${engine}. Must be 'yaml' or 'oso'.`);\n}\n","import type { IdentityProvider, ResolvedIdentity } from './provider.js';\n\nexport class EnvIdentityProvider implements IdentityProvider {\n name = 'env';\n\n constructor(\n private userVar: string = 'PI_GOV_USER',\n private roleVar: string = 'PI_GOV_ROLE',\n private orgUnitVar: string = 'PI_GOV_ORG_UNIT',\n ) {}\n\n async resolve(): Promise<ResolvedIdentity | null> {\n const userId = process.env[this.userVar];\n const role = process.env[this.roleVar];\n const orgUnit = process.env[this.orgUnitVar];\n\n if (!userId || !role) return null;\n\n return {\n userId,\n role,\n orgUnit: orgUnit ?? 'default',\n source: 'env',\n };\n }\n}\n","import { readFileSync } from 'fs';\nimport { parse as parseYaml } from 'yaml';\nimport type { IdentityProvider, ResolvedIdentity } from './provider.js';\n\ninterface UserEntry {\n role: string;\n org_unit?: string;\n}\n\nexport class LocalIdentityProvider implements IdentityProvider {\n name = 'local';\n private users: Record<string, UserEntry>;\n\n constructor(usersFilePath: string) {\n const raw = readFileSync(usersFilePath, 'utf-8');\n this.users = parseYaml(raw) as Record<string, UserEntry>;\n }\n\n async resolve(): Promise<ResolvedIdentity | null> {\n // Try to determine the current system username\n const username = process.env.USER || process.env.USERNAME;\n if (!username) return null;\n\n const entry = this.users[username];\n if (!entry) return null;\n\n return {\n userId: username,\n role: entry.role,\n orgUnit: entry.org_unit ?? 'default',\n source: 'local',\n };\n }\n}\n","import type { IdentityProvider, ResolvedIdentity } from './provider.js';\nimport type { AuthConfigType } from '../config/schema.js';\nimport { EnvIdentityProvider } from './env-provider.js';\nimport { LocalIdentityProvider } from './local-provider.js';\n\nexport class IdentityChain {\n private providers: IdentityProvider[];\n\n constructor(providers: IdentityProvider[]) {\n this.providers = providers;\n }\n\n async resolve(): Promise<ResolvedIdentity> {\n for (const provider of this.providers) {\n const identity = await provider.resolve();\n if (identity) return identity;\n }\n\n // Fallback: default restricted identity\n return {\n userId: 'unknown',\n role: 'analyst', // most restrictive role by default\n orgUnit: 'default',\n source: 'fallback',\n };\n }\n}\n\nexport function createIdentityChain(config?: AuthConfigType): IdentityChain {\n const providers: IdentityProvider[] = [];\n\n // Always try env first (fastest, works in CI)\n providers.push(\n new EnvIdentityProvider(\n config?.env?.user_var,\n config?.env?.role_var,\n config?.env?.org_unit_var,\n ),\n );\n\n // Then try local file if configured\n if (config?.provider === 'local' && config.local?.users_file) {\n try {\n providers.push(new LocalIdentityProvider(config.local.users_file));\n } catch {\n // users file not found — skip this provider\n }\n }\n\n return new IdentityChain(providers);\n}\n","import { readFileSync } from 'node:fs';\nimport { parse as parseYaml } from 'yaml';\nimport type { FactStore, RoleBinding, Relation } from './store.js';\n\ninterface YamlUserEntry {\n role: string;\n org_unit?: string;\n config?: Record<string, unknown>;\n}\n\ntype YamlUsersFile = Record<string, YamlUserEntry>;\n\nexport class YamlFactStore implements FactStore {\n private bindings: RoleBinding[];\n\n constructor(usersFilePath: string);\n constructor(data: YamlUsersFile);\n constructor(input: string | YamlUsersFile) {\n if (typeof input === 'string') {\n const raw = readFileSync(input, 'utf-8');\n const parsed = parseYaml(raw) as YamlUsersFile;\n this.bindings = this.parseUsers(parsed);\n } else {\n this.bindings = this.parseUsers(input);\n }\n }\n\n private parseUsers(users: YamlUsersFile): RoleBinding[] {\n return Object.entries(users).map(([userId, entry]) => ({\n userId,\n role: entry.role,\n orgUnit: entry.org_unit ?? 'default',\n config: entry.config,\n }));\n }\n\n async getRoles(userId: string): Promise<RoleBinding[]> {\n return this.bindings.filter((b) => b.userId === userId);\n }\n\n async getAllRoleBindings(): Promise<RoleBinding[]> {\n return [...this.bindings];\n }\n\n async getRelations(_subject: string, _predicate: string): Promise<Relation[]> {\n // YAML store does not support relations — return empty\n return [];\n }\n}\n","export const SAFE_PATTERNS: RegExp[] = [\n // File viewing\n /^(cat|head|tail|less|more)\\s/,\n /^(file|stat|wc|md5sum|sha256sum)\\s/,\n\n // Directory listing\n /^(ls|ll|la|tree|du|df)\\b/,\n /^(pwd|cd)\\b/,\n\n // Searching\n /^(grep|rg|ag|ack|find|fd|locate)\\s/,\n /^(which|whereis|type|command)\\s/,\n\n // Text processing (read-only)\n /^(sort|uniq|cut|awk|sed)\\s.*(?!-i)/, // sed without -i (in-place)\n /^(tr|diff|comm|join|paste)\\s/,\n /^(jq|yq|xmlstarlet)\\s/,\n\n // Git (read-only operations)\n /^git\\s+(log|status|diff|show|blame|branch|tag|remote|stash list)\\b/,\n /^git\\s+(ls-files|ls-tree|rev-parse|describe)\\b/,\n\n // System info\n /^(whoami|id|groups|uname|hostname|date|uptime|env|printenv)\\b/,\n /^(echo|printf)\\s/,\n\n // Package info (not install)\n /^(npm|yarn|pnpm)\\s+(list|ls|info|show|view|outdated|audit)\\b/,\n /^pip\\s+(list|show|freeze)\\b/,\n /^(node|python|ruby|go)\\s+--version\\b/,\n /^(node|python|ruby)\\s+-e\\s/,\n\n // Networking (read-only)\n /^(ping|dig|nslookup|host|traceroute|tracepath)\\s/,\n /^curl\\s.*--head\\b/,\n /^curl\\s.*-I\\b/,\n\n // Additional file viewing / inspection\n /^(basename|dirname|realpath|readlink)\\s/,\n /^(xxd|od|hexdump)\\s/,\n /^(strings|nm|objdump)\\s/,\n\n // Additional search / navigation\n /^(xargs)\\s/,\n /^(tee)\\s/,\n\n // Additional text processing (read-only)\n /^(fmt|fold|column|expand|unexpand)\\s/,\n /^(tac|rev|nl)\\s/,\n /^(yes|seq|shuf)\\s/,\n\n // Additional system info\n /^(lsof|ps|top|htop|vmstat|iostat|free|df)\\b/,\n /^(lscpu|lsblk|lsusb|lspci)\\b/,\n /^(nproc|getconf)\\b/,\n\n // Additional git read-only\n /^git\\s+(config\\s+--get|config\\s+-l|shortlog|reflog|cherry)\\b/,\n /^git\\s+(cat-file|count-objects|fsck|verify-pack)\\b/,\n];\n\nexport const DANGEROUS_PATTERNS: RegExp[] = [\n // Destructive file operations\n /\\brm\\s+(-[a-zA-Z]*r|-[a-zA-Z]*f|--recursive|--force)\\b/,\n /\\brm\\s+-[a-zA-Z]*rf\\b/,\n /\\bshred\\b/,\n\n // Privilege escalation\n /\\bsudo\\b/,\n /\\bsu\\s+-?\\s*\\w/,\n /\\bdoas\\b/,\n\n // Permission/ownership changes\n /\\bchmod\\b/,\n /\\bchown\\b/,\n /\\bchgrp\\b/,\n\n // Disk/partition operations\n /\\bdd\\b.*\\bof=/,\n /\\bmkfs\\b/,\n /\\bfdisk\\b/,\n /\\bparted\\b/,\n /\\bmount\\b/,\n /\\bumount\\b/,\n\n // Remote code execution\n /\\bcurl\\b.*\\|\\s*(bash|sh|zsh|python|perl|ruby)\\b/,\n /\\bwget\\b.*\\|\\s*(bash|sh|zsh|python|perl|ruby)\\b/,\n /\\bcurl\\b.*>\\s*.*\\.sh\\s*&&/,\n\n // Remote access\n /\\bssh\\b/,\n /\\bscp\\b/,\n /\\brsync\\b.*:\\//,\n /\\bnc\\s+(-[a-zA-Z]*l|-[a-zA-Z]*p|--listen)\\b/,\n /\\bncat\\b/,\n /\\bsocat\\b/,\n /\\btelnet\\b/,\n\n // System modification\n /\\bsystemctl\\s+(start|stop|restart|enable|disable)\\b/,\n /\\bservice\\s+\\w+\\s+(start|stop|restart)\\b/,\n /\\biptables\\b/,\n /\\bufw\\b/,\n /\\bfirewall-cmd\\b/,\n\n // Package installation (can run arbitrary post-install scripts)\n /\\bnpm\\s+(install|i|add|ci)\\b/,\n /\\byarn\\s+(add|install)\\b/,\n /\\bpnpm\\s+(add|install|i)\\b/,\n /\\bpip\\s+install\\b/,\n /\\bapt(-get)?\\s+install\\b/,\n /\\bbrew\\s+install\\b/,\n /\\bcargo\\s+install\\b/,\n\n // Environment variable manipulation (can leak secrets)\n /\\bexport\\b.*(KEY|TOKEN|SECRET|PASSWORD|CREDENTIAL)/i,\n\n // Cron / scheduled tasks\n /\\bcrontab\\b/,\n /\\bat\\s+/,\n\n // Container escape vectors\n /\\bdocker\\s+(run|exec|build|push|pull)\\b/,\n /\\bkubectl\\s+(exec|run|apply|delete)\\b/,\n\n // Process manipulation\n /\\bkill\\b/,\n /\\bkillall\\b/,\n /\\bpkill\\b/,\n\n // History manipulation\n /\\bhistory\\s+-c\\b/,\n /\\bunset\\s+HISTFILE\\b/,\n\n // Compiler/build (can execute arbitrary code)\n /\\bmake\\s/,\n /\\bgcc\\b/,\n /\\bg\\+\\+/,\n\n // Governance config tampering — shell-based writes to governance files\n /(cat|echo|printf)\\s.*>\\s*.*governance(-rules)?\\.yaml/,\n /\\btee\\s+.*governance(-rules)?\\.yaml/,\n /sed\\s+-i.*governance(-rules)?\\.yaml/,\n /(cp|mv|rm)\\s.*governance(-rules)?\\.yaml/,\n /(cat|echo|printf)\\s.*>\\s*.*\\.pi\\/governance/,\n /\\btee\\s+.*\\.pi\\/governance/,\n /sed\\s+-i.*\\.pi\\/governance/,\n /(cp|mv|rm)\\s.*\\.pi\\/governance/,\n];\n","import { SAFE_PATTERNS, DANGEROUS_PATTERNS } from './patterns.js';\nimport type { BashOverrides } from '../policy/engine.js';\n\nexport type BashClassification = 'safe' | 'dangerous' | 'needs_review';\n\nexport class BashClassifier {\n private safePatterns: RegExp[];\n private dangerousPatterns: RegExp[];\n\n constructor(overrides?: BashOverrides) {\n this.safePatterns = [...SAFE_PATTERNS, ...(overrides?.additionalAllowed ?? [])];\n this.dangerousPatterns = [...DANGEROUS_PATTERNS, ...(overrides?.additionalBlocked ?? [])];\n }\n\n classify(command: string): BashClassification {\n const trimmed = command.trim();\n\n // Check dangerous patterns against the full unsplit command first.\n // This catches patterns like \"curl ... | bash\" that span pipe boundaries.\n for (const pattern of this.dangerousPatterns) {\n if (pattern.test(trimmed)) return 'dangerous';\n }\n\n // Multi-command detection: if the command contains pipes, semicolons,\n // or && / ||, classify each segment independently and return the\n // most restrictive classification\n const segments = this.splitCommand(trimmed);\n\n if (segments.length > 1) {\n const classifications = segments.map((s) => this.classifySingle(s));\n if (classifications.includes('dangerous')) return 'dangerous';\n if (classifications.includes('needs_review')) return 'needs_review';\n return 'safe';\n }\n\n return this.classifySingle(trimmed);\n }\n\n private classifySingle(command: string): BashClassification {\n const trimmed = command.trim();\n\n // Check dangerous first (takes precedence)\n for (const pattern of this.dangerousPatterns) {\n if (pattern.test(trimmed)) return 'dangerous';\n }\n\n // Check safe\n for (const pattern of this.safePatterns) {\n if (pattern.test(trimmed)) return 'safe';\n }\n\n // Default: needs review\n return 'needs_review';\n }\n\n private splitCommand(command: string): string[] {\n // Split on pipes, semicolons, && and || while respecting quotes\n // This is a simplified parser — not a full shell parser\n const segments: string[] = [];\n let current = '';\n let inSingleQuote = false;\n let inDoubleQuote = false;\n let escaped = false;\n\n for (let i = 0; i < command.length; i++) {\n const char = command[i]!;\n\n if (escaped) {\n current += char;\n escaped = false;\n continue;\n }\n\n if (char === '\\\\') {\n escaped = true;\n current += char;\n continue;\n }\n\n if (char === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n current += char;\n continue;\n }\n\n if (char === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n current += char;\n continue;\n }\n\n if (!inSingleQuote && !inDoubleQuote) {\n if (char === '|' && command[i + 1] !== '|') {\n segments.push(current.trim());\n current = '';\n continue;\n }\n if (char === ';') {\n segments.push(current.trim());\n current = '';\n continue;\n }\n if (char === '&' && command[i + 1] === '&') {\n segments.push(current.trim());\n current = '';\n i++; // skip second &\n continue;\n }\n if (char === '|' && command[i + 1] === '|') {\n segments.push(current.trim());\n current = '';\n i++; // skip second |\n continue;\n }\n }\n\n current += char;\n }\n\n if (current.trim()) segments.push(current.trim());\n return segments.filter((s) => s.length > 0);\n }\n}\n","export type DlpSeverity = 'low' | 'medium' | 'high' | 'critical';\nexport type DlpCategory = 'secret' | 'pii' | 'custom';\n\nexport interface DlpPatternDef {\n name: string;\n pattern: RegExp;\n severity: DlpSeverity;\n category: DlpCategory;\n}\n\nexport const SECRET_PATTERNS: DlpPatternDef[] = [\n // AWS\n {\n name: 'aws_access_key',\n pattern: /\\b(AKIA[0-9A-Z]{16})\\b/g,\n severity: 'critical',\n category: 'secret',\n },\n {\n name: 'aws_secret_key',\n pattern: /\\b([A-Za-z0-9/+=]{40})(?=\\s|$|\"|')/g,\n severity: 'critical',\n category: 'secret',\n },\n\n // GitHub\n {\n name: 'github_pat',\n pattern: /\\b(ghp_[A-Za-z0-9]{36,})\\b/g,\n severity: 'critical',\n category: 'secret',\n },\n {\n name: 'github_oauth',\n pattern: /\\b(gho_[A-Za-z0-9]{36,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n {\n name: 'github_app_token',\n pattern: /\\b(ghu_[A-Za-z0-9]{36,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // Anthropic\n {\n name: 'anthropic_api_key',\n pattern: /\\b(sk-ant-api03-[A-Za-z0-9_-]{90,})\\b/g,\n severity: 'critical',\n category: 'secret',\n },\n\n // OpenAI\n {\n name: 'openai_api_key',\n pattern: /\\b(sk-[A-Za-z0-9]{20,}T3BlbkFJ[A-Za-z0-9]{20,})\\b/g,\n severity: 'critical',\n category: 'secret',\n },\n\n // JWT\n {\n name: 'jwt_token',\n pattern: /\\b(eyJ[A-Za-z0-9_-]{10,}\\.eyJ[A-Za-z0-9_-]{10,}\\.[A-Za-z0-9_-]{10,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // Private key headers\n {\n name: 'private_key',\n pattern: /-----BEGIN\\s+(RSA |EC |DSA |OPENSSH )?PRIVATE KEY-----/g,\n severity: 'critical',\n category: 'secret',\n },\n\n // Database connection strings\n {\n name: 'database_url',\n pattern: /\\b((?:postgres|mysql|mongodb|redis):\\/\\/[^\\s'\"]{10,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // Slack\n {\n name: 'slack_token',\n pattern: /\\b(xox[bpras]-[A-Za-z0-9-]{10,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // Stripe\n {\n name: 'stripe_key',\n pattern: /\\b([rs]k_(?:live|test)_[A-Za-z0-9]{20,})\\b/g,\n severity: 'critical',\n category: 'secret',\n },\n\n // npm\n {\n name: 'npm_token',\n pattern: /\\b(npm_[A-Za-z0-9]{36,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // SendGrid\n {\n name: 'sendgrid_key',\n pattern: /\\b(SG\\.[A-Za-z0-9_-]{22,}\\.[A-Za-z0-9_-]{22,})\\b/g,\n severity: 'high',\n category: 'secret',\n },\n\n // Generic API key patterns (env-var style assignments)\n {\n name: 'generic_api_key',\n pattern:\n /\\b(?:API_KEY|API_SECRET|ACCESS_TOKEN|AUTH_TOKEN|SECRET_KEY)\\s*[=:]\\s*['\"]?([A-Za-z0-9_-]{16,})['\"]?/gi,\n severity: 'medium',\n category: 'secret',\n },\n\n // High-entropy string near keyword context\n {\n name: 'generic_secret_assignment',\n pattern: /\\b(?:password|passwd|secret|token|credential)\\s*[=:]\\s*['\"]([^'\"]{8,})['\"]?/gi,\n severity: 'medium',\n category: 'secret',\n },\n];\n\nexport const PII_PATTERNS: DlpPatternDef[] = [\n // SSN (US)\n {\n name: 'ssn',\n pattern: /\\b(\\d{3}-\\d{2}-\\d{4})\\b/g,\n severity: 'critical',\n category: 'pii',\n },\n\n // Credit card numbers\n {\n name: 'credit_card',\n pattern:\n /\\b(4\\d{3}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}|5[1-5]\\d{2}[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4}|3[47]\\d{2}[\\s-]?\\d{6}[\\s-]?\\d{5}|6(?:011|5\\d{2})[\\s-]?\\d{4}[\\s-]?\\d{4}[\\s-]?\\d{4})\\b/g,\n severity: 'critical',\n category: 'pii',\n },\n\n // Email address\n {\n name: 'email',\n pattern: /\\b([A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,})\\b/g,\n severity: 'low',\n category: 'pii',\n },\n\n // US phone number\n {\n name: 'phone_us',\n pattern: /\\b(\\+?1?[-.\\s]?\\(?\\d{3}\\)?[-.\\s]?\\d{3}[-.\\s]?\\d{4})\\b/g,\n severity: 'medium',\n category: 'pii',\n },\n\n // IPv4 address\n {\n name: 'ipv4',\n pattern:\n /\\b((?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))\\b/g,\n severity: 'low',\n category: 'pii',\n },\n];\n","import { SECRET_PATTERNS, PII_PATTERNS } from './patterns.js';\nimport type { DlpPatternDef, DlpSeverity, DlpCategory } from './patterns.js';\n\nexport type DlpAction = 'audit' | 'mask' | 'block';\n\nexport interface DlpMatch {\n patternName: string;\n category: DlpCategory;\n severity: DlpSeverity;\n start: number;\n end: number;\n matched: string;\n}\n\nexport interface DlpScanResult {\n hasMatches: boolean;\n matches: DlpMatch[];\n}\n\nexport interface DlpCustomPattern {\n name: string;\n pattern: string;\n severity: DlpSeverity;\n action?: DlpAction;\n}\n\nexport interface DlpAllowlistEntry {\n pattern: string;\n}\n\nexport interface DlpScannerConfig {\n enabled: boolean;\n mode: DlpAction;\n on_input?: DlpAction;\n on_output?: DlpAction;\n severity_threshold: DlpSeverity;\n built_in: { secrets: boolean; pii: boolean };\n custom_patterns: DlpCustomPattern[];\n allowlist: DlpAllowlistEntry[];\n pattern_overrides: Map<string, DlpAction>;\n}\n\nconst SEVERITY_ORDER: Record<DlpSeverity, number> = {\n low: 0,\n medium: 1,\n high: 2,\n critical: 3,\n};\n\ninterface CompiledPattern {\n def: DlpPatternDef;\n action?: DlpAction;\n}\n\nexport class DlpScanner {\n private patterns: CompiledPattern[];\n private allowlistRegexps: RegExp[];\n private severityThreshold: number;\n private config: DlpScannerConfig;\n\n constructor(config: DlpScannerConfig) {\n this.config = config;\n this.severityThreshold = SEVERITY_ORDER[config.severity_threshold];\n this.patterns = [];\n this.allowlistRegexps = [];\n\n // Compile built-in patterns\n if (config.built_in.secrets) {\n for (const def of SECRET_PATTERNS) {\n this.patterns.push({ def });\n }\n }\n if (config.built_in.pii) {\n for (const def of PII_PATTERNS) {\n this.patterns.push({ def });\n }\n }\n\n // Compile custom patterns\n for (const cp of config.custom_patterns) {\n const def: DlpPatternDef = {\n name: cp.name,\n pattern: new RegExp(cp.pattern, 'g'),\n severity: cp.severity,\n category: 'custom',\n };\n this.patterns.push({ def, action: cp.action });\n }\n\n // Compile pattern overrides from config\n for (const compiled of this.patterns) {\n const override = config.pattern_overrides.get(compiled.def.name);\n if (override) {\n compiled.action = override;\n }\n }\n\n // Compile allowlist\n for (const entry of config.allowlist) {\n this.allowlistRegexps.push(new RegExp(entry.pattern));\n }\n }\n\n scan(text: string): DlpScanResult {\n if (!this.config.enabled || text.length === 0) {\n return { hasMatches: false, matches: [] };\n }\n\n const matches: DlpMatch[] = [];\n\n for (const compiled of this.patterns) {\n // Skip patterns below severity threshold\n if (SEVERITY_ORDER[compiled.def.severity] < this.severityThreshold) {\n continue;\n }\n\n // Reset the regex (global flag means lastIndex needs reset)\n const regex = new RegExp(compiled.def.pattern.source, compiled.def.pattern.flags);\n\n let match: RegExpExecArray | null;\n while ((match = regex.exec(text)) !== null) {\n // Use the first capturing group if present, otherwise the full match\n const matched = match[1] ?? match[0];\n const start = match[1] ? match.index + match[0].indexOf(match[1]) : match.index;\n const end = start + matched.length;\n\n // Check allowlist\n if (this.isAllowlisted(matched)) {\n continue;\n }\n\n matches.push({\n patternName: compiled.def.name,\n category: compiled.def.category,\n severity: compiled.def.severity,\n start,\n end,\n matched,\n });\n }\n }\n\n return { hasMatches: matches.length > 0, matches };\n }\n\n getAction(direction: 'input' | 'output'): DlpAction {\n if (direction === 'input' && this.config.on_input) {\n return this.config.on_input;\n }\n if (direction === 'output' && this.config.on_output) {\n return this.config.on_output;\n }\n return this.config.mode;\n }\n\n getPatternAction(match: DlpMatch, direction: 'input' | 'output'): DlpAction {\n // Check per-pattern override first\n const compiled = this.patterns.find((p) => p.def.name === match.patternName);\n if (compiled?.action) {\n return compiled.action;\n }\n\n // Fall back to directional override or global mode\n return this.getAction(direction);\n }\n\n private isAllowlisted(value: string): boolean {\n for (const re of this.allowlistRegexps) {\n if (re.test(value)) return true;\n }\n return false;\n }\n}\n\nexport function compareSeverity(a: DlpSeverity, b: DlpSeverity): number {\n return SEVERITY_ORDER[a] - SEVERITY_ORDER[b];\n}\n","import { createHash } from 'node:crypto';\nimport type { DlpMatch } from './scanner.js';\n\nexport interface MaskingConfig {\n strategy: 'partial' | 'full' | 'hash';\n show_chars: number;\n placeholder: string;\n}\n\nconst DEFAULT_CONFIG: MaskingConfig = {\n strategy: 'partial',\n show_chars: 4,\n placeholder: '***',\n};\n\nexport class DlpMasker {\n private config: MaskingConfig;\n\n constructor(config?: Partial<MaskingConfig>) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n\n maskValue(value: string): string {\n switch (this.config.strategy) {\n case 'full':\n return this.config.placeholder;\n case 'hash': {\n const hash = createHash('sha256').update(value).digest('hex').slice(0, 8);\n return `[REDACTED:${hash}]`;\n }\n case 'partial':\n default: {\n if (value.length <= this.config.show_chars) {\n return this.config.placeholder;\n }\n return this.config.placeholder + value.slice(-this.config.show_chars);\n }\n }\n }\n\n maskText(text: string, matches: DlpMatch[]): string {\n if (matches.length === 0) return text;\n\n // Sort by position descending to avoid index shifting\n const sorted = [...matches].sort((a, b) => b.start - a.start);\n\n let result = text;\n for (const match of sorted) {\n const masked = this.maskValue(match.matched);\n result = result.slice(0, match.start) + masked + result.slice(match.end);\n }\n return result;\n }\n}\n","/**\n * Extracts package names from shell install commands.\n *\n * Supports npm, yarn, pnpm, pip, and cargo.\n */\n\nexport type Ecosystem = 'npm' | 'pypi' | 'crates.io';\n\nexport type PackageManager = 'npm' | 'yarn' | 'pnpm' | 'pip' | 'cargo';\n\nexport interface ParsedPackage {\n name: string;\n version?: string;\n ecosystem: Ecosystem;\n}\n\nexport interface ParsedInstall {\n manager: PackageManager;\n packages: ParsedPackage[];\n flags: string[];\n raw: string;\n isLockfileInstall: boolean;\n usesCustomRegistry: boolean;\n}\n\n/** Flags that take a value argument (the next token should be skipped). */\nconst FLAGS_WITH_VALUE = new Set([\n // npm/yarn/pnpm\n '--registry',\n '--save-prefix',\n '--tag',\n '--cache',\n '--prefix',\n // pip\n '-r',\n '--requirement',\n '-c',\n '--constraint',\n '-e',\n '--editable',\n '-t',\n '--target',\n '--index-url',\n '-i',\n '--extra-index-url',\n '--find-links',\n '-f',\n '--root',\n '--prefix',\n // cargo\n '--git',\n '--branch',\n '--rev',\n '--path',\n '--version',\n]);\n\nconst CUSTOM_REGISTRY_FLAGS = new Set(['--registry', '--index-url', '-i', '--extra-index-url']);\n\n/** Patterns that indicate lockfile-only installs. */\nconst LOCKFILE_PATTERNS: RegExp[] = [\n /\\bnpm\\s+ci\\b/,\n /\\bpnpm\\s+install\\s+--frozen-lockfile\\b/,\n /\\byarn\\s+install\\s+--frozen-lockfile\\b/,\n /\\bpip\\s+install\\b.*--require-hashes\\b/,\n];\n\ninterface ManagerMatch {\n manager: PackageManager;\n ecosystem: Ecosystem;\n subcommandPattern: RegExp;\n}\n\nconst MANAGER_MATCHERS: ManagerMatch[] = [\n { manager: 'npm', ecosystem: 'npm', subcommandPattern: /\\bnpm\\s+(install|i|add)\\s/ },\n { manager: 'yarn', ecosystem: 'npm', subcommandPattern: /\\byarn\\s+(add|install)\\s/ },\n { manager: 'pnpm', ecosystem: 'npm', subcommandPattern: /\\bpnpm\\s+(add|install|i)\\s/ },\n { manager: 'pip', ecosystem: 'pypi', subcommandPattern: /\\bpip\\s+install\\s/ },\n { manager: 'cargo', ecosystem: 'crates.io', subcommandPattern: /\\bcargo\\s+(add|install)\\s/ },\n];\n\nfunction splitVersionFromName(\n raw: string,\n ecosystem: Ecosystem,\n): { name: string; version?: string } {\n if (ecosystem === 'npm') {\n // @scope/pkg@version or pkg@version\n const atIdx = raw.lastIndexOf('@');\n if (atIdx > 0) {\n return { name: raw.slice(0, atIdx), version: raw.slice(atIdx + 1) };\n }\n return { name: raw };\n }\n if (ecosystem === 'pypi') {\n // pkg==version, pkg>=version, pkg~=version, pkg!=version\n const match = raw.match(/^([a-zA-Z0-9_.-]+)([=<>!~]+.+)?$/);\n if (match) {\n return { name: match[1]!, version: match[2] };\n }\n return { name: raw };\n }\n if (ecosystem === 'crates.io') {\n // pkg@version\n const atIdx = raw.indexOf('@');\n if (atIdx > 0) {\n return { name: raw.slice(0, atIdx), version: raw.slice(atIdx + 1) };\n }\n return { name: raw };\n }\n return { name: raw };\n}\n\n/**\n * Attempt to parse an install command and extract package names.\n * Returns undefined if the command is not a recognized install command.\n */\nexport function parseInstallCommand(command: string): ParsedInstall | undefined {\n const trimmed = command.trim();\n\n // Check lockfile patterns first\n const isLockfileInstall = LOCKFILE_PATTERNS.some((p) => p.test(trimmed));\n\n // npm ci is a lockfile install with no packages to parse\n if (/\\bnpm\\s+ci\\b/.test(trimmed)) {\n return {\n manager: 'npm',\n packages: [],\n flags: [],\n raw: trimmed,\n isLockfileInstall: true,\n usesCustomRegistry: false,\n };\n }\n\n for (const matcher of MANAGER_MATCHERS) {\n if (!matcher.subcommandPattern.test(trimmed)) continue;\n\n // Extract everything after the subcommand\n const subMatch = trimmed.match(matcher.subcommandPattern);\n if (!subMatch) continue;\n\n const afterSubcommand = trimmed.slice(subMatch.index! + subMatch[0].length);\n const tokens = tokenize(afterSubcommand);\n\n const packages: ParsedPackage[] = [];\n const flags: string[] = [];\n let usesCustomRegistry = false;\n\n for (let i = 0; i < tokens.length; i++) {\n const token = tokens[i]!;\n\n if (token.startsWith('-')) {\n flags.push(token);\n // Extract flag name (before '=' if present)\n const flagName = token.includes('=') ? token.slice(0, token.indexOf('=')) : token;\n if (CUSTOM_REGISTRY_FLAGS.has(flagName)) {\n usesCustomRegistry = true;\n }\n // If this flag takes a value, skip the next token\n if (FLAGS_WITH_VALUE.has(flagName) || token.includes('=')) {\n if (!token.includes('=')) i++;\n }\n continue;\n }\n\n // pip: skip file-based args\n if (matcher.manager === 'pip' && (token.endsWith('.txt') || token.endsWith('.cfg'))) {\n continue;\n }\n\n // pip: skip paths and URLs\n if (\n matcher.manager === 'pip' &&\n (token.startsWith('/') ||\n token.startsWith('./') ||\n token.startsWith('http://') ||\n token.startsWith('https://') ||\n token.startsWith('git+'))\n ) {\n continue;\n }\n\n const { name, version } = splitVersionFromName(token, matcher.ecosystem);\n if (name) {\n packages.push({ name, version, ecosystem: matcher.ecosystem });\n }\n }\n\n return {\n manager: matcher.manager,\n packages,\n flags,\n raw: trimmed,\n isLockfileInstall,\n usesCustomRegistry,\n };\n }\n\n return undefined;\n}\n\n/** Simple tokenizer that respects quotes. */\nfunction tokenize(input: string): string[] {\n const tokens: string[] = [];\n let current = '';\n let inSingleQuote = false;\n let inDoubleQuote = false;\n\n for (let i = 0; i < input.length; i++) {\n const ch = input[i]!;\n\n if (ch === \"'\" && !inDoubleQuote) {\n inSingleQuote = !inSingleQuote;\n continue;\n }\n if (ch === '\"' && !inSingleQuote) {\n inDoubleQuote = !inDoubleQuote;\n continue;\n }\n\n if (ch === ' ' && !inSingleQuote && !inDoubleQuote) {\n if (current) tokens.push(current);\n current = '';\n } else {\n current += ch;\n }\n }\n if (current) tokens.push(current);\n return tokens;\n}\n","/**\n * Registry clients for npm and PyPI.\n *\n * Uses built-in fetch() (Node 22+). Zero dependencies.\n * All endpoints are free and require no authentication.\n */\n\nimport type { Ecosystem } from './parser.js';\n\nexport interface RegistryMetadata {\n name: string;\n ecosystem: Ecosystem;\n exists: boolean;\n createdAt?: Date;\n modifiedAt?: Date;\n latestVersion?: string;\n weeklyDownloads?: number;\n maintainerCount?: number;\n hasRepository: boolean;\n hasReadme: boolean;\n hasInstallScripts: boolean;\n description?: string;\n license?: string;\n}\n\nconst REQUEST_TIMEOUT_MS = 5_000;\n\nfunction withTimeout(ms: number): AbortSignal {\n return AbortSignal.timeout(ms);\n}\n\n// --- npm ---\n\ninterface NpmPackument {\n name: string;\n description?: string;\n 'dist-tags'?: Record<string, string>;\n time?: Record<string, string>;\n maintainers?: Array<{ name: string; email?: string }>;\n readme?: string;\n license?: string;\n repository?: unknown;\n versions?: Record<string, NpmVersion>;\n}\n\ninterface NpmVersion {\n scripts?: Record<string, string>;\n}\n\ninterface NpmDownloadResponse {\n downloads: number;\n}\n\nasync function fetchNpmMetadata(name: string): Promise<RegistryMetadata> {\n const encodedName = name.startsWith('@')\n ? `@${encodeURIComponent(name.slice(1))}`\n : encodeURIComponent(name);\n const url = `https://registry.npmjs.org/${encodedName}`;\n\n let res: Response;\n try {\n res = await fetch(url, { signal: withTimeout(REQUEST_TIMEOUT_MS) });\n } catch {\n return notFound(name, 'npm');\n }\n\n if (!res.ok) return notFound(name, 'npm');\n\n const data = (await res.json()) as NpmPackument;\n const latest = data['dist-tags']?.['latest'];\n const latestVersion = latest ? data.versions?.[latest] : undefined;\n const scripts = latestVersion?.scripts ?? {};\n const hasInstallScripts = !!(\n scripts['preinstall'] ||\n scripts['install'] ||\n scripts['postinstall']\n );\n\n // Downloads — separate request\n let weeklyDownloads: number | undefined;\n try {\n const dlUrl = `https://api.npmjs.org/downloads/point/last-week/${encodedName}`;\n const dlRes = await fetch(dlUrl, { signal: withTimeout(REQUEST_TIMEOUT_MS) });\n if (dlRes.ok) {\n const dlData = (await dlRes.json()) as NpmDownloadResponse;\n weeklyDownloads = dlData.downloads;\n }\n } catch {\n // Non-critical — leave undefined\n }\n\n return {\n name,\n ecosystem: 'npm',\n exists: true,\n createdAt: data.time?.['created'] ? new Date(data.time['created']) : undefined,\n modifiedAt: data.time?.['modified'] ? new Date(data.time['modified']) : undefined,\n latestVersion: latest,\n weeklyDownloads,\n maintainerCount: data.maintainers?.length,\n hasRepository: !!data.repository,\n hasReadme: !!(data.readme && data.readme.length > 10),\n hasInstallScripts,\n description: data.description,\n license: data.license,\n };\n}\n\n// --- PyPI ---\n\ninterface PyPIResponse {\n info: {\n name: string;\n version: string;\n summary?: string;\n license?: string;\n home_page?: string;\n project_urls?: Record<string, string>;\n author?: string;\n maintainer?: string;\n description?: string;\n };\n releases: Record<string, Array<{ upload_time: string }>>;\n urls: Array<{ upload_time: string }>;\n}\n\ninterface PyPIStatsResponse {\n data: {\n last_week: number;\n };\n}\n\nasync function fetchPyPIMetadata(name: string): Promise<RegistryMetadata> {\n const url = `https://pypi.org/pypi/${encodeURIComponent(name)}/json`;\n\n let res: Response;\n try {\n res = await fetch(url, { signal: withTimeout(REQUEST_TIMEOUT_MS) });\n } catch {\n return notFound(name, 'pypi');\n }\n\n if (!res.ok) return notFound(name, 'pypi');\n\n const data = (await res.json()) as PyPIResponse;\n\n // Find the earliest upload time across all releases\n let earliest: Date | undefined;\n for (const files of Object.values(data.releases)) {\n for (const file of files) {\n const d = new Date(file.upload_time);\n if (!earliest || d < earliest) earliest = d;\n }\n }\n\n // Determine if there's a project URL / repository\n const projectUrls = data.info.project_urls ?? {};\n const hasRepo = !!(\n data.info.home_page ||\n projectUrls['Source'] ||\n projectUrls['Repository'] ||\n projectUrls['GitHub'] ||\n projectUrls['Homepage']\n );\n\n // Maintainer count — PyPI doesn't expose this directly, so we approximate\n const hasMaintainer = !!(data.info.maintainer || data.info.author);\n\n // Downloads — pypistats.org\n let weeklyDownloads: number | undefined;\n try {\n const statsUrl = `https://pypistats.org/api/packages/${encodeURIComponent(name)}/recent`;\n const statsRes = await fetch(statsUrl, {\n signal: withTimeout(REQUEST_TIMEOUT_MS),\n headers: { Accept: 'application/json' },\n });\n if (statsRes.ok) {\n const statsData = (await statsRes.json()) as PyPIStatsResponse;\n weeklyDownloads = statsData.data?.last_week;\n }\n } catch {\n // Non-critical\n }\n\n return {\n name,\n ecosystem: 'pypi',\n exists: true,\n createdAt: earliest,\n modifiedAt:\n data.urls.length > 0 ? new Date(data.urls[data.urls.length - 1]!.upload_time) : undefined,\n latestVersion: data.info.version,\n weeklyDownloads,\n maintainerCount: hasMaintainer ? 1 : 0,\n hasRepository: hasRepo,\n hasReadme: !!(data.info.description && data.info.description.length > 10),\n hasInstallScripts: false, // PyPI doesn't have post-install scripts in the same way\n description: data.info.summary,\n license: data.info.license,\n };\n}\n\n// --- Helpers ---\n\nfunction notFound(name: string, ecosystem: Ecosystem): RegistryMetadata {\n return {\n name,\n ecosystem,\n exists: false,\n hasRepository: false,\n hasReadme: false,\n hasInstallScripts: false,\n };\n}\n\n// --- Cache ---\n\nconst cache = new Map<string, RegistryMetadata>();\nconst MAX_CACHE_SIZE = 200;\n\nfunction cacheKey(name: string, ecosystem: Ecosystem): string {\n return `${ecosystem}:${name}`;\n}\n\n// --- Public API ---\n\nexport async function fetchRegistryMetadata(\n name: string,\n ecosystem: Ecosystem,\n): Promise<RegistryMetadata> {\n const key = cacheKey(name, ecosystem);\n const cached = cache.get(key);\n if (cached) return cached;\n\n let result: RegistryMetadata;\n switch (ecosystem) {\n case 'npm':\n result = await fetchNpmMetadata(name);\n break;\n case 'pypi':\n result = await fetchPyPIMetadata(name);\n break;\n default:\n result = notFound(name, ecosystem);\n }\n\n // LRU eviction\n if (cache.size >= MAX_CACHE_SIZE) {\n const firstKey = cache.keys().next().value;\n if (firstKey !== undefined) cache.delete(firstKey);\n }\n cache.set(key, result);\n\n return result;\n}\n\n/** Clear the cache (useful for testing). */\nexport function clearRegistryCache(): void {\n cache.clear();\n}\n","/**\n * OSV.dev vulnerability database integration.\n *\n * Free, no auth, supports all major ecosystems.\n * https://osv.dev\n */\n\nimport type { Ecosystem } from './parser.js';\n\nexport interface VulnEntry {\n id: string;\n summary: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n fixedIn?: string;\n aliases: string[];\n}\n\nexport interface VulnerabilityResult {\n package: string;\n ecosystem: Ecosystem;\n vulnerabilities: VulnEntry[];\n error?: string;\n}\n\nconst REQUEST_TIMEOUT_MS = 5_000;\n\n// Map ecosystem to OSV ecosystem identifier\nfunction osvEcosystem(ecosystem: Ecosystem): string {\n switch (ecosystem) {\n case 'npm':\n return 'npm';\n case 'pypi':\n return 'PyPI';\n case 'crates.io':\n return 'crates.io';\n default:\n return ecosystem;\n }\n}\n\ninterface OsvQueryRequest {\n package: { name: string; ecosystem: string };\n version?: string;\n}\n\ninterface OsvVuln {\n id: string;\n summary?: string;\n details?: string;\n aliases?: string[];\n severity?: Array<{ type: string; score: string }>;\n affected?: Array<{\n ranges?: Array<{\n events?: Array<{ fixed?: string }>;\n }>;\n }>;\n}\n\ninterface OsvQueryResponse {\n vulns?: OsvVuln[];\n}\n\ninterface OsvBatchResponse {\n results: Array<{ vulns?: OsvVuln[] }>;\n}\n\nfunction parseSeverity(vuln: OsvVuln): 'low' | 'medium' | 'high' | 'critical' {\n const sevEntry = vuln.severity?.find((s) => s.type === 'CVSS_V3');\n if (!sevEntry) return 'medium'; // default if no CVSS\n\n // Parse CVSS v3 score from vector string: CVSS:3.1/AV:N/AC:L/...\n // or it could be a numeric score\n const scoreStr = sevEntry.score;\n const numericMatch = scoreStr.match(/(\\d+\\.\\d+)/);\n if (numericMatch) {\n const score = parseFloat(numericMatch[1]!);\n if (score >= 9.0) return 'critical';\n if (score >= 7.0) return 'high';\n if (score >= 4.0) return 'medium';\n return 'low';\n }\n\n return 'medium';\n}\n\nfunction extractFixedVersion(vuln: OsvVuln): string | undefined {\n for (const affected of vuln.affected ?? []) {\n for (const range of affected.ranges ?? []) {\n for (const event of range.events ?? []) {\n if (event.fixed) return event.fixed;\n }\n }\n }\n return undefined;\n}\n\nfunction mapVuln(vuln: OsvVuln): VulnEntry {\n return {\n id: vuln.id,\n summary: vuln.summary ?? vuln.details?.slice(0, 200) ?? 'No description',\n severity: parseSeverity(vuln),\n fixedIn: extractFixedVersion(vuln),\n aliases: vuln.aliases ?? [],\n };\n}\n\n/**\n * Query OSV.dev for vulnerabilities affecting a single package.\n */\nexport async function queryVulnerabilities(\n name: string,\n ecosystem: Ecosystem,\n version?: string,\n): Promise<VulnerabilityResult> {\n const body: OsvQueryRequest = {\n package: { name, ecosystem: osvEcosystem(ecosystem) },\n };\n if (version) body.version = version;\n\n try {\n const res = await fetch('https://api.osv.dev/v1/query', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(body),\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n\n if (!res.ok) {\n return { package: name, ecosystem, vulnerabilities: [], error: `OSV HTTP ${res.status}` };\n }\n\n const data = (await res.json()) as OsvQueryResponse;\n return {\n package: name,\n ecosystem,\n vulnerabilities: (data.vulns ?? []).map(mapVuln),\n };\n } catch (err) {\n return {\n package: name,\n ecosystem,\n vulnerabilities: [],\n error: err instanceof Error ? err.message : 'Unknown error',\n };\n }\n}\n\n/**\n * Batch query OSV.dev for multiple packages at once.\n */\nexport async function queryVulnerabilitiesBatch(\n packages: Array<{ name: string; ecosystem: Ecosystem; version?: string }>,\n): Promise<VulnerabilityResult[]> {\n if (packages.length === 0) return [];\n\n // Single package — use the simpler endpoint\n if (packages.length === 1) {\n const pkg = packages[0]!;\n return [await queryVulnerabilities(pkg.name, pkg.ecosystem, pkg.version)];\n }\n\n const queries = packages.map((pkg) => {\n const q: OsvQueryRequest = {\n package: { name: pkg.name, ecosystem: osvEcosystem(pkg.ecosystem) },\n };\n if (pkg.version) q.version = pkg.version;\n return q;\n });\n\n try {\n const res = await fetch('https://api.osv.dev/v1/querybatch', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ queries }),\n signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS),\n });\n\n if (!res.ok) {\n return packages.map((pkg) => ({\n package: pkg.name,\n ecosystem: pkg.ecosystem,\n vulnerabilities: [],\n error: `OSV HTTP ${res.status}`,\n }));\n }\n\n const data = (await res.json()) as OsvBatchResponse;\n return data.results.map((result, i) => ({\n package: packages[i]!.name,\n ecosystem: packages[i]!.ecosystem,\n vulnerabilities: (result.vulns ?? []).map(mapVuln),\n }));\n } catch (err) {\n const errMsg = err instanceof Error ? err.message : 'Unknown error';\n return packages.map((pkg) => ({\n package: pkg.name,\n ecosystem: pkg.ecosystem,\n vulnerabilities: [],\n error: errMsg,\n }));\n }\n}\n","/**\n * Levenshtein distance and typosquat detection.\n *\n * Single-row Wagner-Fischer: O(n*m) time, O(min(n,m)) space.\n * Zero dependencies.\n */\n\nexport function levenshteinDistance(a: string, b: string): number {\n if (a === b) return 0;\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n\n // Ensure a is the shorter string for space efficiency\n if (a.length > b.length) [a, b] = [b, a];\n\n const m = a.length;\n const n = b.length;\n const row = new Array<number>(m + 1);\n for (let j = 0; j <= m; j++) row[j] = j;\n\n for (let i = 1; i <= n; i++) {\n let corner = row[0]!;\n row[0] = i;\n for (let j = 1; j <= m; j++) {\n const temp = row[j]!;\n if (b[i - 1] === a[j - 1]) {\n row[j] = corner;\n } else {\n row[j] = 1 + Math.min(corner, temp, row[j - 1]!);\n }\n corner = temp;\n }\n }\n return row[m]!;\n}\n\nexport function normalizedSimilarity(a: string, b: string): number {\n const maxLen = Math.max(a.length, b.length);\n if (maxLen === 0) return 1.0;\n return 1 - levenshteinDistance(a, b) / maxLen;\n}\n\n/**\n * Normalize a package name for comparison:\n * - Strip npm scope prefix (@scope/)\n * - Remove hyphens, underscores, dots\n * - Lowercase\n */\nexport function normalizeName(name: string): string {\n // Strip scope\n const stripped = name.replace(/^@[^/]+\\//, '');\n // Remove separators and lowercase\n return stripped.replace(/[-_.]/g, '').toLowerCase();\n}\n\nexport interface TyposquatMatch {\n target: string;\n distance: number;\n similarity: number;\n}\n\n/**\n * Check a package name against a corpus of known-good names.\n * Returns the closest match if it looks like a typosquat.\n */\nexport function detectTyposquat(name: string, corpus: string[]): TyposquatMatch | undefined {\n const normalized = normalizeName(name);\n\n let bestMatch: TyposquatMatch | undefined;\n let bestDistance = Infinity;\n\n for (const target of corpus) {\n const normalizedTarget = normalizeName(target);\n\n // Skip exact matches (the package is the popular package itself)\n if (normalizedTarget === normalized) return undefined;\n\n const distance = levenshteinDistance(normalized, normalizedTarget);\n const similarity = normalizedSimilarity(normalized, normalizedTarget);\n\n // Flag thresholds:\n // - edit distance 1: always flag\n // - edit distance 2 + name length >= 5: flag\n // - normalized similarity >= 0.85: flag\n const shouldFlag =\n distance === 1 || (distance === 2 && normalized.length >= 5) || similarity >= 0.85;\n\n if (shouldFlag && distance < bestDistance) {\n bestDistance = distance;\n bestMatch = { target, distance, similarity };\n }\n }\n\n return bestMatch;\n}\n","/**\n * Default allowlists and blocklists for dependency validation.\n *\n * The allowlist doubles as the \"popular packages\" corpus for typosquat detection.\n * Users extend these via config; user entries take precedence.\n */\n\nexport const DEFAULT_NPM_ALLOWLIST: string[] = [\n // Frameworks\n 'express',\n 'react',\n 'react-dom',\n 'next',\n 'vue',\n 'angular',\n 'svelte',\n 'fastify',\n 'koa',\n 'hapi',\n 'nest',\n 'nuxt',\n // Build tools\n 'typescript',\n 'webpack',\n 'vite',\n 'esbuild',\n 'tsup',\n 'rollup',\n 'parcel',\n 'babel',\n 'swc',\n // Quality tools\n 'prettier',\n 'eslint',\n 'vitest',\n 'jest',\n 'mocha',\n 'chai',\n 'sinon',\n 'husky',\n 'lint-staged',\n // Utilities\n 'lodash',\n 'axios',\n 'chalk',\n 'commander',\n 'debug',\n 'async',\n 'uuid',\n 'semver',\n 'glob',\n 'fs-extra',\n 'mkdirp',\n 'rimraf',\n 'minimist',\n 'yargs',\n 'dotenv',\n 'nanoid',\n 'date-fns',\n 'dayjs',\n 'moment',\n 'rxjs',\n 'immer',\n // Validation\n 'zod',\n 'joi',\n 'ajv',\n 'yup',\n // HTTP / API\n 'cors',\n 'body-parser',\n 'cookie-parser',\n 'morgan',\n 'helmet',\n 'jsonwebtoken',\n 'bcrypt',\n 'passport',\n // Database\n 'mongoose',\n 'sequelize',\n 'prisma',\n 'typeorm',\n 'knex',\n 'pg',\n 'mysql2',\n 'redis',\n 'ioredis',\n 'better-sqlite3',\n // Realtime\n 'socket.io',\n 'ws',\n // State management\n 'zustand',\n 'redux',\n 'mobx',\n // CSS\n 'tailwindcss',\n 'postcss',\n 'autoprefixer',\n 'sass',\n 'styled-components',\n 'clsx',\n 'classnames',\n // Media\n 'sharp',\n 'puppeteer',\n 'cheerio',\n 'marked',\n 'highlight.js',\n // Types\n 'tslib',\n];\n\nexport const DEFAULT_PYPI_ALLOWLIST: string[] = [\n // Web\n 'requests',\n 'flask',\n 'django',\n 'fastapi',\n 'aiohttp',\n 'httpx',\n 'uvicorn',\n 'gunicorn',\n 'starlette',\n // Data\n 'numpy',\n 'pandas',\n 'scipy',\n 'matplotlib',\n 'scikit-learn',\n 'pillow',\n // Infrastructure\n 'boto3',\n 'botocore',\n 'urllib3',\n 'certifi',\n 'charset-normalizer',\n 'idna',\n // Core\n 'setuptools',\n 'pip',\n 'wheel',\n 'packaging',\n 'typing-extensions',\n 'six',\n 'python-dateutil',\n 'pyyaml',\n 'tomli',\n 'filelock',\n 'attrs',\n 'click',\n 'importlib-metadata',\n 'zipp',\n 'platformdirs',\n // Crypto\n 'cryptography',\n 'cffi',\n 'pycparser',\n 'jmespath',\n 'pyasn1',\n // DB\n 'sqlalchemy',\n 'psycopg2',\n 'redis',\n 'celery',\n // Template / Markup\n 'jinja2',\n 'markupsafe',\n 'beautifulsoup4',\n 'lxml',\n 'scrapy',\n // Validation\n 'pydantic',\n // Testing\n 'pytest',\n 'tox',\n 'coverage',\n 'mock',\n];\n\nexport const DEFAULT_BLOCKLIST_EXACT: string[] = [\n // npm typosquats (historically malicious)\n 'crossenv',\n 'cross-env.js',\n 'd3.js',\n 'fabric-js',\n 'ffmpegs',\n 'gruntcli',\n 'http-proxy.js',\n 'jquery.js',\n 'mongose',\n 'mssql-node',\n 'nodecaffe',\n 'nodefabric',\n 'nodemailer-js',\n 'noderequest',\n 'nodesass',\n 'opencv.js',\n 'openssl.js',\n 'shadowsock',\n 'sqliter',\n 'sqlserver',\n // npm compromised\n 'flatmap-stream',\n // PyPI typosquats\n 'colourama',\n 'python3-dateutil',\n 'requesocks',\n 'requesst',\n 'beautifulsup',\n 'numppy',\n 'numpys',\n 'djanga',\n 'urlib3',\n];\n\nexport const DEFAULT_BLOCKLIST_PATTERNS: RegExp[] = [\n /-free-download$/,\n /-crack$/,\n /-keygen$/,\n /-license-key$/,\n /-hack$/,\n /-serial$/,\n /-activation$/,\n /-premium-free$/,\n /-generator-free$/,\n];\n\nexport interface AllowBlockConfig {\n allowlist: string[];\n blocklist: string[];\n blocklistPatterns: RegExp[];\n}\n\n/**\n * Build merged allow/block lists from defaults + user config.\n */\nexport function buildAllowBlockLists(\n ecosystem: 'npm' | 'pypi' | 'crates.io',\n userAllowlist: string[],\n userBlocklist: string[],\n userBlocklistPatterns: string[],\n): AllowBlockConfig {\n const base =\n ecosystem === 'npm'\n ? DEFAULT_NPM_ALLOWLIST\n : ecosystem === 'pypi'\n ? DEFAULT_PYPI_ALLOWLIST\n : [];\n\n return {\n allowlist: [...base, ...userAllowlist],\n blocklist: [...DEFAULT_BLOCKLIST_EXACT, ...userBlocklist],\n blocklistPatterns: [\n ...DEFAULT_BLOCKLIST_PATTERNS,\n ...userBlocklistPatterns.map((p) => new RegExp(p)),\n ],\n };\n}\n\n/**\n * Check if a package is on the allowlist.\n */\nexport function isAllowlisted(name: string, allowlist: string[]): boolean {\n return allowlist.includes(name);\n}\n\n/**\n * Check if a package is on the blocklist (exact match or pattern).\n */\nexport function isBlocklisted(\n name: string,\n blocklist: string[],\n blocklistPatterns: RegExp[],\n): boolean {\n if (blocklist.includes(name)) return true;\n return blocklistPatterns.some((p) => p.test(name));\n}\n","/**\n * Risk scoring engine for dependency validation.\n *\n * Computes a risk report for a single package based on registry metadata,\n * vulnerability data, and typosquat analysis.\n */\n\nimport type { RegistryMetadata } from './registry.js';\nimport type { VulnEntry } from './vulnerabilities.js';\nimport type { TyposquatMatch } from './levenshtein.js';\n\nexport type RiskSeverity = 'info' | 'low' | 'medium' | 'high' | 'critical';\nexport type RiskRecommendation = 'allow' | 'escalate' | 'block';\n\nexport interface RiskSignal {\n name: string;\n severity: RiskSeverity;\n detail: string;\n}\n\nexport interface RiskReport {\n package: string;\n ecosystem: string;\n overallRisk: RiskSeverity;\n signals: RiskSignal[];\n vulnerabilities: VulnEntry[];\n recommendation: RiskRecommendation;\n metadata: RegistryMetadata;\n}\n\nexport interface RiskThresholds {\n minAgeDays: number;\n minWeeklyDownloads: number;\n}\n\nconst DEFAULT_THRESHOLDS: RiskThresholds = {\n minAgeDays: 30,\n minWeeklyDownloads: 100,\n};\n\nconst SEVERITY_ORDER: Record<RiskSeverity, number> = {\n info: 0,\n low: 1,\n medium: 2,\n high: 3,\n critical: 4,\n};\n\nfunction maxSeverity(a: RiskSeverity, b: RiskSeverity): RiskSeverity {\n return SEVERITY_ORDER[a] >= SEVERITY_ORDER[b] ? a : b;\n}\n\nexport function computeRiskReport(\n metadata: RegistryMetadata,\n vulns: VulnEntry[],\n typosquatMatch: TyposquatMatch | undefined,\n isBlocklisted: boolean,\n isAllowlisted: boolean,\n thresholds: RiskThresholds = DEFAULT_THRESHOLDS,\n): RiskReport {\n const signals: RiskSignal[] = [];\n let overallRisk: RiskSeverity = 'info';\n\n // --- Critical signals ---\n\n if (!metadata.exists) {\n signals.push({\n name: 'package_not_found',\n severity: 'critical',\n detail: `Package \"${metadata.name}\" does not exist on ${metadata.ecosystem}`,\n });\n overallRisk = 'critical';\n }\n\n if (isBlocklisted) {\n signals.push({\n name: 'on_blocklist',\n severity: 'critical',\n detail: `Package \"${metadata.name}\" is on the blocklist`,\n });\n overallRisk = 'critical';\n }\n\n // Vulnerabilities\n for (const vuln of vulns) {\n signals.push({\n name: 'known_vulnerability',\n severity: vuln.severity,\n detail: `${vuln.id}: ${vuln.summary}${vuln.fixedIn ? ` (fixed in ${vuln.fixedIn})` : ''}`,\n });\n overallRisk = maxSeverity(overallRisk, vuln.severity);\n }\n\n // If allowlisted, skip reputation checks but still report vulns/blocklist\n if (isAllowlisted && signals.length === 0) {\n return {\n package: metadata.name,\n ecosystem: metadata.ecosystem,\n overallRisk: 'info',\n signals: [],\n vulnerabilities: vulns,\n recommendation: 'allow',\n metadata,\n };\n }\n\n // --- Reputation signals (skipped for allowlisted packages) ---\n if (!isAllowlisted && metadata.exists) {\n // Package age\n if (metadata.createdAt) {\n const ageDays = (Date.now() - metadata.createdAt.getTime()) / (1000 * 60 * 60 * 24);\n if (ageDays < 7) {\n signals.push({\n name: 'very_new_package',\n severity: 'high',\n detail: `Created ${Math.floor(ageDays)} days ago`,\n });\n overallRisk = maxSeverity(overallRisk, 'high');\n } else if (ageDays < thresholds.minAgeDays) {\n signals.push({\n name: 'new_package',\n severity: 'medium',\n detail: `Created ${Math.floor(ageDays)} days ago (threshold: ${thresholds.minAgeDays})`,\n });\n overallRisk = maxSeverity(overallRisk, 'medium');\n }\n }\n\n // Download count\n if (metadata.weeklyDownloads !== undefined) {\n if (metadata.weeklyDownloads < thresholds.minWeeklyDownloads) {\n const sev = metadata.weeklyDownloads < 10 ? 'high' : 'medium';\n signals.push({\n name: 'low_downloads',\n severity: sev,\n detail: `${metadata.weeklyDownloads} weekly downloads (threshold: ${thresholds.minWeeklyDownloads})`,\n });\n overallRisk = maxSeverity(overallRisk, sev);\n }\n }\n\n // Typosquatting\n if (typosquatMatch) {\n signals.push({\n name: 'typosquat_suspect',\n severity: 'high',\n detail: `Similar to \"${typosquatMatch.target}\" (edit distance: ${typosquatMatch.distance})`,\n });\n overallRisk = maxSeverity(overallRisk, 'high');\n }\n\n // Install scripts\n if (metadata.hasInstallScripts) {\n signals.push({\n name: 'has_install_scripts',\n severity: 'medium',\n detail: 'Package has preinstall/install/postinstall scripts',\n });\n overallRisk = maxSeverity(overallRisk, 'medium');\n }\n\n // No repository\n if (!metadata.hasRepository) {\n signals.push({\n name: 'no_repository',\n severity: 'low',\n detail: 'No source repository URL in metadata',\n });\n overallRisk = maxSeverity(overallRisk, 'low');\n }\n\n // No README\n if (!metadata.hasReadme) {\n signals.push({\n name: 'no_readme',\n severity: 'low',\n detail: 'No README content',\n });\n overallRisk = maxSeverity(overallRisk, 'low');\n }\n\n // No license\n if (!metadata.license) {\n signals.push({\n name: 'no_license',\n severity: 'low',\n detail: 'No license declared',\n });\n overallRisk = maxSeverity(overallRisk, 'low');\n }\n\n // Single maintainer\n if (metadata.maintainerCount !== undefined && metadata.maintainerCount <= 1) {\n signals.push({\n name: 'single_maintainer',\n severity: 'info',\n detail: `${metadata.maintainerCount} maintainer(s)`,\n });\n }\n }\n\n // --- Compute recommendation ---\n let recommendation: RiskRecommendation;\n if (SEVERITY_ORDER[overallRisk] >= SEVERITY_ORDER['critical']) {\n recommendation = 'block';\n } else if (SEVERITY_ORDER[overallRisk] >= SEVERITY_ORDER['medium']) {\n recommendation = 'escalate';\n } else {\n recommendation = 'allow';\n }\n\n return {\n package: metadata.name,\n ecosystem: metadata.ecosystem,\n overallRisk,\n signals,\n vulnerabilities: vulns,\n recommendation,\n metadata,\n };\n}\n","/**\n * Dependency Guardian — orchestrator module.\n *\n * Parses install commands, runs all checks, and returns a risk report.\n */\n\nimport { parseInstallCommand } from './parser.js';\nimport { fetchRegistryMetadata } from './registry.js';\nimport { queryVulnerabilitiesBatch } from './vulnerabilities.js';\nimport { detectTyposquat } from './levenshtein.js';\nimport { buildAllowBlockLists, isAllowlisted, isBlocklisted } from './allowlist.js';\nimport { computeRiskReport, type RiskReport, type RiskRecommendation } from './risk.js';\n\nexport interface DependencyGuardianConfig {\n enabled: boolean;\n checks: {\n existence: boolean;\n reputation: boolean;\n typosquatting: boolean;\n install_scripts: boolean;\n vulnerabilities: boolean;\n };\n risk_thresholds: {\n min_age_days: number;\n min_weekly_downloads: number;\n };\n on_risk: 'escalate' | 'block' | 'audit';\n allowlist: string[];\n blocklist: string[];\n blocklist_patterns: string[];\n custom_registry_bypass: boolean;\n}\n\nexport interface GuardianResult {\n command: string;\n packages: RiskReport[];\n overallRecommendation: RiskRecommendation;\n summary: string;\n auditMetadata: Record<string, unknown>;\n skipped: boolean;\n skipReason?: string;\n}\n\nconst DEFAULT_CONFIG: DependencyGuardianConfig = {\n enabled: true,\n checks: {\n existence: true,\n reputation: true,\n typosquatting: true,\n install_scripts: true,\n vulnerabilities: true,\n },\n risk_thresholds: {\n min_age_days: 30,\n min_weekly_downloads: 100,\n },\n on_risk: 'escalate',\n allowlist: [],\n blocklist: [],\n blocklist_patterns: [],\n custom_registry_bypass: true,\n};\n\n/**\n * Evaluate an install command and return a risk report for all packages.\n */\nexport async function evaluateInstall(\n command: string,\n config: DependencyGuardianConfig = DEFAULT_CONFIG,\n): Promise<GuardianResult> {\n if (!config.enabled) {\n return skippedResult(command, 'Dependency guardian is disabled');\n }\n\n const parsed = parseInstallCommand(command);\n if (!parsed) {\n return skippedResult(command, 'Not a recognized install command');\n }\n\n // Lock-file installs are low risk — skip\n if (parsed.isLockfileInstall) {\n return skippedResult(command, 'Lock-file install (pinned dependencies)');\n }\n\n // Custom registry bypass\n if (config.custom_registry_bypass && parsed.usesCustomRegistry) {\n return skippedResult(command, 'Custom registry detected (bypass enabled)');\n }\n\n // No packages extracted (e.g., `npm install` with no args reinstalls from package.json)\n if (parsed.packages.length === 0) {\n return skippedResult(command, 'No specific packages to validate');\n }\n\n // Build merged allow/block lists per ecosystem\n const ecosystems = [...new Set(parsed.packages.map((p) => p.ecosystem))];\n const listsPerEcosystem = new Map(\n ecosystems.map((eco) => [\n eco,\n buildAllowBlockLists(eco, config.allowlist, config.blocklist, config.blocklist_patterns),\n ]),\n );\n\n // Fetch registry metadata in parallel\n const metadataPromises = parsed.packages.map(async (pkg) => {\n if (!config.checks.existence && !config.checks.reputation && !config.checks.install_scripts) {\n return undefined;\n }\n return fetchRegistryMetadata(pkg.name, pkg.ecosystem);\n });\n\n // Fetch vulnerabilities in batch\n const vulnPromise = config.checks.vulnerabilities\n ? queryVulnerabilitiesBatch(\n parsed.packages.map((p) => ({\n name: p.name,\n ecosystem: p.ecosystem,\n version: p.version,\n })),\n )\n : Promise.resolve(\n parsed.packages.map((p) => ({\n package: p.name,\n ecosystem: p.ecosystem,\n vulnerabilities: [] as import('./vulnerabilities.js').VulnEntry[],\n })),\n );\n\n const [metadataResults, vulnResults] = await Promise.all([\n Promise.all(metadataPromises),\n vulnPromise,\n ]);\n\n // Compute risk reports\n const reports: RiskReport[] = [];\n for (let i = 0; i < parsed.packages.length; i++) {\n const pkg = parsed.packages[i]!;\n const lists = listsPerEcosystem.get(pkg.ecosystem)!;\n const allowed = isAllowlisted(pkg.name, lists.allowlist);\n const blocked = isBlocklisted(pkg.name, lists.blocklist, lists.blocklistPatterns);\n\n const metadata = metadataResults[i] ?? {\n name: pkg.name,\n ecosystem: pkg.ecosystem,\n exists: true, // assume exists if we didn't check\n hasRepository: true,\n hasReadme: true,\n hasInstallScripts: false,\n };\n\n const vulns = vulnResults[i]?.vulnerabilities ?? [];\n\n const typosquatMatch =\n config.checks.typosquatting && !allowed\n ? detectTyposquat(pkg.name, lists.allowlist)\n : undefined;\n\n const report = computeRiskReport(metadata, vulns, typosquatMatch, blocked, allowed, {\n minAgeDays: config.risk_thresholds.min_age_days,\n minWeeklyDownloads: config.risk_thresholds.min_weekly_downloads,\n });\n\n reports.push(report);\n }\n\n // Compute overall recommendation (most restrictive)\n let overallRecommendation: RiskRecommendation = 'allow';\n for (const report of reports) {\n if (report.recommendation === 'block') {\n overallRecommendation = 'block';\n break;\n }\n if (report.recommendation === 'escalate') {\n overallRecommendation = 'escalate';\n }\n }\n\n // If on_risk is 'audit', downgrade escalate→allow (still log)\n if (config.on_risk === 'audit' && overallRecommendation === 'escalate') {\n overallRecommendation = 'allow';\n }\n // If on_risk is 'block', upgrade escalate→block\n if (config.on_risk === 'block' && overallRecommendation === 'escalate') {\n overallRecommendation = 'block';\n }\n\n const summary = formatSummary(command, reports, overallRecommendation);\n\n return {\n command,\n packages: reports,\n overallRecommendation,\n summary,\n auditMetadata: {\n command,\n manager: parsed.manager,\n packages: reports.map((r) => ({\n name: r.package,\n ecosystem: r.ecosystem,\n risk: r.overallRisk,\n signals: r.signals.map((s) => s.name),\n vulnCount: r.vulnerabilities.length,\n })),\n },\n skipped: false,\n };\n}\n\nfunction skippedResult(command: string, reason: string): GuardianResult {\n return {\n command,\n packages: [],\n overallRecommendation: 'allow',\n summary: reason,\n auditMetadata: { command, skipped: true, reason },\n skipped: true,\n skipReason: reason,\n };\n}\n\nfunction formatSummary(\n command: string,\n reports: RiskReport[],\n recommendation: RiskRecommendation,\n): string {\n const lines: string[] = [];\n lines.push(`Command: ${command}`);\n lines.push('');\n\n for (const report of reports) {\n if (report.signals.length === 0 && report.vulnerabilities.length === 0) continue;\n\n lines.push(`Package: ${report.package} (${report.ecosystem})`);\n lines.push(`Risk: ${report.overallRisk.toUpperCase()}`);\n\n if (report.signals.length > 0) {\n lines.push('Signals:');\n for (const signal of report.signals) {\n const icon =\n signal.severity === 'critical' || signal.severity === 'high'\n ? '!!'\n : signal.severity === 'medium'\n ? '! '\n : ' ';\n lines.push(` ${icon} ${signal.name}: ${signal.detail}`);\n }\n }\n\n lines.push('');\n }\n\n if (recommendation === 'block') {\n lines.push('Recommendation: BLOCK');\n } else if (recommendation === 'escalate') {\n lines.push('Recommendation: Requires human approval');\n }\n\n return lines.join('\\n');\n}\n","/**\n * Tracks tool invocation count as a proxy for token budget.\n * The budget value represents max invocations per session; -1 means unlimited.\n */\nexport class BudgetTracker {\n private _used = 0;\n private readonly _budget: number;\n\n constructor(budget: number) {\n this._budget = budget;\n }\n\n /** Returns false if consuming would exceed the budget. On success, increments the counter. */\n consume(amount = 1): boolean {\n if (this._budget === -1) {\n this._used += amount;\n return true;\n }\n if (this._used + amount > this._budget) return false;\n this._used += amount;\n return true;\n }\n\n remaining(): number {\n if (this._budget === -1) return Infinity;\n return Math.max(0, this._budget - this._used);\n }\n\n used(): number {\n return this._used;\n }\n\n isUnlimited(): boolean {\n return this._budget === -1;\n }\n}\n","import { watch, readFileSync, type FSWatcher } from 'node:fs';\nimport { parse as parseYaml } from 'yaml';\nimport { Value } from '@sinclair/typebox/value';\nimport { GovernanceConfigSchema, type GovernanceConfig } from './schema.js';\n\n/**\n * Watches a governance config file for changes and triggers a validated reload.\n * Uses fs.watch() with a 500ms debounce to avoid rapid reloads.\n */\nexport class ConfigWatcher {\n private watcher: FSWatcher | undefined;\n private debounceTimer: ReturnType<typeof setTimeout> | undefined;\n private readonly configPath: string;\n private readonly onChange: (config: GovernanceConfig) => void;\n private readonly onError?: (error: Error) => void;\n\n constructor(\n configPath: string,\n onChange: (config: GovernanceConfig) => void,\n onError?: (error: Error) => void,\n ) {\n this.configPath = configPath;\n this.onChange = onChange;\n this.onError = onError;\n }\n\n start(): void {\n if (this.watcher) return;\n this.watcher = watch(this.configPath, () => this.handleChange());\n }\n\n stop(): void {\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n this.debounceTimer = undefined;\n }\n if (this.watcher) {\n this.watcher.close();\n this.watcher = undefined;\n }\n }\n\n private handleChange(): void {\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n this.debounceTimer = setTimeout(() => this.reload(), 500);\n }\n\n private reload(): void {\n try {\n const raw = readFileSync(this.configPath, 'utf-8');\n const parsed = parseYaml(raw);\n const errors = [...Value.Errors(GovernanceConfigSchema, parsed)];\n if (errors.length > 0) {\n const msg = errors.map((e) => `${e.path}: ${e.message}`).join('; ');\n this.onError?.(new Error(`Config validation failed: ${msg}`));\n return;\n }\n const config = Value.Default(GovernanceConfigSchema, parsed) as GovernanceConfig;\n this.onChange(config);\n } catch (err) {\n this.onError?.(err instanceof Error ? err : new Error(String(err)));\n }\n }\n}\n","import { existsSync } from 'node:fs';\nimport { dirname, join, resolve } from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport interface TemplateSelectorConfig {\n directory?: string;\n default?: string;\n}\n\nfunction getBundledDir(): string {\n try {\n // ESM path\n return resolve(dirname(fileURLToPath(import.meta.url)), '../../../prompts');\n } catch {\n // CJS fallback\n return resolve(__dirname, '../../../prompts');\n }\n}\n\nexport class TemplateSelector {\n private userDirectory: string;\n private bundledDirectory: string;\n\n constructor(config?: TemplateSelectorConfig) {\n this.userDirectory = config?.directory ?? './templates/';\n this.bundledDirectory = getBundledDir();\n }\n\n /**\n * Resolve a template name to an absolute file path.\n * User templates take precedence over bundled templates.\n */\n resolve(templateName: string): string {\n // Check user directory first\n const userPath = resolve(join(this.userDirectory, `${templateName}.md`));\n if (existsSync(userPath)) return userPath;\n\n // Fall back to bundled templates\n const bundledPath = resolve(join(this.bundledDirectory, `${templateName}.md`));\n if (existsSync(bundledPath)) return bundledPath;\n\n throw new Error(\n `Prompt template '${templateName}' not found. Searched: ${userPath}, ${bundledPath}`,\n );\n }\n}\n","/**\n * Render a template string by substituting {{variable}} placeholders\n * with the corresponding values from the variables map.\n *\n * - String values replace the placeholder directly.\n * - Array values are joined with newlines.\n * - Unresolved variables (no matching key) are left as-is.\n */\nexport function render(\n templateContent: string,\n variables: Record<string, string | string[]>,\n): string {\n return templateContent.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key: string) => {\n const value = variables[key];\n if (value === undefined) return match;\n if (Array.isArray(value)) return value.join('\\n');\n return value;\n });\n}\n","import { randomUUID } from 'node:crypto';\nimport type { AuditRecord, AuditEventType } from './schema.js';\nimport type { AuditSink } from './sinks/sink.js';\nimport { JsonlAuditSink } from './sinks/jsonl.js';\nimport { WebhookAuditSink } from './sinks/webhook.js';\n\ninterface AuditSinkConfig {\n type: 'jsonl' | 'webhook' | 'postgres';\n path?: string;\n url?: string;\n connection?: string;\n}\n\ninterface AuditConfig {\n sinks: AuditSinkConfig[];\n}\n\nexport class AuditLogger {\n private sinks: AuditSink[];\n private counts: Map<AuditEventType, number> = new Map();\n\n constructor(config?: AuditConfig) {\n const sinkConfigs = config?.sinks ?? [\n { type: 'jsonl' as const, path: '~/.pi/agent/audit.jsonl' },\n ];\n this.sinks = [];\n\n for (const sc of sinkConfigs) {\n if (sc.type === 'jsonl') {\n this.sinks.push(new JsonlAuditSink(sc.path ?? '~/.pi/agent/audit.jsonl'));\n } else if (sc.type === 'webhook' && sc.url) {\n this.sinks.push(new WebhookAuditSink(sc.url));\n }\n // postgres: skip for now\n }\n\n // Ensure at least one sink\n if (this.sinks.length === 0) {\n this.sinks.push(new JsonlAuditSink('~/.pi/agent/audit.jsonl'));\n }\n }\n\n async log(record: Omit<AuditRecord, 'id' | 'timestamp'>): Promise<void> {\n const full: AuditRecord = {\n ...record,\n id: randomUUID(),\n timestamp: new Date().toISOString(),\n };\n\n this.counts.set(full.event, (this.counts.get(full.event) ?? 0) + 1);\n\n await Promise.all(this.sinks.map((s) => s.write(full as unknown as Record<string, unknown>)));\n }\n\n async flush(): Promise<void> {\n await Promise.all(this.sinks.map((s) => s.flush()));\n }\n\n getSummary(): Map<AuditEventType, number> {\n return new Map(this.counts);\n }\n}\n","import { appendFile, mkdir } from 'node:fs/promises';\nimport { dirname } from 'node:path';\nimport { homedir } from 'node:os';\nimport type { AuditSink } from './sink.js';\n\nexport class JsonlAuditSink implements AuditSink {\n private path: string;\n private buffer: Record<string, unknown>[] = [];\n private readonly flushThreshold = 10;\n\n constructor(path: string) {\n this.path = path.replace(/^~/, homedir());\n }\n\n async write(record: Record<string, unknown>): Promise<void> {\n this.buffer.push(record);\n if (this.buffer.length >= this.flushThreshold) {\n await this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.buffer.length === 0) return;\n const lines = this.buffer.map((r) => JSON.stringify(r)).join('\\n') + '\\n';\n this.buffer = [];\n await mkdir(dirname(this.path), { recursive: true });\n await appendFile(this.path, lines, 'utf-8');\n }\n}\n","import type { AuditSink } from './sink.js';\n\nexport class WebhookAuditSink implements AuditSink {\n private url: string;\n private buffer: Record<string, unknown>[] = [];\n private readonly flushThreshold = 10;\n\n constructor(url: string) {\n this.url = url;\n }\n\n async write(record: Record<string, unknown>): Promise<void> {\n this.buffer.push(record);\n if (this.buffer.length >= this.flushThreshold) {\n await this.flush();\n }\n }\n\n async flush(): Promise<void> {\n if (this.buffer.length === 0) return;\n const records = [...this.buffer];\n this.buffer = [];\n\n try {\n await this.send(records);\n } catch {\n // Retry once\n try {\n await this.send(records);\n } catch {\n // Drop records after second failure\n }\n }\n }\n\n private async send(records: Record<string, unknown>[]): Promise<void> {\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), 10_000);\n\n try {\n const response = await fetch(this.url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(records),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n throw new Error(`Webhook returned ${response.status}`);\n }\n } finally {\n clearTimeout(timeout);\n }\n }\n}\n","import type { ApprovalFlow, ApprovalResult, GovernanceToolCall, ConfirmUI } from './approval.js';\n\nexport class CliApprover implements ApprovalFlow {\n private ui: ConfirmUI;\n private timeoutSeconds: number;\n\n constructor(ui: ConfirmUI, timeoutSeconds: number = 300) {\n this.ui = ui;\n this.timeoutSeconds = timeoutSeconds;\n }\n\n async requestApproval(\n toolCall: GovernanceToolCall,\n context: { userId: string; role: string; orgUnit: string },\n ): Promise<ApprovalResult> {\n const title = `Approval Required: ${toolCall.toolName}`;\n const inputSummary = Object.entries(toolCall.input)\n .map(\n ([k, v]) =>\n ` ${k}: ${typeof v === 'string' ? v.slice(0, 200) : JSON.stringify(v).slice(0, 200)}`,\n )\n .join('\\n');\n const message = `User: ${context.userId} (${context.role})\\nOrg: ${context.orgUnit}\\n\\nTool: ${toolCall.toolName}\\nInput:\\n${inputSummary}`;\n\n const start = Date.now();\n\n try {\n const approved = await this.ui.confirm(title, message, {\n timeout: this.timeoutSeconds * 1000,\n });\n\n return {\n approved,\n approver: 'cli',\n duration: Date.now() - start,\n reason: approved ? undefined : 'Denied by user',\n };\n } catch {\n // Timeout or error — deny\n return {\n approved: false,\n approver: 'cli',\n duration: Date.now() - start,\n reason: 'Approval timed out',\n };\n }\n }\n}\n","import type { ApprovalFlow, ApprovalResult, GovernanceToolCall } from './approval.js';\n\nexport class WebhookApprover implements ApprovalFlow {\n private url: string;\n private timeoutMs: number;\n\n constructor(url: string, timeoutSeconds: number = 300) {\n this.url = url;\n this.timeoutMs = timeoutSeconds * 1000;\n }\n\n async requestApproval(\n toolCall: GovernanceToolCall,\n context: { userId: string; role: string; orgUnit: string },\n ): Promise<ApprovalResult> {\n const start = Date.now();\n const controller = new AbortController();\n const timeout = setTimeout(() => controller.abort(), this.timeoutMs);\n\n try {\n const response = await fetch(this.url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({\n toolCall: { toolName: toolCall.toolName, input: toolCall.input },\n context,\n }),\n signal: controller.signal,\n });\n\n if (!response.ok) {\n return {\n approved: false,\n approver: 'webhook',\n duration: Date.now() - start,\n reason: `Webhook returned ${response.status}`,\n };\n }\n\n const body = (await response.json()) as { approved: boolean; reason?: string };\n\n return {\n approved: body.approved,\n approver: 'webhook',\n duration: Date.now() - start,\n reason: body.reason,\n };\n } catch (err) {\n return {\n approved: false,\n approver: 'webhook',\n duration: Date.now() - start,\n reason:\n err instanceof Error && err.name === 'AbortError'\n ? 'Webhook timed out'\n : 'Webhook request failed',\n };\n } finally {\n clearTimeout(timeout);\n }\n }\n}\n","import { CliApprover } from './cli-approver.js';\nimport { WebhookApprover } from './webhook-approver.js';\n\nexport interface GovernanceToolCall {\n toolName: string;\n input: Record<string, unknown>;\n}\n\nexport interface ApprovalResult {\n approved: boolean;\n reason?: string;\n approver: string;\n duration: number;\n}\n\nexport interface ApprovalFlow {\n requestApproval(\n toolCall: GovernanceToolCall,\n context: { userId: string; role: string; orgUnit: string },\n ): Promise<ApprovalResult>;\n}\n\nexport interface ConfirmUI {\n confirm(title: string, message: string, opts?: { timeout?: number }): Promise<boolean>;\n}\n\nexport interface HitlConfig {\n default_mode: 'autonomous' | 'supervised' | 'dry_run';\n approval_channel: 'cli' | 'webhook';\n timeout_seconds: number;\n webhook?: { url: string };\n}\n\nexport function createApprovalFlow(config: HitlConfig, ui?: ConfirmUI): ApprovalFlow {\n if (config.approval_channel === 'webhook' && config.webhook?.url) {\n return new WebhookApprover(config.webhook.url, config.timeout_seconds);\n }\n\n // Fall back to CLI (also handles webhook without URL)\n if (!ui) {\n throw new Error('CLI approval channel requires a ConfirmUI (ExtensionContext.ui)');\n }\n\n return new CliApprover(ui, config.timeout_seconds);\n}\n","import { createServer, type IncomingMessage, type ServerResponse } from 'node:http';\nimport { writeFileSync, mkdirSync } from 'node:fs';\nimport { join } from 'node:path';\nimport { stringify } from 'yaml';\nimport type { GovernanceConfig } from '../config/schema.js';\nimport { DEFAULTS } from '../config/defaults.js';\nimport { WIZARD_HTML } from './html.js';\n\nexport interface WizardServerOptions {\n workingDirectory: string;\n existingConfig?: GovernanceConfig;\n onComplete: (files: { path: string; content: string }[]) => void;\n onError: (error: Error) => void;\n}\n\nconst AUTO_SHUTDOWN_MS = 10 * 60 * 1000;\n\nconst BUILTIN_ROLES = {\n analyst: {\n allowed_tools: ['read', 'grep', 'find', 'ls'],\n blocked_tools: ['bash', 'write', 'edit'],\n hitl_mode: 'dry_run' as const,\n },\n project_lead: {\n allowed_tools: ['read', 'write', 'edit', 'grep', 'find', 'ls', 'bash'],\n blocked_tools: [],\n hitl_mode: 'supervised' as const,\n },\n admin: {\n allowed_tools: ['read', 'write', 'edit', 'grep', 'find', 'ls', 'bash'],\n blocked_tools: [],\n hitl_mode: 'autonomous' as const,\n },\n auditor: {\n allowed_tools: ['read', 'grep', 'find', 'ls'],\n blocked_tools: ['bash', 'write', 'edit'],\n hitl_mode: 'dry_run' as const,\n },\n};\n\nfunction setCorsHeaders(res: ServerResponse): void {\n res.setHeader('Access-Control-Allow-Origin', 'http://localhost');\n res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');\n res.setHeader('Access-Control-Allow-Headers', 'Content-Type');\n}\n\nfunction sendJson(res: ServerResponse, status: number, data: unknown): void {\n res.writeHead(status, { 'Content-Type': 'application/json' });\n res.end(JSON.stringify(data));\n}\n\nfunction readBody(req: IncomingMessage): Promise<string> {\n return new Promise((resolve, reject) => {\n const chunks: Buffer[] = [];\n req.on('data', (chunk: Buffer) => chunks.push(chunk));\n req.on('end', () => resolve(Buffer.concat(chunks).toString('utf-8')));\n req.on('error', reject);\n });\n}\n\nexport function startWizardServer(\n options: WizardServerOptions,\n): Promise<{ port: number; close: () => void }> {\n return new Promise((resolve, reject) => {\n let shutdownTimer: ReturnType<typeof setTimeout> | undefined;\n\n const server = createServer((req, res) => {\n setCorsHeaders(res);\n\n if (req.method === 'OPTIONS') {\n res.writeHead(204);\n res.end();\n return;\n }\n\n const url = req.url ?? '/';\n\n try {\n if (req.method === 'GET' && url === '/') {\n res.writeHead(200, { 'Content-Type': 'text/html' });\n res.end(WIZARD_HTML);\n return;\n }\n\n if (req.method === 'GET' && url === '/api/config') {\n sendJson(res, 200, options.existingConfig ?? DEFAULTS);\n return;\n }\n\n if (req.method === 'GET' && url === '/api/defaults') {\n sendJson(res, 200, { defaults: DEFAULTS, roles: BUILTIN_ROLES });\n return;\n }\n\n if (req.method === 'POST' && url === '/api/save') {\n readBody(req)\n .then((body) => {\n const parsed: unknown = JSON.parse(body);\n if (typeof parsed !== 'object' || parsed === null || !('governance' in parsed)) {\n sendJson(res, 400, { error: 'Request body must include \"governance\" property' });\n return;\n }\n\n const payload = parsed as { governance: GovernanceConfig; rules?: unknown };\n const governanceYaml = stringify(payload.governance);\n const piDir = join(options.workingDirectory, '.pi');\n const governancePath = join(piDir, 'governance.yaml');\n\n mkdirSync(piDir, { recursive: true });\n writeFileSync(governancePath, governanceYaml, 'utf-8');\n\n const files: { path: string; content: string }[] = [\n { path: governancePath, content: governanceYaml },\n ];\n\n if (payload.rules !== undefined) {\n const rulesYaml = stringify(payload.rules);\n const rulesPath = join(options.workingDirectory, 'governance-rules.yaml');\n writeFileSync(rulesPath, rulesYaml, 'utf-8');\n files.push({ path: rulesPath, content: rulesYaml });\n }\n\n sendJson(res, 200, { ok: true, files: files.map((f) => f.path) });\n options.onComplete(files);\n })\n .catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n sendJson(res, 400, { error: `Invalid request body: ${message}` });\n });\n return;\n }\n\n if (req.method === 'POST' && url === '/api/close') {\n sendJson(res, 200, { ok: true });\n setTimeout(() => {\n closeServer();\n }, 100);\n return;\n }\n\n sendJson(res, 404, { error: 'Not found' });\n } catch (err: unknown) {\n const error = err instanceof Error ? err : new Error(String(err));\n options.onError(error);\n sendJson(res, 500, { error: 'Internal server error' });\n }\n });\n\n function closeServer(): void {\n if (shutdownTimer !== undefined) {\n clearTimeout(shutdownTimer);\n shutdownTimer = undefined;\n }\n server.close();\n }\n\n server.on('error', (err) => {\n options.onError(err);\n reject(err);\n });\n\n server.listen(0, () => {\n const addr = server.address();\n if (addr === null || typeof addr === 'string') {\n const err = new Error('Failed to get server address');\n options.onError(err);\n reject(err);\n return;\n }\n\n shutdownTimer = setTimeout(() => {\n closeServer();\n }, AUTO_SHUTDOWN_MS);\n\n resolve({ port: addr.port, close: closeServer });\n });\n });\n}\n","export const WIZARD_HTML: string = `<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Pi Governance — Setup Wizard</title>\n<style>\n :root {\n --bg: #f8f9fa;\n --bg-surface: #ffffff;\n --bg-surface-alt: #f1f3f5;\n --bg-code: #e9ecef;\n --text: #212529;\n --text-muted: #6c757d;\n --text-inverse: #ffffff;\n --border: #dee2e6;\n --border-focus: #4263eb;\n --primary: #4263eb;\n --primary-hover: #3b5bdb;\n --primary-subtle: #dbe4ff;\n --success: #2f9e44;\n --success-subtle: #d3f9d8;\n --danger: #e03131;\n --danger-subtle: #ffe3e3;\n --warning: #f08c00;\n --warning-subtle: #fff3bf;\n --radius: 8px;\n --radius-sm: 4px;\n --shadow: 0 1px 3px rgba(0,0,0,0.08);\n --shadow-lg: 0 4px 12px rgba(0,0,0,0.1);\n --font-mono: 'SF Mono', 'Cascadia Code', 'Fira Code', monospace;\n --font-sans: -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;\n --transition: 150ms ease;\n }\n\n @media (prefers-color-scheme: dark) {\n :root {\n --bg: #1a1b1e;\n --bg-surface: #25262b;\n --bg-surface-alt: #2c2e33;\n --bg-code: #2c2e33;\n --text: #c1c2c5;\n --text-muted: #909296;\n --text-inverse: #1a1b1e;\n --border: #373a40;\n --border-focus: #5c7cfa;\n --primary: #5c7cfa;\n --primary-hover: #748ffc;\n --primary-subtle: #1b2559;\n --success: #51cf66;\n --success-subtle: #0b3d1a;\n --danger: #ff6b6b;\n --danger-subtle: #3d0b0b;\n --warning: #fcc419;\n --warning-subtle: #3d2e00;\n --shadow: 0 1px 3px rgba(0,0,0,0.3);\n --shadow-lg: 0 4px 12px rgba(0,0,0,0.4);\n }\n }\n\n * { margin: 0; padding: 0; box-sizing: border-box; }\n\n body {\n font-family: var(--font-sans);\n background: var(--bg);\n color: var(--text);\n line-height: 1.6;\n min-height: 100vh;\n }\n\n .layout {\n display: grid;\n grid-template-columns: 1fr 420px;\n gap: 0;\n min-height: 100vh;\n }\n\n @media (max-width: 1024px) {\n .layout { grid-template-columns: 1fr; }\n .preview-panel { display: none; }\n }\n\n /* --- Left column: Form --- */\n .form-column {\n padding: 32px 40px 80px;\n overflow-y: auto;\n max-height: 100vh;\n }\n\n .logo {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 8px;\n }\n\n .logo-icon {\n width: 36px; height: 36px;\n background: var(--primary);\n border-radius: var(--radius);\n display: flex; align-items: center; justify-content: center;\n color: var(--text-inverse);\n font-weight: 700; font-size: 18px;\n }\n\n .logo-text {\n font-size: 20px;\n font-weight: 700;\n color: var(--text);\n }\n\n .logo-text span { color: var(--text-muted); font-weight: 400; }\n\n h1 {\n font-size: 28px;\n font-weight: 700;\n margin: 24px 0 8px;\n }\n\n .subtitle {\n color: var(--text-muted);\n font-size: 15px;\n margin-bottom: 32px;\n }\n\n /* Sections */\n .section {\n background: var(--bg-surface);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 24px;\n margin-bottom: 20px;\n box-shadow: var(--shadow);\n }\n\n .section-header {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 16px;\n cursor: pointer;\n user-select: none;\n }\n\n .section-header h2 {\n font-size: 16px;\n font-weight: 600;\n flex: 1;\n }\n\n .section-badge {\n font-size: 11px;\n padding: 2px 8px;\n border-radius: 10px;\n font-weight: 600;\n text-transform: uppercase;\n letter-spacing: 0.5px;\n }\n\n .badge-required { background: var(--danger-subtle); color: var(--danger); }\n .badge-optional { background: var(--primary-subtle); color: var(--primary); }\n\n .section-icon {\n width: 32px; height: 32px;\n border-radius: var(--radius-sm);\n display: flex; align-items: center; justify-content: center;\n font-size: 16px;\n flex-shrink: 0;\n }\n\n .section-body { display: block; }\n .section.collapsed .section-body { display: none; }\n .section-chevron {\n transition: transform var(--transition);\n color: var(--text-muted);\n font-size: 12px;\n }\n .section.collapsed .section-chevron { transform: rotate(-90deg); }\n\n /* Form elements */\n label {\n display: block;\n font-size: 13px;\n font-weight: 600;\n color: var(--text);\n margin-bottom: 4px;\n }\n\n .label-hint {\n font-weight: 400;\n color: var(--text-muted);\n font-size: 12px;\n }\n\n input[type=\"text\"],\n input[type=\"number\"],\n select {\n width: 100%;\n padding: 8px 12px;\n border: 1px solid var(--border);\n border-radius: var(--radius-sm);\n background: var(--bg-surface);\n color: var(--text);\n font-size: 14px;\n font-family: var(--font-sans);\n transition: border-color var(--transition);\n outline: none;\n }\n\n input:focus, select:focus {\n border-color: var(--border-focus);\n box-shadow: 0 0 0 2px var(--primary-subtle);\n }\n\n .field { margin-bottom: 16px; }\n\n .field-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n }\n\n .field-row-3 {\n display: grid;\n grid-template-columns: 1fr 1fr 1fr;\n gap: 12px;\n }\n\n /* Toggle switch */\n .toggle-row {\n display: flex;\n align-items: center;\n gap: 10px;\n margin-bottom: 12px;\n }\n\n .toggle {\n position: relative;\n width: 40px; height: 22px;\n flex-shrink: 0;\n }\n\n .toggle input { display: none; }\n\n .toggle-slider {\n position: absolute;\n inset: 0;\n background: var(--border);\n border-radius: 11px;\n cursor: pointer;\n transition: background var(--transition);\n }\n\n .toggle-slider::before {\n content: '';\n position: absolute;\n width: 16px; height: 16px;\n left: 3px; top: 3px;\n background: white;\n border-radius: 50%;\n transition: transform var(--transition);\n }\n\n .toggle input:checked + .toggle-slider {\n background: var(--primary);\n }\n\n .toggle input:checked + .toggle-slider::before {\n transform: translateX(18px);\n }\n\n .toggle-label {\n font-size: 14px;\n font-weight: 500;\n }\n\n /* Role cards */\n .role-grid {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 12px;\n }\n\n .role-card {\n border: 2px solid var(--border);\n border-radius: var(--radius);\n padding: 16px;\n cursor: pointer;\n transition: all var(--transition);\n position: relative;\n }\n\n .role-card:hover { border-color: var(--primary); }\n\n .role-card.selected {\n border-color: var(--primary);\n background: var(--primary-subtle);\n }\n\n .role-card-check {\n position: absolute;\n top: 12px; right: 12px;\n width: 20px; height: 20px;\n border: 2px solid var(--border);\n border-radius: 4px;\n display: flex; align-items: center; justify-content: center;\n font-size: 12px;\n color: transparent;\n transition: all var(--transition);\n }\n\n .role-card.selected .role-card-check {\n background: var(--primary);\n border-color: var(--primary);\n color: white;\n }\n\n .role-name {\n font-weight: 600;\n font-size: 14px;\n margin-bottom: 4px;\n }\n\n .role-desc {\n font-size: 12px;\n color: var(--text-muted);\n margin-bottom: 8px;\n }\n\n .role-tags {\n display: flex;\n flex-wrap: wrap;\n gap: 4px;\n }\n\n .role-tag {\n font-size: 11px;\n padding: 1px 6px;\n border-radius: 3px;\n background: var(--bg-surface-alt);\n color: var(--text-muted);\n font-family: var(--font-mono);\n }\n\n .role-details {\n display: none;\n margin-top: 12px;\n padding-top: 12px;\n border-top: 1px solid var(--border);\n }\n\n .role-card.selected .role-details { display: block; }\n\n /* Chip selector */\n .chip-group {\n display: flex;\n gap: 6px;\n flex-wrap: wrap;\n margin-bottom: 12px;\n }\n\n .chip {\n padding: 5px 14px;\n border: 1px solid var(--border);\n border-radius: 16px;\n font-size: 13px;\n cursor: pointer;\n transition: all var(--transition);\n background: var(--bg-surface);\n color: var(--text);\n }\n\n .chip:hover { border-color: var(--primary); }\n\n .chip.active {\n background: var(--primary);\n border-color: var(--primary);\n color: var(--text-inverse);\n }\n\n /* Pattern list */\n .pattern-list { margin-top: 12px; }\n\n .pattern-item {\n display: grid;\n grid-template-columns: 1fr 1.5fr auto auto;\n gap: 8px;\n align-items: center;\n margin-bottom: 8px;\n }\n\n .pattern-item input, .pattern-item select {\n font-size: 13px;\n padding: 6px 8px;\n }\n\n .btn-remove {\n background: none;\n border: none;\n color: var(--danger);\n cursor: pointer;\n font-size: 18px;\n padding: 4px;\n line-height: 1;\n }\n\n .btn-add {\n background: none;\n border: 1px dashed var(--border);\n border-radius: var(--radius-sm);\n padding: 6px 14px;\n color: var(--primary);\n cursor: pointer;\n font-size: 13px;\n font-weight: 500;\n transition: all var(--transition);\n }\n\n .btn-add:hover {\n border-color: var(--primary);\n background: var(--primary-subtle);\n }\n\n /* Allowlist */\n .allowlist-item {\n display: flex;\n gap: 8px;\n margin-bottom: 8px;\n }\n\n .allowlist-item input { flex: 1; font-size: 13px; padding: 6px 8px; }\n\n /* Sink list */\n .sink-item {\n background: var(--bg-surface-alt);\n border-radius: var(--radius-sm);\n padding: 12px;\n margin-bottom: 8px;\n position: relative;\n }\n\n .sink-item .btn-remove {\n position: absolute;\n top: 8px; right: 8px;\n }\n\n /* --- Right column: Preview --- */\n .preview-panel {\n background: var(--bg-surface-alt);\n border-left: 1px solid var(--border);\n padding: 24px;\n display: flex;\n flex-direction: column;\n position: sticky;\n top: 0;\n height: 100vh;\n overflow: hidden;\n }\n\n .preview-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 16px;\n flex-shrink: 0;\n }\n\n .preview-header h3 {\n font-size: 14px;\n font-weight: 600;\n }\n\n .preview-tabs {\n display: flex;\n gap: 4px;\n margin-bottom: 12px;\n flex-shrink: 0;\n }\n\n .preview-tab {\n padding: 4px 12px;\n font-size: 12px;\n border: 1px solid var(--border);\n border-radius: var(--radius-sm);\n background: var(--bg-surface);\n cursor: pointer;\n color: var(--text-muted);\n transition: all var(--transition);\n }\n\n .preview-tab.active {\n background: var(--primary);\n border-color: var(--primary);\n color: var(--text-inverse);\n }\n\n .preview-content {\n flex: 1;\n overflow-y: auto;\n background: var(--bg-surface);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n padding: 16px;\n }\n\n .preview-content pre {\n font-family: var(--font-mono);\n font-size: 12px;\n line-height: 1.5;\n white-space: pre;\n color: var(--text);\n margin: 0;\n }\n\n /* Bottom bar */\n .bottom-bar {\n position: fixed;\n bottom: 0;\n left: 0;\n right: 420px;\n padding: 16px 40px;\n background: var(--bg-surface);\n border-top: 1px solid var(--border);\n display: flex;\n align-items: center;\n justify-content: space-between;\n z-index: 100;\n box-shadow: 0 -2px 8px rgba(0,0,0,0.06);\n }\n\n @media (max-width: 1024px) {\n .bottom-bar { right: 0; }\n }\n\n .btn-primary {\n padding: 10px 28px;\n background: var(--primary);\n color: var(--text-inverse);\n border: none;\n border-radius: var(--radius);\n font-size: 14px;\n font-weight: 600;\n cursor: pointer;\n transition: background var(--transition);\n }\n\n .btn-primary:hover { background: var(--primary-hover); }\n .btn-primary:disabled { opacity: 0.5; cursor: not-allowed; }\n\n .btn-secondary {\n padding: 10px 20px;\n background: var(--bg-surface);\n color: var(--text);\n border: 1px solid var(--border);\n border-radius: var(--radius);\n font-size: 14px;\n font-weight: 500;\n cursor: pointer;\n transition: all var(--transition);\n }\n\n .btn-secondary:hover { border-color: var(--primary); color: var(--primary); }\n\n .save-status {\n font-size: 13px;\n color: var(--text-muted);\n }\n\n .save-status.success { color: var(--success); }\n .save-status.error { color: var(--danger); }\n\n /* Toast */\n .toast {\n position: fixed;\n top: 20px;\n right: 20px;\n padding: 12px 20px;\n border-radius: var(--radius);\n font-size: 14px;\n font-weight: 500;\n z-index: 1000;\n box-shadow: var(--shadow-lg);\n transform: translateY(-10px);\n opacity: 0;\n transition: all 300ms ease;\n pointer-events: none;\n }\n\n .toast.visible { transform: translateY(0); opacity: 1; pointer-events: auto; }\n .toast.success { background: var(--success); color: white; }\n .toast.error { background: var(--danger); color: white; }\n\n /* Helpers */\n .help-text {\n font-size: 12px;\n color: var(--text-muted);\n margin-top: 4px;\n }\n\n .divider {\n border: none;\n border-top: 1px solid var(--border);\n margin: 16px 0;\n }\n\n .hidden { display: none !important; }\n</style>\n</head>\n<body>\n<div class=\"layout\">\n <!-- ═══════════ LEFT: FORM ═══════════ -->\n <div class=\"form-column\">\n <div class=\"logo\">\n <div class=\"logo-icon\">G</div>\n <div class=\"logo-text\">Pi Governance <span>Setup Wizard</span></div>\n </div>\n\n <h1>Configure your governance policy</h1>\n <p class=\"subtitle\">\n AI coding agents are powerful but need guardrails. This wizard generates a\n <code>governance.yaml</code> and <code>governance-rules.yaml</code> to control\n tool access, bash safety, data-loss prevention, human approvals, and audit logging.\n </p>\n\n <!-- ── 1. Roles ── -->\n <div class=\"section\" id=\"sec-roles\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-roles')\">\n <div class=\"section-icon\" style=\"background:var(--primary-subtle);color:var(--primary)\">&#x1f465;</div>\n <h2>Roles</h2>\n <span class=\"section-badge badge-required\">Required</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <p class=\"help-text\" style=\"margin-bottom:12px\">Select the roles your team needs. Each role defines tool access, execution mode, and approval rules.</p>\n <div class=\"role-grid\" id=\"role-grid\"></div>\n </div>\n </div>\n\n <!-- ── 2. DLP ── -->\n <div class=\"section\" id=\"sec-dlp\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-dlp')\">\n <div class=\"section-icon\" style=\"background:var(--warning-subtle);color:var(--warning)\">&#x1f6e1;</div>\n <h2>Data Loss Prevention</h2>\n <span class=\"section-badge badge-optional\">Optional</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <div class=\"toggle-row\">\n <label class=\"toggle\"><input type=\"checkbox\" id=\"dlp-enabled\" checked onchange=\"updatePreview()\"><span class=\"toggle-slider\"></span></label>\n <span class=\"toggle-label\">Enable DLP scanning</span>\n </div>\n\n <div id=\"dlp-options\">\n <div class=\"field\">\n <label>Default Mode</label>\n <div class=\"chip-group\" id=\"dlp-mode\">\n <span class=\"chip active\" data-value=\"audit\" onclick=\"selectChip(this)\">Audit</span>\n <span class=\"chip\" data-value=\"mask\" onclick=\"selectChip(this)\">Mask</span>\n <span class=\"chip\" data-value=\"block\" onclick=\"selectChip(this)\">Block</span>\n </div>\n </div>\n\n <div class=\"field-row\">\n <div class=\"field\">\n <label>On Input <span class=\"label-hint\">(agent receives)</span></label>\n <select id=\"dlp-on-input\" onchange=\"updatePreview()\">\n <option value=\"\">Use default mode</option>\n <option value=\"audit\">Audit</option>\n <option value=\"mask\">Mask</option>\n <option value=\"block\" selected>Block</option>\n </select>\n </div>\n <div class=\"field\">\n <label>On Output <span class=\"label-hint\">(agent produces)</span></label>\n <select id=\"dlp-on-output\" onchange=\"updatePreview()\">\n <option value=\"\">Use default mode</option>\n <option value=\"audit\">Audit</option>\n <option value=\"mask\" selected>Mask</option>\n <option value=\"block\">Block</option>\n </select>\n </div>\n </div>\n\n <hr class=\"divider\">\n <label>Built-in Patterns</label>\n <div class=\"toggle-row\" style=\"margin-top:6px\">\n <label class=\"toggle\"><input type=\"checkbox\" id=\"dlp-secrets\" checked onchange=\"updatePreview()\"><span class=\"toggle-slider\"></span></label>\n <span class=\"toggle-label\">Secrets <span class=\"label-hint\">(API keys, tokens, passwords)</span></span>\n </div>\n <div class=\"toggle-row\">\n <label class=\"toggle\"><input type=\"checkbox\" id=\"dlp-pii\" checked onchange=\"updatePreview()\"><span class=\"toggle-slider\"></span></label>\n <span class=\"toggle-label\">PII <span class=\"label-hint\">(emails, phone numbers, SSNs)</span></span>\n </div>\n\n <hr class=\"divider\">\n <label>Masking Options</label>\n <div class=\"field-row-3\" style=\"margin-top:8px\">\n <div class=\"field\">\n <label>Strategy</label>\n <select id=\"dlp-mask-strategy\" onchange=\"updatePreview()\">\n <option value=\"partial\" selected>Partial</option>\n <option value=\"full\">Full</option>\n <option value=\"hash\">Hash</option>\n </select>\n </div>\n <div class=\"field\">\n <label>Show Chars</label>\n <input type=\"number\" id=\"dlp-mask-show\" value=\"4\" min=\"0\" onchange=\"updatePreview()\">\n </div>\n <div class=\"field\">\n <label>Placeholder</label>\n <input type=\"text\" id=\"dlp-mask-placeholder\" value=\"***\" onchange=\"updatePreview()\">\n </div>\n </div>\n\n <hr class=\"divider\">\n <label>Severity Threshold <span class=\"label-hint\">(minimum severity to trigger DLP)</span></label>\n <div class=\"chip-group\" id=\"dlp-severity\" style=\"margin-top:6px\">\n <span class=\"chip active\" data-value=\"low\" onclick=\"selectChip(this)\">Low</span>\n <span class=\"chip\" data-value=\"medium\" onclick=\"selectChip(this)\">Medium</span>\n <span class=\"chip\" data-value=\"high\" onclick=\"selectChip(this)\">High</span>\n <span class=\"chip\" data-value=\"critical\" onclick=\"selectChip(this)\">Critical</span>\n </div>\n\n <hr class=\"divider\">\n <label>Custom Patterns</label>\n <div class=\"pattern-list\" id=\"dlp-custom-patterns\"></div>\n <button class=\"btn-add\" onclick=\"addCustomPattern()\">+ Add pattern</button>\n\n <hr class=\"divider\">\n <label>Allowlist <span class=\"label-hint\">(patterns to ignore)</span></label>\n <div id=\"dlp-allowlist\"></div>\n <button class=\"btn-add\" onclick=\"addAllowlistEntry()\" style=\"margin-top:8px\">+ Add entry</button>\n </div>\n </div>\n </div>\n\n <!-- ── 3. Bash Classification ── -->\n <div class=\"section\" id=\"sec-bash\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-bash')\">\n <div class=\"section-icon\" style=\"background:var(--danger-subtle);color:var(--danger)\">&#x1f4bb;</div>\n <h2>Bash Classification</h2>\n <span class=\"section-badge badge-optional\">Optional</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <p class=\"help-text\" style=\"margin-bottom:12px\">The built-in bash classifier categorizes commands by danger level. Adjust the threshold for auto-blocking.</p>\n <div class=\"field\">\n <label>Auto-block Severity</label>\n <p class=\"help-text\">Commands at or above this severity are blocked without HITL.</p>\n <div class=\"chip-group\" id=\"bash-severity\" style=\"margin-top:6px\">\n <span class=\"chip\" data-value=\"low\" onclick=\"selectChip(this)\">Low</span>\n <span class=\"chip\" data-value=\"medium\" onclick=\"selectChip(this)\">Medium</span>\n <span class=\"chip active\" data-value=\"high\" onclick=\"selectChip(this)\">High</span>\n <span class=\"chip\" data-value=\"critical\" onclick=\"selectChip(this)\">Critical</span>\n </div>\n </div>\n </div>\n </div>\n\n <!-- ── 4. HITL ── -->\n <div class=\"section\" id=\"sec-hitl\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-hitl')\">\n <div class=\"section-icon\" style=\"background:var(--success-subtle);color:var(--success)\">&#x1f9d1;</div>\n <h2>Human-in-the-Loop</h2>\n <span class=\"section-badge badge-required\">Required</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <div class=\"field\">\n <label>Default Execution Mode</label>\n <div class=\"chip-group\" id=\"hitl-mode\">\n <span class=\"chip\" data-value=\"autonomous\" onclick=\"selectChip(this)\">Autonomous</span>\n <span class=\"chip active\" data-value=\"supervised\" onclick=\"selectChip(this)\">Supervised</span>\n <span class=\"chip\" data-value=\"dry_run\" onclick=\"selectChip(this)\">Dry Run</span>\n </div>\n </div>\n <div class=\"field-row\">\n <div class=\"field\">\n <label>Approval Channel</label>\n <select id=\"hitl-channel\" onchange=\"updatePreview()\">\n <option value=\"cli\" selected>CLI (terminal prompt)</option>\n <option value=\"webhook\">Webhook</option>\n </select>\n </div>\n <div class=\"field\">\n <label>Timeout <span class=\"label-hint\">(seconds)</span></label>\n <input type=\"number\" id=\"hitl-timeout\" value=\"300\" min=\"10\" max=\"3600\" onchange=\"updatePreview()\">\n </div>\n </div>\n <div class=\"field hidden\" id=\"hitl-webhook-field\">\n <label>Webhook URL</label>\n <input type=\"text\" id=\"hitl-webhook-url\" placeholder=\"https://...\" onchange=\"updatePreview()\">\n </div>\n </div>\n </div>\n\n <!-- ── 5. Audit ── -->\n <div class=\"section\" id=\"sec-audit\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-audit')\">\n <div class=\"section-icon\" style=\"background:var(--primary-subtle);color:var(--primary)\">&#x1f4dd;</div>\n <h2>Audit Logging</h2>\n <span class=\"section-badge badge-required\">Required</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <p class=\"help-text\" style=\"margin-bottom:12px\">All governance events are logged to one or more sinks.</p>\n <div id=\"audit-sinks\"></div>\n <button class=\"btn-add\" onclick=\"addAuditSink()\" style=\"margin-top:8px\">+ Add sink</button>\n </div>\n </div>\n\n <!-- ── 6. Auth ── -->\n <div class=\"section collapsed\" id=\"sec-auth\">\n <div class=\"section-header\" onclick=\"toggleSection('sec-auth')\">\n <div class=\"section-icon\" style=\"background:var(--bg-surface-alt);color:var(--text-muted)\">&#x1f511;</div>\n <h2>Authentication</h2>\n <span class=\"section-badge badge-optional\">Optional</span>\n <span class=\"section-chevron\">&#9660;</span>\n </div>\n <div class=\"section-body\">\n <div class=\"field\">\n <label>Provider</label>\n <div class=\"chip-group\" id=\"auth-provider\">\n <span class=\"chip active\" data-value=\"env\" onclick=\"selectChip(this)\">Environment Vars</span>\n <span class=\"chip\" data-value=\"local\" onclick=\"selectChip(this)\">Local File</span>\n <span class=\"chip\" data-value=\"oidc\" onclick=\"selectChip(this)\">OIDC</span>\n </div>\n </div>\n <div id=\"auth-env-fields\">\n <div class=\"field-row-3\">\n <div class=\"field\">\n <label>User Var</label>\n <input type=\"text\" id=\"auth-user-var\" value=\"PI_GOV_USER\" onchange=\"updatePreview()\">\n </div>\n <div class=\"field\">\n <label>Role Var</label>\n <input type=\"text\" id=\"auth-role-var\" value=\"PI_GOV_ROLE\" onchange=\"updatePreview()\">\n </div>\n <div class=\"field\">\n <label>Org Unit Var</label>\n <input type=\"text\" id=\"auth-org-unit-var\" value=\"PI_GOV_ORG_UNIT\" onchange=\"updatePreview()\">\n </div>\n </div>\n </div>\n <div id=\"auth-local-fields\" class=\"hidden\">\n <div class=\"field\">\n <label>Users File</label>\n <input type=\"text\" id=\"auth-users-file\" value=\"./users.yaml\" onchange=\"updatePreview()\">\n </div>\n </div>\n </div>\n </div>\n\n <div style=\"height:80px\"></div>\n </div>\n\n <!-- ═══════════ RIGHT: PREVIEW ═══════════ -->\n <div class=\"preview-panel\">\n <div class=\"preview-header\">\n <h3>Live Preview</h3>\n </div>\n <div class=\"preview-tabs\">\n <span class=\"preview-tab active\" data-tab=\"governance\" onclick=\"switchTab(this)\">governance.yaml</span>\n <span class=\"preview-tab\" data-tab=\"rules\" onclick=\"switchTab(this)\">governance-rules.yaml</span>\n </div>\n <div class=\"preview-content\">\n <pre id=\"preview-yaml\"></pre>\n </div>\n </div>\n</div>\n\n<!-- ── Bottom bar ── -->\n<div class=\"bottom-bar\">\n <span class=\"save-status\" id=\"save-status\"></span>\n <div style=\"display:flex;gap:10px\">\n <button class=\"btn-secondary\" onclick=\"handleClose()\">Cancel</button>\n <button class=\"btn-primary\" id=\"btn-save\" onclick=\"handleSave()\">Save Configuration</button>\n </div>\n</div>\n\n<!-- Toast -->\n<div class=\"toast\" id=\"toast\"></div>\n\n<script>\n// ─── State ───────────────────────────────────────────────────────────\nconst PRESET_ROLES = {\n analyst: {\n label: 'Analyst',\n desc: 'Read-only access, every action requires approval.',\n allowed_tools: ['read','grep','find','ls'],\n blocked_tools: ['write','edit','bash'],\n prompt_template: 'analyst',\n execution_mode: 'supervised',\n human_approval: { required_for: ['all'] },\n token_budget_daily: 100000,\n allowed_paths: ['{{project_path}}/**'],\n blocked_paths: ['**/secrets/**', '**/.env*']\n },\n project_lead: {\n label: 'Project Lead',\n desc: 'Full tools, bash & write need human approval.',\n allowed_tools: ['read','write','edit','bash','grep','find','ls'],\n blocked_tools: [],\n prompt_template: 'project-lead',\n execution_mode: 'supervised',\n human_approval: { required_for: ['bash','write'], auto_approve: ['read','edit','grep','find','ls'] },\n token_budget_daily: 500000,\n allowed_paths: ['{{project_path}}/**'],\n blocked_paths: ['**/secrets/**', '**/.env*'],\n bash_overrides: { additional_blocked: ['sudo','ssh','curl.*\\\\\\\\|.*sh'] }\n },\n admin: {\n label: 'Admin',\n desc: 'Full autonomous access, no approvals, unlimited budget.',\n allowed_tools: ['all'],\n blocked_tools: [],\n prompt_template: 'admin',\n execution_mode: 'autonomous',\n human_approval: { required_for: [] },\n token_budget_daily: -1,\n allowed_paths: ['**'],\n blocked_paths: []\n },\n auditor: {\n label: 'Auditor',\n desc: 'Dry-run: all calls logged, nothing executed.',\n allowed_tools: ['read','grep','find','ls'],\n blocked_tools: ['write','edit','bash'],\n prompt_template: 'analyst',\n execution_mode: 'dry_run',\n human_approval: { required_for: ['all'] },\n token_budget_daily: 50000,\n allowed_paths: ['**'],\n blocked_paths: ['**/secrets/**']\n }\n};\n\nlet selectedRoles = { analyst: false, project_lead: true, admin: false, auditor: false };\nlet customPatterns = [];\nlet allowlistEntries = [];\nlet auditSinks = [{ type: 'jsonl', path: '~/.pi/agent/audit.jsonl' }];\nlet activePreviewTab = 'governance';\n\n// ─── Init ────────────────────────────────────────────────────────────\ndocument.addEventListener('DOMContentLoaded', async () => {\n renderRoles();\n renderAuditSinks();\n updatePreview();\n\n try {\n const [configRes, defaultsRes] = await Promise.all([\n fetch('/api/config').catch(() => null),\n fetch('/api/defaults').catch(() => null)\n ]);\n if (configRes && configRes.ok) {\n const cfg = await configRes.json();\n applyConfig(cfg);\n }\n if (defaultsRes && defaultsRes.ok) {\n const defs = await defaultsRes.json();\n if (!configRes || !configRes.ok) applyConfig(defs);\n }\n } catch (e) { /* use built-in defaults */ }\n\n // watch for webhook channel\n document.getElementById('hitl-channel').addEventListener('change', (e) => {\n document.getElementById('hitl-webhook-field').classList.toggle('hidden', e.target.value !== 'webhook');\n updatePreview();\n });\n\n // watch dlp toggle\n document.getElementById('dlp-enabled').addEventListener('change', (e) => {\n document.getElementById('dlp-options').classList.toggle('hidden', !e.target.checked);\n updatePreview();\n });\n});\n\n// ─── Apply Config ────────────────────────────────────────────────────\nfunction applyConfig(cfg) {\n if (!cfg) return;\n\n // Auth\n if (cfg.auth) {\n setChipValue('auth-provider', cfg.auth.provider || 'env');\n if (cfg.auth.env) {\n if (cfg.auth.env.user_var) document.getElementById('auth-user-var').value = cfg.auth.env.user_var;\n if (cfg.auth.env.role_var) document.getElementById('auth-role-var').value = cfg.auth.env.role_var;\n if (cfg.auth.env.org_unit_var) document.getElementById('auth-org-unit-var').value = cfg.auth.env.org_unit_var;\n }\n if (cfg.auth.local && cfg.auth.local.users_file) {\n document.getElementById('auth-users-file').value = cfg.auth.local.users_file;\n }\n }\n\n // HITL\n if (cfg.hitl) {\n if (cfg.hitl.default_mode) setChipValue('hitl-mode', cfg.hitl.default_mode);\n if (cfg.hitl.approval_channel) {\n document.getElementById('hitl-channel').value = cfg.hitl.approval_channel;\n document.getElementById('hitl-webhook-field').classList.toggle('hidden', cfg.hitl.approval_channel !== 'webhook');\n }\n if (cfg.hitl.timeout_seconds) document.getElementById('hitl-timeout').value = cfg.hitl.timeout_seconds;\n if (cfg.hitl.webhook && cfg.hitl.webhook.url) document.getElementById('hitl-webhook-url').value = cfg.hitl.webhook.url;\n }\n\n // DLP\n if (cfg.dlp) {\n document.getElementById('dlp-enabled').checked = cfg.dlp.enabled !== false;\n document.getElementById('dlp-options').classList.toggle('hidden', !cfg.dlp.enabled);\n if (cfg.dlp.mode) setChipValue('dlp-mode', cfg.dlp.mode);\n if (cfg.dlp.on_input) document.getElementById('dlp-on-input').value = cfg.dlp.on_input;\n if (cfg.dlp.on_output) document.getElementById('dlp-on-output').value = cfg.dlp.on_output;\n if (cfg.dlp.masking) {\n if (cfg.dlp.masking.strategy) document.getElementById('dlp-mask-strategy').value = cfg.dlp.masking.strategy;\n if (cfg.dlp.masking.show_chars != null) document.getElementById('dlp-mask-show').value = cfg.dlp.masking.show_chars;\n if (cfg.dlp.masking.placeholder) document.getElementById('dlp-mask-placeholder').value = cfg.dlp.masking.placeholder;\n }\n if (cfg.dlp.severity_threshold) setChipValue('dlp-severity', cfg.dlp.severity_threshold);\n if (cfg.dlp.built_in) {\n if (cfg.dlp.built_in.secrets != null) document.getElementById('dlp-secrets').checked = cfg.dlp.built_in.secrets;\n if (cfg.dlp.built_in.pii != null) document.getElementById('dlp-pii').checked = cfg.dlp.built_in.pii;\n }\n if (cfg.dlp.custom_patterns) {\n customPatterns = cfg.dlp.custom_patterns;\n renderCustomPatterns();\n }\n if (cfg.dlp.allowlist) {\n allowlistEntries = cfg.dlp.allowlist.map(e => e.pattern || e);\n renderAllowlist();\n }\n }\n\n // Audit\n if (cfg.audit && cfg.audit.sinks) {\n auditSinks = cfg.audit.sinks;\n renderAuditSinks();\n }\n\n updatePreview();\n}\n\n// ─── Roles ───────────────────────────────────────────────────────────\nfunction renderRoles() {\n const grid = document.getElementById('role-grid');\n grid.innerHTML = '';\n for (const [key, role] of Object.entries(PRESET_ROLES)) {\n const sel = selectedRoles[key];\n const card = document.createElement('div');\n card.className = 'role-card' + (sel ? ' selected' : '');\n card.dataset.role = key;\n card.onclick = () => { toggleRole(key); };\n card.innerHTML =\n '<div class=\"role-card-check\">&#10003;</div>' +\n '<div class=\"role-name\">' + role.label + '</div>' +\n '<div class=\"role-desc\">' + role.desc + '</div>' +\n '<div class=\"role-tags\">' +\n '<span class=\"role-tag\">' + role.execution_mode + '</span>' +\n '<span class=\"role-tag\">' + (role.token_budget_daily === -1 ? 'unlimited' : role.token_budget_daily.toLocaleString()) + ' budget</span>' +\n '</div>' +\n '<div class=\"role-details\">' +\n '<div class=\"field\"><label>Allowed Tools</label>' +\n '<input type=\"text\" value=\"' + role.allowed_tools.join(', ') + '\" onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'allowed_tools\\\\', this.value)\" onclick=\"event.stopPropagation()\">' +\n '</div>' +\n '<div class=\"field\"><label>Blocked Tools</label>' +\n '<input type=\"text\" value=\"' + role.blocked_tools.join(', ') + '\" onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'blocked_tools\\\\', this.value)\" onclick=\"event.stopPropagation()\">' +\n '</div>' +\n '<div class=\"field\"><label>Execution Mode</label>' +\n '<select onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'execution_mode\\\\', this.value)\" onclick=\"event.stopPropagation()\">' +\n '<option value=\"supervised\"' + (role.execution_mode === 'supervised' ? ' selected' : '') + '>Supervised</option>' +\n '<option value=\"autonomous\"' + (role.execution_mode === 'autonomous' ? ' selected' : '') + '>Autonomous</option>' +\n '<option value=\"dry_run\"' + (role.execution_mode === 'dry_run' ? ' selected' : '') + '>Dry Run</option>' +\n '</select>' +\n '</div>' +\n '<div class=\"field\"><label>Token Budget Daily</label>' +\n '<input type=\"number\" value=\"' + role.token_budget_daily + '\" onchange=\"updateRoleField(\\\\'' + key + '\\\\', \\\\'token_budget_daily\\\\', parseInt(this.value))\" onclick=\"event.stopPropagation()\">' +\n '</div>' +\n '</div>';\n grid.appendChild(card);\n }\n}\n\nfunction toggleRole(key) {\n selectedRoles[key] = !selectedRoles[key];\n renderRoles();\n updatePreview();\n}\n\nfunction updateRoleField(key, field, value) {\n if (field === 'allowed_tools' || field === 'blocked_tools') {\n PRESET_ROLES[key][field] = value.split(',').map(s => s.trim()).filter(Boolean);\n } else {\n PRESET_ROLES[key][field] = value;\n }\n updatePreview();\n}\n\n// ─── Section Toggle ──────────────────────────────────────────────────\nfunction toggleSection(id) {\n document.getElementById(id).classList.toggle('collapsed');\n}\n\n// ─── Chip Groups ─────────────────────────────────────────────────────\nfunction selectChip(el) {\n const group = el.parentElement;\n group.querySelectorAll('.chip').forEach(c => c.classList.remove('active'));\n el.classList.add('active');\n\n // Auth provider visibility\n if (group.id === 'auth-provider') {\n const val = el.dataset.value;\n document.getElementById('auth-env-fields').classList.toggle('hidden', val !== 'env');\n document.getElementById('auth-local-fields').classList.toggle('hidden', val !== 'local');\n }\n\n updatePreview();\n}\n\nfunction getChipValue(groupId) {\n const active = document.querySelector('#' + groupId + ' .chip.active');\n return active ? active.dataset.value : '';\n}\n\nfunction setChipValue(groupId, value) {\n const group = document.getElementById(groupId);\n if (!group) return;\n group.querySelectorAll('.chip').forEach(c => {\n c.classList.toggle('active', c.dataset.value === value);\n });\n}\n\n// ─── Custom Patterns ─────────────────────────────────────────────────\nfunction addCustomPattern() {\n customPatterns.push({ name: '', pattern: '', severity: 'medium', action: 'audit' });\n renderCustomPatterns();\n}\n\nfunction renderCustomPatterns() {\n const container = document.getElementById('dlp-custom-patterns');\n container.innerHTML = '';\n customPatterns.forEach((p, i) => {\n const div = document.createElement('div');\n div.className = 'pattern-item';\n div.innerHTML =\n '<input type=\"text\" placeholder=\"Name\" value=\"' + esc(p.name) + '\" onchange=\"customPatterns[' + i + '].name=this.value;updatePreview()\">' +\n '<input type=\"text\" placeholder=\"Regex pattern\" value=\"' + esc(p.pattern) + '\" onchange=\"customPatterns[' + i + '].pattern=this.value;updatePreview()\">' +\n '<select onchange=\"customPatterns[' + i + '].severity=this.value;updatePreview()\">' +\n '<option value=\"low\"' + (p.severity==='low'?' selected':'') + '>Low</option>' +\n '<option value=\"medium\"' + (p.severity==='medium'?' selected':'') + '>Medium</option>' +\n '<option value=\"high\"' + (p.severity==='high'?' selected':'') + '>High</option>' +\n '<option value=\"critical\"' + (p.severity==='critical'?' selected':'') + '>Critical</option>' +\n '</select>' +\n '<button class=\"btn-remove\" onclick=\"customPatterns.splice(' + i + ',1);renderCustomPatterns();updatePreview()\">&times;</button>';\n container.appendChild(div);\n });\n}\n\n// ─── Allowlist ───────────────────────────────────────────────────────\nfunction addAllowlistEntry() {\n allowlistEntries.push('');\n renderAllowlist();\n}\n\nfunction renderAllowlist() {\n const container = document.getElementById('dlp-allowlist');\n container.innerHTML = '';\n allowlistEntries.forEach((entry, i) => {\n const div = document.createElement('div');\n div.className = 'allowlist-item';\n div.innerHTML =\n '<input type=\"text\" placeholder=\"Pattern to allow\" value=\"' + esc(entry) + '\" onchange=\"allowlistEntries[' + i + ']=this.value;updatePreview()\">' +\n '<button class=\"btn-remove\" onclick=\"allowlistEntries.splice(' + i + ',1);renderAllowlist();updatePreview()\">&times;</button>';\n container.appendChild(div);\n });\n}\n\n// ─── Audit Sinks ─────────────────────────────────────────────────────\nfunction addAuditSink() {\n auditSinks.push({ type: 'jsonl', path: '' });\n renderAuditSinks();\n}\n\nfunction renderAuditSinks() {\n const container = document.getElementById('audit-sinks');\n container.innerHTML = '';\n auditSinks.forEach((sink, i) => {\n const div = document.createElement('div');\n div.className = 'sink-item';\n let inner = '<button class=\"btn-remove\" onclick=\"auditSinks.splice(' + i + ',1);renderAuditSinks();updatePreview()\">&times;</button>';\n inner += '<div class=\"field\"><label>Sink Type</label>' +\n '<select onchange=\"auditSinks[' + i + '].type=this.value;renderAuditSinks();updatePreview()\">' +\n '<option value=\"jsonl\"' + (sink.type==='jsonl'?' selected':'') + '>JSONL File</option>' +\n '<option value=\"webhook\"' + (sink.type==='webhook'?' selected':'') + '>Webhook</option>' +\n '<option value=\"postgres\"' + (sink.type==='postgres'?' selected':'') + '>PostgreSQL</option>' +\n '</select></div>';\n if (sink.type === 'jsonl') {\n inner += '<div class=\"field\"><label>File Path</label>' +\n '<input type=\"text\" value=\"' + esc(sink.path || '') + '\" placeholder=\"~/.pi/agent/audit.jsonl\" ' +\n 'onchange=\"auditSinks[' + i + '].path=this.value;updatePreview()\"></div>';\n } else if (sink.type === 'webhook') {\n inner += '<div class=\"field\"><label>Webhook URL</label>' +\n '<input type=\"text\" value=\"' + esc(sink.url || '') + '\" placeholder=\"https://...\" ' +\n 'onchange=\"auditSinks[' + i + '].url=this.value;updatePreview()\"></div>';\n } else if (sink.type === 'postgres') {\n inner += '<div class=\"field\"><label>Connection String</label>' +\n '<input type=\"text\" value=\"' + esc(sink.connection || '') + '\" placeholder=\"postgresql://...\" ' +\n 'onchange=\"auditSinks[' + i + '].connection=this.value;updatePreview()\"></div>';\n }\n div.innerHTML = inner;\n container.appendChild(div);\n });\n}\n\n// ─── Preview Tabs ────────────────────────────────────────────────────\nfunction switchTab(el) {\n document.querySelectorAll('.preview-tab').forEach(t => t.classList.remove('active'));\n el.classList.add('active');\n activePreviewTab = el.dataset.tab;\n updatePreview();\n}\n\n// ─── YAML Generator ──────────────────────────────────────────────────\nfunction toYaml(obj, indent) {\n indent = indent || 0;\n const pad = ' '.repeat(indent);\n let out = '';\n\n if (Array.isArray(obj)) {\n if (obj.length === 0) return ' []\\\\n';\n for (const item of obj) {\n if (typeof item === 'object' && item !== null && !Array.isArray(item)) {\n const keys = Object.keys(item);\n if (keys.length > 0) {\n out += pad + '- ' + keys[0] + ': ' + formatScalar(item[keys[0]]) + '\\\\n';\n for (let k = 1; k < keys.length; k++) {\n const val = item[keys[k]];\n if (typeof val === 'object' && val !== null) {\n out += pad + ' ' + keys[k] + ':\\\\n' + toYaml(val, indent + 2);\n } else {\n out += pad + ' ' + keys[k] + ': ' + formatScalar(val) + '\\\\n';\n }\n }\n }\n } else {\n out += pad + '- ' + formatScalar(item) + '\\\\n';\n }\n }\n return out;\n }\n\n if (typeof obj === 'object' && obj !== null) {\n for (const [key, val] of Object.entries(obj)) {\n if (val === undefined || val === null) continue;\n if (typeof val === 'object') {\n const yamlVal = toYaml(val, indent + 1);\n if (Array.isArray(val) && val.length === 0) {\n out += pad + key + ': []\\\\n';\n } else {\n out += pad + key + ':\\\\n' + yamlVal;\n }\n } else {\n out += pad + key + ': ' + formatScalar(val) + '\\\\n';\n }\n }\n return out;\n }\n\n return pad + formatScalar(obj) + '\\\\n';\n}\n\nfunction formatScalar(val) {\n if (typeof val === 'boolean') return val ? 'true' : 'false';\n if (typeof val === 'number') return String(val);\n if (typeof val === 'string') {\n if (val === '') return \"''\";\n if (val === 'true' || val === 'false' || !isNaN(val)) return \"'\" + val + \"'\";\n if (/[:#{}\\\\[\\\\],&*?|\\\\->!%@]/.test(val) || val.includes('\\\\\\\\')) return \"'\" + val.replace(/'/g, \"''\") + \"'\";\n return val;\n }\n return String(val);\n}\n\n// ─── Build Config Objects ────────────────────────────────────────────\nfunction buildGovernanceConfig() {\n const cfg = {};\n\n // Auth\n const authProvider = getChipValue('auth-provider');\n cfg.auth = { provider: authProvider };\n if (authProvider === 'env') {\n cfg.auth.env = {\n user_var: document.getElementById('auth-user-var').value || 'PI_GOV_USER',\n role_var: document.getElementById('auth-role-var').value || 'PI_GOV_ROLE',\n org_unit_var: document.getElementById('auth-org-unit-var').value || 'PI_GOV_ORG_UNIT'\n };\n } else if (authProvider === 'local') {\n cfg.auth.local = {\n users_file: document.getElementById('auth-users-file').value || './users.yaml'\n };\n }\n\n // Policy\n cfg.policy = {\n engine: 'yaml',\n yaml: { rules_file: './governance-rules.yaml' }\n };\n\n // HITL\n cfg.hitl = {\n default_mode: getChipValue('hitl-mode') || 'supervised',\n approval_channel: document.getElementById('hitl-channel').value,\n timeout_seconds: parseInt(document.getElementById('hitl-timeout').value) || 300\n };\n if (cfg.hitl.approval_channel === 'webhook') {\n const url = document.getElementById('hitl-webhook-url').value;\n if (url) cfg.hitl.webhook = { url: url };\n }\n\n // Audit\n cfg.audit = { sinks: auditSinks.filter(s => {\n if (s.type === 'jsonl') return s.path;\n if (s.type === 'webhook') return s.url;\n if (s.type === 'postgres') return s.connection;\n return false;\n }).map(s => {\n if (s.type === 'jsonl') return { type: 'jsonl', path: s.path };\n if (s.type === 'webhook') return { type: 'webhook', url: s.url };\n if (s.type === 'postgres') return { type: 'postgres', connection: s.connection };\n return s;\n })};\n\n // DLP\n if (document.getElementById('dlp-enabled').checked) {\n cfg.dlp = {\n enabled: true,\n mode: getChipValue('dlp-mode') || 'audit'\n };\n const onInput = document.getElementById('dlp-on-input').value;\n const onOutput = document.getElementById('dlp-on-output').value;\n if (onInput) cfg.dlp.on_input = onInput;\n if (onOutput) cfg.dlp.on_output = onOutput;\n cfg.dlp.masking = {\n strategy: document.getElementById('dlp-mask-strategy').value,\n show_chars: parseInt(document.getElementById('dlp-mask-show').value) || 4,\n placeholder: document.getElementById('dlp-mask-placeholder').value || '***'\n };\n cfg.dlp.severity_threshold = getChipValue('dlp-severity') || 'low';\n cfg.dlp.built_in = {\n secrets: document.getElementById('dlp-secrets').checked,\n pii: document.getElementById('dlp-pii').checked\n };\n const patterns = customPatterns.filter(p => p.name && p.pattern);\n if (patterns.length > 0) cfg.dlp.custom_patterns = patterns;\n const al = allowlistEntries.filter(Boolean);\n if (al.length > 0) cfg.dlp.allowlist = al.map(p => ({ pattern: p }));\n } else {\n cfg.dlp = { enabled: false };\n }\n\n return cfg;\n}\n\nfunction buildRulesConfig() {\n const roles = {};\n for (const [key, sel] of Object.entries(selectedRoles)) {\n if (!sel) continue;\n const r = PRESET_ROLES[key];\n const role = {\n allowed_tools: r.allowed_tools,\n blocked_tools: r.blocked_tools,\n prompt_template: r.prompt_template,\n execution_mode: r.execution_mode,\n human_approval: r.human_approval,\n token_budget_daily: r.token_budget_daily,\n allowed_paths: r.allowed_paths,\n blocked_paths: r.blocked_paths\n };\n if (r.bash_overrides) role.bash_overrides = r.bash_overrides;\n roles[key] = role;\n }\n return { roles: roles };\n}\n\n// ─── Update Preview ──────────────────────────────────────────────────\nfunction updatePreview() {\n const el = document.getElementById('preview-yaml');\n if (activePreviewTab === 'governance') {\n const cfg = buildGovernanceConfig();\n el.textContent = '# governance.yaml\\\\n# Generated by Pi Governance Setup Wizard\\\\n\\\\n' + toYaml(cfg);\n } else {\n const rules = buildRulesConfig();\n el.textContent = '# governance-rules.yaml\\\\n# Generated by Pi Governance Setup Wizard\\\\n\\\\n' + toYaml(rules);\n }\n}\n\n// ─── Save ────────────────────────────────────────────────────────────\nasync function handleSave() {\n const btn = document.getElementById('btn-save');\n const status = document.getElementById('save-status');\n btn.disabled = true;\n status.textContent = 'Saving...';\n status.className = 'save-status';\n\n try {\n const payload = {\n governance: buildGovernanceConfig(),\n rules: buildRulesConfig()\n };\n const res = await fetch('/api/save', {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(payload)\n });\n if (!res.ok) {\n const err = await res.text();\n throw new Error(err || 'Server error');\n }\n const result = await res.json();\n showToast('Configuration saved!', 'success');\n status.textContent = 'Saved: ' + (result.files || []).join(', ');\n status.className = 'save-status success';\n } catch (e) {\n showToast('Failed to save: ' + e.message, 'error');\n status.textContent = 'Error: ' + e.message;\n status.className = 'save-status error';\n } finally {\n btn.disabled = false;\n }\n}\n\nasync function handleClose() {\n try { await fetch('/api/close', { method: 'POST' }); } catch (e) { /* ignore */ }\n window.close();\n}\n\n// ─── Toast ───────────────────────────────────────────────────────────\nfunction showToast(msg, type) {\n const toast = document.getElementById('toast');\n toast.textContent = msg;\n toast.className = 'toast ' + type + ' visible';\n setTimeout(() => { toast.classList.remove('visible'); }, 3000);\n}\n\n// ─── Util ────────────────────────────────────────────────────────────\nfunction esc(s) {\n return String(s).replace(/&/g,'&amp;').replace(/\"/g,'&quot;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n}\n</script>\n</body>\n</html>`;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,QAAA,YAAA;AAiBA,aAAgB,WAAW,GAAa;AACtC,aAAQ,EAAe,WAAW;IACpC;AAFA,IAAAA,SAAA,aAAA;AAUA,aAAgB,0BACd,GAAS;AAET,aAAO,KAAK;IACd;AAJA,IAAAA,SAAA,4BAAA;AAqBA,aAAgB,WAAW,GAAa;AACtC,aAAQ,EAAe,WAAW;IACpC;AAFA,IAAAA,SAAA,aAAA;AAsCA,aAAgB,YAAY,GAAa;AACvC,aAAQ,EAAgB,YAAY;IACtC;AAFA,IAAAA,SAAA,cAAA;AAmBA,aAAgB,YAAY,GAAa;AACvC,aAAQ,EAAgB,SAAS;IACnC;AAFA,IAAAA,SAAA,cAAA;AAqBA,aAAgB,YAAY,GAAa;AACvC,aAAQ,EAAgB,eAAe;IACzC;AAFA,IAAAA,SAAA,cAAA;AAsBA,aAAgB,iBAAiB,GAAa;AAC5C,aAAQ,EAAqB,SAAS;IACxC;AAFA,IAAAA,SAAA,mBAAA;AAmBA,aAAgB,gBAAgB,GAAa;AAC3C,aAAQ,EAAoB,aAAa;IAC3C;AAFA,IAAAA,SAAA,kBAAA;AAiEA,aAAgB,gBAAgB,GAAa;AAC3C,aAAQ,EAAoB,qBAAqB;IACnD;AAFA,IAAAA,SAAA,kBAAA;AAUA,aAAgB,kBAAkB,GAAa;AAC7C,aAAQ,EAAsB,eAAe;IAC/C;AAFA,IAAAA,SAAA,oBAAA;AAUA,aAAgB,eAAe,GAAa;AAC1C,aAAQ,EAAmB,YAAY;IACzC;AAFA,IAAAA,SAAA,iBAAA;AAoCA,aAAS,aAAa,GAAU;AAC9B,UAAI,CAAC,UAAA,MAAM,CAAC;AAAG,eAAO;AACtB,YAAM,IAAI;AACV,aACE,WAAW,CAAC,KACZ,WAAW,CAAC,KACZ,YAAY,CAAC,KACb,YAAY,CAAC,KACb,YAAY,CAAC,KACb,iBAAiB,CAAC,KAClB,gBAAgB,CAAC,KACjB,gBAAgB,CAAC,KACjB,kBAAkB,CAAC,KACnB,eAAe,CAAC;IAEpB;AAQA,aAAgB,YAAY,GAAU;AACpC,UAAI,CAAC,UAAA,MAAM,CAAC;AAAG,eAAO;AACtB,aAAO,aAAa,EAAE,KAAK;IAC7B;AAHA,IAAAA,SAAA,cAAA;AAoHA,QAAM,sBAAsB;MAC1B,IAAI;MACJ,KAAK;MACL,IAAI;MACJ,KAAK;MACL,IAAI;MACJ,KAAK;;AASP,QAAM,YAAY;MAChB,KAAK;MACL,KAAK;MACL,QAAQ;MACR,KAAK;MACL,OAAO;MACP,KAAK;MACL,KAAK;MACL,QAAQ;MACR,IAAI;MACJ,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,KAAK;MACL,IAAI;MACJ,OAAO;MACP,KAAK;MACL,KAAK;MACL,OAAO;MACP,GAAG;;AA+BL,QAAY;AAAZ,KAAA,SAAYC,iBAAc;AACxB,MAAAA,gBAAAA,gBAAA,OAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,MAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,cAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,aAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,qBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,0BAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,oBAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,YAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,cAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,cAAA,IAAA,CAAA,IAAA;AACA,MAAAA,gBAAAA,gBAAA,QAAA,IAAA,EAAA,IAAA;IACF,GAZY,iBAAAD,SAAA,mBAAAA,SAAA,iBAAc,CAAA,EAAA;AAuI1B,aAAgB,mBAAmB,GAAU;AAG3C,aAAO,QAAO,MAAC,QAAD,MAAC,SAAA,SAAD,EAAG,UAAS,cAAc,WAAW,CAAC;IACtD;AAJA,IAAAA,SAAA,qBAAA;AAWA,aAAgB,WAAW,GAAU;AACnC,UAAI;AAGF,eAAO,OAAO,YAAY;eACnB,GAAG;AACV,YAAI,aAAa;AAAW,iBAAO;AACnC,cAAM;;IAEV;AATA,IAAAA,SAAA,aAAA;AAgBA,aAAgB,gBAAgB,GAAU;AACxC,UAAI;AAGF,eAAO,OAAO,iBAAiB;eACxB,GAAG;AACV,YAAI,aAAa;AAAW,iBAAO;AACnC,cAAM;;IAEV;AATA,IAAAA,SAAA,kBAAA;AAuBA,QAAa,OAAb,cAA0B,OAAM;;MAI9B,YAAY,KAAY;AACtB,cAAK;AACL,YAAI,KAAK;AACP,iBAAO,OAAO,MAAM,GAAG;;MAE3B;;AATF,IAAAA,SAAA,OAAA;AAyEA,QAAa,WAAb,MAAqB;MAOnB,YAAY,EAAE,MAAM,KAAK,IAAI,QAAQ,SAAQ,GAAwB;AACnE,aAAK,OAAO;AACZ,aAAK,MAAM;AACX,aAAK,SAAS;AACd,aAAK,KAAK;AACV,aAAK,WAAW;MAClB;;AAbF,IAAAA,SAAA,WAAA;;;;;AChvBA;AAAA,wHAAAE,UAAAC,SAAA;AAAA;AAEA,QAAM,EAAE,kBAAkB,IAAI,QAAQ,MAAW;AACjD,IAAAA,QAAO,UAAU;AAAA;AAAA;;;;;;;;;;ACHjB,QAAA,SAAA,QAAA,MAAA;AACA,QAAA,OAAA,QAAA,IAAA;AAEA,QAAA,WAAA;AACA,QAAA,UAAA;AAOA,QAAA,UAAA;AAUA,aAAgB,UAAU,KAAY;AACpC,UAAI,CAAC,cAAc,GAAG;AAAG,eAAO,CAAA;AAChC,YAAMC,aAAY,CAAC,GAAG;AACtB,eAAS,KAAK,SAAc;AAC1B,cAAM,SAAS,OAAO,eAAe,OAAO;AAC5C,YAAI,WAAW,SAAS;AAAW;AACnC,YAAI,CAAC,cAAc,MAAM;AAAG;AAC5B,QAAAA,WAAU,KAAK,MAAM;AACrB,aAAK,MAAM;MACb;AACA,WAAK,GAAG;AACR,aAAOA;IACT;AAZA,IAAAC,SAAA,YAAA;AAqBA,aAAgB,KAAK,GAAU;AAC7B,aAAO,OAAA,QAAQ,CAAC;IAClB;AAFA,IAAAA,SAAA,OAAA;AAUA,aAAgB,gBAAgB,OAAmB;AACjD,UAAI;AACF,YAAIA,SAAA,SAAS,KAAK;AAAG,gBAAM,IAAI,MAAK;AACpC,gBAAQ,MAAM;UACZ,KAAK,MAAM,MAAM,MAAM;AACrB,mBAAO,EAAE,MAAM,QAAA,eAAe,KAAI;UACpC,KAAK,MAAM,QAAQ,MAAM;AACvB,mBAAO,YAAY,MAAM,QAAQ,CAAC;UACpC,KAAK,MAAM,cAAc,MAAM;AAC7B,mBAAO,kBAAkB,MAAM,cAAc,CAAC;UAChD,KAAK,MAAM,cAAc,MAAM;AAC7B,mBAAO,kBAAkB,MAAM,cAAc,CAAC;UAChD,KAAK,MAAM,cAAc,MAAM;AAC7B,mBAAO,kBAAkB,MAAM,cAAc,CAAC;UAChD,KAAK,MAAM,0BAA0B,MAAM;AACzC,mBAAO,8BAA8B,MAAM,0BAA0B,CAAC;UACxE,KAAK,MAAM,oBAAoB,MAAM;AACnC,mBAAO,wBAAwB,MAAM,oBAAoB,CAAC;UAC5D,KAAK,MAAM,aAAa,MAAM;AAC5B,mBAAO,iBAAiB,MAAM,aAAa,CAAC;UAC9C,KAAK,MAAM,qBAAqB,MAAM;AACpC,mBAAO,yBAAyB,MAAM,qBAAqB,CAAC;UAC9D,KAAK,MAAM,OAAO,MAAM;AACtB,mBAAO,WAAW,MAAM,OAAO,CAAC;UAClC,KAAK,MAAM,YAAY,MAAM;AAC3B,mBAAO,gBAAgB,MAAM,YAAY,CAAC;UAC5C;AACE,kBAAM,IAAI,MAAK;;eAEZ,GAAG;AACV,YAAI,aAAa,SAAA;AAAY,gBAAM;AACnC,cAAM,IAAI,SAAA,uBAAuB,KAAK,UAAU,KAAK,CAAC;;IAE1D;AAjCA,IAAAA,SAAA,kBAAA;AAyCA,aAAS,YAAY,OAAc;AACjC,UAAI,CAAC,MAAM,KAAK;AAAG,cAAM,IAAI,MAAK;AAClC,YAAM,EAAE,SAAQ,IAAK;AACrB,UAAI,CAAC,kBAAkB,QAAQ;AAAG,cAAM,IAAI,MAAK;AACjD,aAAO,EAAE,MAAM,QAAA,eAAe,QAAQ,MAAM,EAAE,SAAQ,EAAE;IAC1D;AAQA,aAAS,kBAAkB,OAAc;AACvC,UAAI,CAAC,MAAM,KAAK;AAAG,cAAM,IAAI,MAAK;AAClC,YAAM,EAAE,aAAa,WAAU,IAAK;AACpC,UAAI,CAAC,cAAc,UAAU;AAAG,cAAM,IAAI,MAAK;AAC/C,YAAM,OAAO,MAAM,aAAa;AAChC,UAAI,CAAC,QAAA,YAAY,IAAI;AAAG,cAAM,IAAI,MAAK;AACvC,UAAI,CAAC,QAAA,iBAAiB,KAAK,KAAK;AAAG,cAAM,IAAI,MAAK;AAIlD,UAAI,KAAK,MAAM,KAAK;AAAQ,cAAM,IAAI,SAAA,YAAW;AACjD,YAAM,EAAE,MAAM,KAAK,MAAM,OAAM,IAAK,KAAK,MAAM;AAC/C,UAAI,CAACA,SAAA,SAAS,GAAG;AAAG,cAAM,IAAI,MAAK;AACnC,UAAI,CAAC,UAAU,QAAQ,QAAA,WAAW;AAAG,cAAM,IAAI,MAAK;AACpD,aAAO;QACL,MAAM,QAAA,eAAe;QACrB,MAAM,EAAE,QAAQ,YAAY,IAAG;;IAEnC;AAQA,aAAS,kBAAkB,OAAc;AACvC,UAAI,CAAC,MAAM,KAAK;AAAG,cAAM,IAAI,MAAK;AAClC,YAAM,EAAE,SAAS,QAAQ,SAAQ,IAAK;AACtC,UAAI,CAAC,cAAc,MAAM;AAAG,cAAM,IAAI,MAAK;AAC3C,UAAI,CAAC,QAAA,YAAY,QAAQ;AAAG,cAAM,IAAI,MAAK;AAC3C,aAAO,EAAE,MAAM,QAAA,eAAe,cAAc,MAAM,EAAE,QAAQ,SAAQ,EAAE;IACxE;AAQA,aAAS,kBAAkB,OAAc;AACvC,UAAI,CAAC,MAAM,KAAK;AAAG,cAAM,IAAI,MAAK;AAClC,YAAM,EAAE,MAAM,QAAQ,WAAW,SAAS,QAAQ,SAAQ,IAAK;AAC/D,UAAI,SAAS,UAAa,CAAC,UAAU,MAAM,QAAA,WAAW;AAAG,cAAM,IAAI,MAAK;AACxE,UAAI;AAAQ,cAAM,IAAI,SAAA,YAAW;AACjC,UAAI,CAACA,SAAA,SAAS,SAAS;AAAG,cAAM,IAAI,MAAK;AACzC,UAAI,CAAC,cAAc,MAAM;AAAG,cAAM,IAAI,MAAK;AAC3C,UAAI,CAAC,QAAA,YAAY,QAAQ;AAAG,cAAM,IAAI,MAAK;AAC3C,aAAO;QACL,MAAM,QAAA,eAAe;QACrB,MAAM,EAAE,MAAM,WAAW,QAAQ,SAAQ;;IAE7C;AAQA,aAAS,8BAA8B,OAAc;AACnD,UAAI,CAAC,MAAM,KAAK;AAAG,cAAM,IAAI,MAAK;AAClC,YAAM,EACJ,SAAS,QACT,aAAa,YACb,gBAAgB,SAChB,iBAAiB,SAAQ,IACvB;AACJ,UAAI,CAAC,cAAc,MAAM;AAAG,cAAM,IAAI,MAAK;AAC3C,UAAI,CAAC,cAAc,UAAU;AAAG,cAAM,IAAI,MAAK;AAC/C,UAAI,CAACA,SAAA,SAAS,OAAO;AAAG,cAAM,IAAI,MAAK;AACvC,UAAI,CAACA,SAAA,SAAS,QAAQ;AAAG,cAAM,IAAI,MAAK;AACxC,aAAO;QACL,MAAM,QAAA,eAAe;QACrB,MAAM,EAAE,QAAQ,YAAY,SAAS,SAAQ;;IAEjD;AAQA,aAAS,wBAAwB,OAAc;AAC7C,UAAI,CAAC,MAAM,KAAK;AAAG,cAAM,IAAI,MAAK;AAClC,YAAM,EACJ,SAAS,QACT,gBAAgB,SAChB,iBAAiB,SAAQ,IACvB;AACJ,UAAI,CAAC,cAAc,MAAM;AAAG,cAAM,IAAI,MAAK;AAC3C,UAAI,CAACA,SAAA,SAAS,OAAO;AAAG,cAAM,IAAI,MAAK;AACvC,UAAI,CAACA,SAAA,SAAS,QAAQ;AAAG,cAAM,IAAI,MAAK;AACxC,aAAO;QACL,MAAM,QAAA,eAAe;QACrB,MAAM,EAAE,QAAQ,SAAS,SAAQ;;IAErC;AAQA,aAAS,iBAAiB,OAAc;AACtC,UAAI,CAAC,MAAM,KAAK;AAAG,cAAM,IAAI,MAAK;AAClC,YAAM,EAAE,SAAS,QAAQ,UAAU,WAAW,IAAG,IAAK;AACtD,UAAI,CAAC,cAAc,MAAM;AAAG,cAAM,IAAI,MAAK;AAC3C,UAAI,CAAC,QAAA,YAAY,QAAQ;AAAG,cAAM,IAAI,MAAK;AAC3C,UAAI,CAACA,SAAA,SAAS,GAAG;AAAG,cAAM,IAAI,MAAK;AACnC,aAAO,EAAE,MAAM,QAAA,eAAe,aAAa,MAAM,EAAE,QAAQ,UAAU,IAAG,EAAE;IAC5E;AAQA,aAAS,yBAAyB,OAAc;AAC9C,UAAI,CAAC,MAAM,KAAK;AAAG,cAAM,IAAI,MAAK;AAClC,YAAM,EACJ,MACA,SAAS,QACT,UAAU,SACV,WAAW,SAAQ,IACjB;AACJ,UAAI,CAAC,cAAc,MAAM;AAAG,cAAM,IAAI,MAAK;AAC3C,UAAI,CAACA,SAAA,SAAS,OAAO;AAAG,cAAM,IAAI,MAAK;AACvC,UAAI,CAACA,SAAA,SAAS,QAAQ;AAAG,cAAM,IAAI,MAAK;AACxC,UAAI,CAAC,UAAU,MAAM,QAAA,WAAW;AAAG,cAAM,IAAI,MAAK;AAClD,aAAO;QACL,MAAM,QAAA,eAAe;QACrB,MAAM,EAAE,QAAQ,SAAS,MAAM,SAAQ;;IAE3C;AAQA,aAAS,gBAAgB,OAAc;AACrC,UAAI,CAAC,MAAM,KAAK;AAAG,cAAM,IAAI,MAAK;AAClC,YAAM,EAAE,SAAS,QAAQ,MAAM,SAAQ,IAAK;AAC5C,UAAI,CAAC,cAAc,MAAM;AAAG,cAAM,IAAI,MAAK;AAC3C,UAAI,CAAC,UAAU,MAAM,QAAA,WAAW,KAAK,KAAK,WAAW;AAAG,cAAM,IAAI,MAAK;AACvE,UAAI,CAACA,SAAA,SAAS,QAAQ;AAAG,cAAM,IAAI,MAAK;AACxC,UAAI,CAAC,QAAA,0BAA0B,QAAQ;AACrC,cAAM,IAAI,SAAA,WACR,mCAAmC,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,QAAQ,IAAI,KAC9D,KAAK,CAAC,CAAC,CACR,GAAG;AAER,aAAO,EAAE,MAAM,QAAA,eAAe,YAAY,MAAM,EAAE,MAAM,QAAQ,SAAQ,EAAE;IAC5E;AAQA,aAAS,WAAW,OAAc;AAChC,UAAI,CAAC,MAAM,KAAK;AAAG,cAAM,IAAI,MAAK;AAClC,YAAM,EAAE,QAAO,IAAK;AACpB,UAAI,CAACA,SAAA,SAAS,OAAO;AAAG,cAAM,IAAI,MAAK;AACvC,aAAO,EAAE,MAAM,QAAA,eAAe,OAAO,MAAM,EAAE,QAAO,EAAE;IACxD;AAeA,aAAgB,SAAS,MAAY;AACnC,aAAO,IAAI,QAAQ,CAAC,KAAK,QACvB,KAAA,SAAU,MAAM,EAAE,UAAU,OAAM,GAAI,CAAC,KAAc,aACnD,QAAQ,OAAO,IAAI,QAAQ,IAAI,IAAI,GAAG,CAAC,CACxC;IAEL;AANA,IAAAA,SAAA,WAAA;AASA,QAAI,QAAQ;AACZ,QAAI,UAAU;AACd,QAAI,SAAS;AACb,QACE,SAAO,KAAA,YAAO,QAAP,YAAO,SAAA,SAAP,QAAS,YAAM,QAAA,OAAA,SAAA,SAAA,GAAE,mBAAkB,cAC1C,QAAQ,OAAO,cAAa,KAAM,KAClC,SAAO,KAAA,YAAO,QAAP,YAAO,SAAA,SAAP,QAAS,YAAM,QAAA,OAAA,SAAA,SAAA,GAAE,mBAAkB,cAC1C,QAAQ,OAAO,cAAa,KAAM,GAClC;AACA,cAAQ;AACR,gBAAU;AACV,eAAS;;AAGE,IAAAA,SAAA,SAAS,UAAU,YAAY;AAG5C,aAAgB,WAAW,GAAQ;AACjC,cAAQ,MAAM,SAAS,EAAE,OAAO,KAAK;AACrC,cAAQ,MAAM,EAAE,OAAO;IACzB;AAHA,IAAAA,SAAA,aAAA;AAUA,aAAgB,cAAc,GAAU;AACtC,UAAI;AAGF,gBAAQ,UAAU,QAAQ,CAAA,GAAI,CAAC;AAC/B,eAAO;eACA,GAAG;AACV,eAAO;;IAEX;AATA,IAAAA,SAAA,gBAAA;AAgBA,aAAgB,MAAM,GAAU;AAC9B,aAAO,OAAO,MAAM,YAAY,MAAM;IACxC;AAFA,IAAAA,SAAA,QAAA;AAOA,aAAgB,kBAAkB,GAAY,GAAU;AACtD,aAAO,QAAQ,GAAG,CAAC;IACrB;AAFA,IAAAA,SAAA,oBAAA;AASO,QAAM,WAAW,CAAC,MAA4B,OAAO,MAAM;AAArD,IAAAA,SAAA,WAAQ;AAQrB,QAAM,oBAAoB,CAAC,MACzB,aAAa,OACb,CAAC,GAAG,EAAE,KAAI,CAAE,EAAE,MAAMA,SAAA,QAAQ,KAC5B,CAAC,GAAG,EAAE,OAAM,CAAE,EAAE,MAAM,QAAA,WAAW;AASnC,QAAM,YAAY,CAAI,GAAY,MAChC,MAAM,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;AAO/B,aAAS,cAAc,GAAU;AAC/B,aAAO,OAAO,cAAc,CAAC;IAC/B;;;;;;;;;;ACtYA,QAAA,YAAA;AAIA,QAAa,WAAb,cAA8B,MAAK;MACjC,YAAY,SAAgB;AAI1B,cAAM,OAAO;MACf;;AANF,IAAAC,SAAA,WAAA;AASA,QAAa,qBAAb,cAAwC,SAAQ;;AAAhD,IAAAA,SAAA,qBAAA;AAEA,QAAa,gBAAb,cAAmC,mBAAkB;MACnD,cAAA;AACE,cACE,iKAAiK;MAErK;;AALF,IAAAA,SAAA,gBAAA;AAQA,QAAa,iBAAb,cAAoC,mBAAkB;MACpD,cAAA;AACE,cACE,yJAAyJ;MAE7J;;AALF,IAAAA,SAAA,iBAAA;AASA,QAAa,aAAb,cAAgC,SAAQ;;AAAxC,IAAAA,SAAA,aAAA;AAEA,QAAa,2BAAb,cAA8C,WAAU;MACtD,YAAY,EACV,MACA,KACA,SAAQ,GAKT;AACC,cACE,sBAAsB,IAAI,IAAI,QAAQ,IAAI,UAAU,SAAS,IAAI,0BAA0B;MAE/F;;AAbF,IAAAA,SAAA,2BAAA;AAgBA,QAAa,qCAAb,cAAwD,WAAU;MAChE,YAAY,IAAU;AACpB,cACE,kCAAkC,EAAE,gDAAgD;MAExF;;AALF,IAAAA,SAAA,qCAAA;AAQA,QAAa,yBAAb,cAA4C,WAAU;MACpD,YAAY,QAAc;AACxB,cAAM,wBAAwB,MAAM,EAAE;MACxC;;AAHF,IAAAA,SAAA,yBAAA;AAMA,QAAa,wBAAb,cAA2C,WAAU;MACnD,YAAY,UAAmB,OAAa;AAC1C,cAAM,GAAG,KAAK,iBAAiB,UAAA,KAAK,QAAQ,CAAC,GAAG;MAClD;;AAHF,IAAAA,SAAA,wBAAA;AAMA,QAAa,mBAAb,cAAsC,WAAU;MAC9C,YAAY,UAAmB,OAAa;AAC1C,cAAM,GAAG,UAAA,KAAK,QAAQ,CAAC,IAAI,KAAK,oBAAoB;MACtD;;AAHF,IAAAA,SAAA,mBAAA;AAMA,QAAa,uBAAb,cAA0C,WAAU;MAClD,YAAY,MAAa;AACvB,cAAM,GAAG,UAAA,KAAK,IAAI,CAAC,kBAAkB;MACvC;;AAHF,IAAAA,SAAA,uBAAA;AAMA,QAAa,0BAAb,cAA6C,WAAU;MACrD,YAAY,MAAa;AACvB,cAAM,GAAG,UAAA,KAAK,IAAI,CAAC,uBAAuB;MAC5C;;AAHF,IAAAA,SAAA,0BAAA;AAMA,QAAa,yBAAb,cAA4C,WAAU;MACpD,YAAY,OAAa;AACvB,cAAM,wBAAwB,KAAK,EAAE;MACvC;;AAHF,IAAAA,SAAA,yBAAA;AAMA,QAAa,cAAb,cAAiC,WAAU;MACzC,cAAA;AACE,cAAM,+CAA+C;MACvD;;AAHF,IAAAA,SAAA,cAAA;AAMA,QAAa,0BAAb,cAA6C,WAAU;MACrD,YAAY,MAAY;AACtB,cAAM,2DAA2D,IAAI,EAAE;MACzE;;AAHF,IAAAA,SAAA,0BAAA;AAMA,QAAa,yBAAb,cAA4C,WAAU;MACpD,YAAY,MAAY;AACtB,cAAM,wBAAwB,IAAI,EAAE;MACtC;;AAHF,IAAAA,SAAA,yBAAA;AAMA,QAAa,yBAAb,cAA4C,WAAU;MACpD,YAAY,MAAY;AACtB,cAAM,uBAAuB,IAAI,GAAG;MACtC;;AAHF,IAAAA,SAAA,yBAAA;AAMA,QAAa,4BAAb,cAA+C,WAAU;MACvD,YAAY,IAAU;AACpB,cAAM,0BAA0B,EAAE,GAAG;MACvC;;AAHF,IAAAA,SAAA,4BAAA;AAMA,QAAa,kCAAb,cAAqD,WAAU;MAC7D,cAAA;AACE,cACE,2FAA2F;MAE/F;;AALF,IAAAA,SAAA,kCAAA;AAQA,QAAa,4BAAb,cAA+C,WAAU;MACvD,cAAA;AACE,cACE;;;;;mFAK6E;MAEjF;;AAVF,IAAAA,SAAA,4BAAA;;;;;;;;;;AC9HA,QAAK;AAAL,KAAA,SAAKC,cAAW;AACd,MAAAA,aAAA,OAAA,IAAA;AACA,MAAAA,aAAA,SAAA,IAAA;IACF,GAHK,gBAAA,cAAW,CAAA,EAAA;AAoBhB,aAAgB,eAAe,SAAgB;AAC7C,cAAQ,QAAQ,MAAM;QACpB,KAAK,YAAY;AACf,kBAAQ,IAAI,QAAQ,GAAG;AACvB;QACF,KAAK,YAAY;AACf,kBAAQ,KAAK,aAAa,QAAQ,GAAG;AACrC;;IAEN;AATA,IAAAC,SAAA,iBAAA;;;;;;;;;;ACnBA,QAAA,WAAA;AAKA,QAAa,WAAb,MAAqB;MAMnB,YACE,MACA,WACA,SACA,YAAkB;AAElB,aAAK,OAAO;AACZ,aAAK,YAAY;AACjB,aAAK,UAAU;AACf,aAAK,aAAa;MACpB;MAEA,YAAS;AACP,eAAO;UACL,UAAU;YACR,MAAM,KAAK;YACX,iBAAiB,KAAK;YACtB,UAAU,KAAK;YACf,aAAa,KAAK;;;MAGxB;;AA3BF,IAAAC,SAAA,WAAA;AAmEA,aAAgB,aAAa,GAAU;AACrC,aAAQ,EAAiB,aAAa;IACxC;AAFA,IAAAA,SAAA,eAAA;AAgBO,mBAAe,YACpB,aACA,MAA2B;AAE3B,YAAM,SAAS;QACb,OAAO,YAAY;QACnB,WAAW,CAAA;QACX,YAAY,CAAA;QACZ,OAAO,KAAK;;AAGd,iBAAW,CAAC,cAAc,eAAe,UAAU,KAAK,YAAY;AAClE,eAAO,UAAU,KAAK,EAAE,cAAc,eAAe,WAAU,CAAE;AAEnE,qBAAe,WACb,GACAC,OAA2B;AAE3B,cAAM,IAAI,OAAO,oBAAoB,CAAC,EAAE,CAAC;AACzC,gBAAQ,GAAG;UACT,KAAK,SAAS;AACZ,kBAAM,CAAC,UAAU,SAAS,IAAI,EAAE,CAAC;AACjC,mBAAO,EAAE,UAAU,UAAS;;UAE9B,KAAK;AACH,mBAAO,EAAE,OAAO,MAAMA,MAAK,KAAK,EAAE,OAAO,EAAE,CAAC,EAAe,CAAE,EAAC;UAChE,SAAS;AACP,kBAAM,IAAI,SAAA,SAAS,sBAAsB;;;MAG/C;AAEA,iBAAW,MAAM,YAAY,YAAY;AACvC,cAAM,YAA+B,CAAA;AACrC,mBAAW,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI;AAC3B,gBAAM,YAAY;YAChB,KAAK,MAAM,WAAW,GAAU,IAAI;YACpC,KAAK;YACL,KAAK,MAAM,WAAW,GAAU,IAAI;;AAEtC,oBAAU,KAAK,SAAS;;AAE1B,eAAO,WAAW,KAAK,SAAS;;AAGlC,aAAO;IACT;AA9CA,IAAAD,SAAA,cAAA;;;;;;;;;;;;;;;;;;;;;;;;AC/FA,QAAA,aAAA,QAAA,UAAA;AAIA,QAAA,YAAA;AACA,QAAA,WAAA;AAyBA,QAAA,aAAA;AACA,QAAA,UAAA;AAMA,QAAA,WAAA;AAEA,aAAS,sBAAmB;AAC1B,UAAI,QAAO,YAAO,QAAP,YAAO,SAAA,SAAP,QAAS,SAAQ;AAAa,eAAO,CAAC,QAAW,MAAS;AACrE,aAAO,CAAC,QAAQ,IAAI,UAAU,QAAQ,IAAI,SAAS;IACrD;AAOA,QAAa,QAAb,MAAkB;MAMhB,YACE,UACA,MACA,UAA+B;AARjC,wBAAA,IAAA,MAAA,MAAA;AACA,qBAAA,IAAA,MAAA,MAAA;AACA,oBAAA,IAAA,MAAA,MAAA;AAQE,iBAAS,kBAAkB,GAAG,oBAAmB,CAAE;AACnD,+BAAA,MAAI,iBAAa,UAAQ,GAAA;AACzB,+BAAA,MAAI,cAAU,oBAAI,IAAG,GAAE,GAAA;AACvB,+BAAA,MAAI,aAAS,MAAI,GAAA;AAEjB,YAAI;AAAU,qBAAW,CAAC,GAAG,CAAC,KAAK;AAAU,iBAAK,KAAK,GAAG,CAAC;AAE3D,aAAK,UAAU,KAAK,MAAK;MAC3B;;;;;;MAOQ,KAAK,MAAc,OAAc;AACvC,+BAAA,MAAI,iBAAA,GAAA,EAAW,KAAK,MAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,QAAQ,KAAK,CAAC;MACrD;;;;;;MAOQ,kBAAe;AACrB,mBAAS;AACP,gBAAM,MAAM,uBAAA,MAAI,iBAAA,GAAA,EAAW,YAAW;AACtC,cAAI,QAAQ;AAAW;AACvB,qBAAA,eAAe,GAAG;;MAEtB;;;;;;MAOQ,eAAe,QAAiB,QAAc;AACpD,+BAAA,MAAI,iBAAA,GAAA,EAAW,eAAe,QAAQ,MAAM;MAC9C;;;;;;;MAQQ,WAAW,QAAgB,QAAkB;AACnD,+BAAA,MAAI,iBAAA,GAAA,EAAW,WAAW,QAAQ,MAAM;MAC1C;;;;;;;MAQQ,MAAM,eAAe,QAAc;AACzC,cAAM,OAAO,uBAAA,MAAI,cAAA,GAAA,EAAQ,IAAI,MAAM;AACnC,YAAI,SAAS;AAAW,gBAAM,IAAI,MAAM,cAAc;AACtD,cAAM,EAAE,MAAM,MAAK,IAAK,MAAM,KAAK,KAAI;AACvC,YAAI;AAAM,iBAAO;AACjB,eAAO,uBAAA,MAAI,aAAA,GAAA,EAAO,QAAQ,KAAK;MACjC;;;;;;MAOQ,iBAAiB,SAAe;AACtC,+BAAA,MAAI,iBAAA,GAAA,EAAW,SAAS,OAAO;MACjC;;;;;;MAOQ,MAAM,eACZ,UACA,KAAa;AAMb,cAAM,MAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,QAAQ,IAAI,SAAS;AAC5C,YAAI,QAAQ;AAAW,gBAAM,IAAI,SAAA,uBAAuB,IAAI,SAAS;AAErE,cAAM,QAAQ,SAAS,IAAI,OAAO;AAClC,cAAM,YAA6B;UACjC,KAAK;YACH,UAAU,IAAI;YACd,WAAW,IAAI;;UAEjB,KAAK;UACL,KAAK,EAAE,MAAK;;AAEd,cAAM,SAAiB;UACrB,OAAO,IAAI;UACX,WAAW,CAAA;UACX,YAAY,CAAC,CAAC,SAAS,CAAC;UACxB,OAAO,uBAAA,MAAI,aAAA,GAAA,EAAO;;AAEpB,cAAM,QAAQ,uBAAA,MAAI,aAAA,GAAA,EAAO,QAAQ,WAAW,MAAM;AAClD,cAAM,UAAU,MAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,QAAQ,aAAa,KAAK;AAE3D,YAAI,IAAI,SAAS,OAAO;AACtB,cAAI,QAAQ,WAAW;AACrB,kBAAM,IAAI,MAAM,4BAA4B,QAAQ,MAAM,EAAE;AAC9D,iBAAO,QAAQ,CAAC;eACX;AACL,iBAAO;;MAEX;;;;;;MAOQ,MAAM,WACZ,MACA,QACA,UACA,MAAkB;;AAElB,YAAI;AACJ,YAAI;AACF,gBAAM,WAAY,MAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,KACjC,QAAQ;AAGV,cAAI,aAAa,QAAQ,aAAa;AACpC,kBAAM,KAAK,OAAO,SAAA,mBAAmB,SAAA,uBACnC,UACA,IAAI;AAGR,gBAAM,OAAM,MAAA,KAAA,uBAAA,MAAI,aAAA,GAAA,EAAO,QAAQ,SAAS,WAAW,OAAC,QAAA,OAAA,SAAA,SAAA,GAAE,YAAM,QAAA,OAAA,SAAA,SAAA,GAAE,IAAI,IAAI;AACtE,gBAAM,OAAO;AAEb,cAAI,eAAe,SAAA;AAAU,oBAAQ,MAAM,KAAK,eAAe,MAAM,GAAG;mBAC/D,MAAM;AACb,gBAAI,OAAO,KAAK,IAAI,MAAM;AACxB,oBAAM,IAAI,SAAA,iBAAiB,UAAU,IAAI;AAC3C,kBAAM,SAAS,MAAM,QAAQ,IAAI,KAAK,IAAI,OAAK,uBAAA,MAAI,aAAA,GAAA,EAAO,KAAK,CAAC,CAAC,CAAC;AAClE,oBAAS,KAAK,IAAI,EAAuB,GAAG,MAAM;qBACzC,EAAE,QAAQ;AACnB,kBAAM,IAAI,SAAA,sBAAsB,UAAU,IAAI;;AAC3C,oBAAQ,KAAK,IAAI;iBACf,GAAG;AACV,cACE,aAAa,aACb,aAAa,SAAA,oBACb,aAAa,SAAA,uBACb;AACA,iBAAK,iBAAiB,EAAE,OAAO;iBAC1B;AACL,kBAAM;;;AAKR,kBAAQ,MAAM,QAAQ,QAAQ,KAAK;AACnC,kBAAQ,uBAAA,MAAI,aAAA,GAAA,EAAO,QAAQ,KAAK;AAChC,eAAK,WAAW,QAAQ,KAAK;;MAEjC;MAEQ,MAAM,mBAAmB,QAAgB,UAAmB;AAClE,YAAI,CAAC,uBAAA,MAAI,cAAA,GAAA,EAAQ,IAAI,MAAM,GAAG;AAC5B,gBAAM,QAAQ,MAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,KAAK,QAAQ;AAC5C,gBAAM,aAAa,mBAAe;AAChC,gBAAI,QAAA,mBAAmB,KAAK,GAAG;AAE7B,qBAAO;uBACE,QAAA,gBAAgB,KAAK,GAAG;AAEjC,+BAAiBE,WAAU,OAAO;AAChC,sBAAMA;;uBAEC,QAAA,WAAW,KAAK,GAAG;AAC5B,yBAAWA,WAAU,OAAO;AAC1B,sBAAMA;;mBAEH;AAEL,oBAAM,IAAI,SAAA,qBAAqB,OAAO,KAAK;;UAE/C,GAAE;AACF,iCAAA,MAAI,cAAA,GAAA,EAAQ,IAAI,QAAQ,SAAS;;AAEnC,cAAM,SAAS,MAAM,KAAK,eAAe,MAAM;AAC/C,aAAK,WAAW,QAAQ,MAAM;MAChC;;;;;;MAOQ,OAAO,QAAK;AAClB,YAAI;AACF,iBAAO,MAAM;AACX,kBAAM,YAAY,uBAAA,MAAI,iBAAA,GAAA,EAAW,UAAS;AAC1C,iBAAK,gBAAe;AACpB,kBAAM,QAAQ,UAAA,gBAAgB,SAAS;AACvC,oBAAQ,MAAM,MAAM;cAClB,KAAK,QAAA,eAAe;AAClB;cACF,KAAK,QAAA,eAAe,QAAQ;AAC1B,sBAAM,EAAE,SAAQ,IAAK,MAAM;AAC3B,sBAAM,cAAoC,oBAAI,IAAG;AACjD,2BAAW,CAAC,GAAG,CAAC,KAAK,UAAU;AAC7B,8BAAY,IAAI,GAAG,MAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,KAAK,CAAC,CAAC;;AAE7C,sBAAM;AACN;;cAEF,KAAK,QAAA,eAAe,cAAc;AAChC,sBAAM,EAAE,YAAY,KAAK,OAAM,IAAK,MAAM;AAC1C,oBAAI,uBAAA,MAAI,aAAA,GAAA,EAAO,YAAY,UAAU;AACnC,wBAAM,IAAI,SAAA,mCAAmC,UAAU;AACzD,sBAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,aAAa,KAAK,QAAQ,UAAU;AACrD;;cAEF,KAAK,QAAA,eAAe,cAAc;AAChC,sBAAM,EAAE,WAAW,QAAQ,UAAU,KAAI,IACvC,MAAM;AACR,sBAAM,KAAK,WAAW,WAAW,QAAQ,UAAU,IAAI;AACvD;;cAEF,KAAK,QAAA,eAAe,0BAA0B;AAC5C,sBAAM,EAAE,YAAY,SAAS,UAAU,OAAM,IAC3C,MAAM;AACR,sBAAM,SAAS,MAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,iBAC9B,YACA,SACA,QAAQ;AAEV,qBAAK,eAAe,QAAQ,MAAM;AAClC;;cAEF,KAAK,QAAA,eAAe,oBAAoB;AACtC,sBAAM,EAAE,SAAS,UAAU,OAAM,IAC/B,MAAM;AACR,sBAAM,SAAS,uBAAA,MAAI,aAAA,GAAA,EAAO,WAAW,SAAS,QAAQ;AACtD,qBAAK,eAAe,QAAQ,MAAM;AAClC;;cAEF,KAAK,QAAA,eAAe,YAAY;AAC9B,sBAAM,EAAE,MAAM,QAAQ,SAAQ,IAAK,MAAM;AACzC,sBAAM,SAAS,MAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,WAC9B,UACA,KAAK,CAAC,GACN,KAAK,CAAC,CAAC;AAET,qBAAK,eAAe,QAAQ,MAAM;AAClC;;cAEF,KAAK,QAAA,eAAe,aAAa;AAC/B,sBAAM,EAAE,UAAU,KAAK,OAAM,IAAK,MAAM;AACxC,sBAAM,SAAS,MAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,IAAI,UAAU,GAAG;AACjD,qBAAK,eAAe,QAAQ,MAAM;AAClC;;cAEF,KAAK,QAAA,eAAe,qBAAqB;AACvC,sBAAM,EAAE,SAAS,MAAM,UAAU,OAAM,IACrC,MAAM;AACR,sBAAM,SAAS,MAAM,uBAAA,MAAI,aAAA,GAAA,EAAO,YAC9B,SACA,MACA,QAAQ;AAEV,qBAAK,eAAe,QAAQ,MAAM;AAClC;;cAEF,KAAK,QAAA,eAAe,cAAc;AAChC,sBAAM,EAAE,QAAQ,SAAQ,IAAK,MAAM;AACnC,sBAAM,KAAK,mBAAmB,QAAQ,QAAQ;AAC9C;;cAEF,KAAK,QAAA,eAAe,OAAO;AACzB,oBAAI,OAAO,WAAA,oBAAoB,YAAY;AACzC,0BAAQ,KAAK,2CAA2C;AACxD;;AAEF,sBAAM,EAAE,QAAO,IAAK,MAAM;AAC1B,oBAAI;AAAS,0BAAQ,IAAI,OAAO;AAChC,2BAAA,gBAAgB;kBACd,OAAO,QAAQ;kBACf,QAAQ,QAAQ;kBAChB,QAAQ;kBACR,SAAS;iBACV,EAAE,GAAG,QAAQ,CAAC,SAAgB;AAC7B,wBAAM,UAAU,KAAK,KAAI,EAAG,QAAQ,OAAO,EAAE;AAC7C,wBAAM,UAAU,uBAAA,MAAI,aAAA,GAAA,EAAO,QAAQ,OAAO;AAC1C,yCAAA,MAAI,iBAAA,GAAA,EAAW,aAAa,KAAK,UAAU,OAAO,CAAC;AACnD,uBAAK,gBAAe;gBACtB,CAAC;AACD;;cAEF,SAAS;AACP,sBAAM,IAAW,MAAM;AACvB,uBAAO;;;;;AAKb,iCAAA,MAAI,iBAAA,GAAA,EAAW,KAAI;;MAEvB;;AApUF,IAAAC,SAAA,QAAA;;;;;;;;;;;AC9CA,QAAa,aAAb,MAAuB;MAIrB,YAAY,UAAyB,MAAe;AAClD,aAAK,WAAW;AAChB,aAAK,OAAO;MACd;;AAPF,IAAAC,SAAA,aAAA;;;;;;;;;;ACAA,QAAa,UAAb,MAAoB;MAIlB,YAAY,EAAE,KAAK,OAAM,GAAkC;AACzD,aAAK,MAAM;AACX,aAAK,SAAS;MAChB;;AAPF,IAAAC,SAAA,UAAA;;;;;;;;;;ACFA,QAAa,YAAb,MAAsB;MAIpB,YAAY,MAAc,MAAe;AACvC,aAAK,OAAO;AACZ,aAAK,OAAO;MACd;;AAPF,IAAAC,SAAA,YAAA;;;;;;;;;;ACAA,QAAa,WAAb,MAAqB;MAGnB,YAAY,MAAY;AACtB,aAAK,OAAO;MACd;;AALF,IAAAC,SAAA,WAAA;;;;;;;;;;;;;;;;;;;;;;;;ACDA,QAAA,WAAA;AASA,QAAA,YAAA;AAEA,QAAA,eAAA;AACA,QAAA,YAAA;AACA,QAAA,cAAA;AACA,QAAA,aAAA;AAWA,QAAA,UAAA;AACA,QAAA,UAAA;AAaA,QAAA,WAAA;AAOA,QAAa,OAAb,MAAa,MAAI;;MA4Bf,YAAY,UAAoB,MAAc;AA3B9C,uBAAA,IAAA,MAAA,MAAA;AACA,wBAAA,IAAA,MAAA,MAAA;AAGA,mBAAA,IAAA,MAAA,MAAA;AAwBE,+BAAA,MAAI,gBAAa,UAAQ,GAAA;AACzB,+BAAA,MAAI,YAAS,MAAI,GAAA;AACjB,+BAAA,MAAI,iBAAc,oBAAI,IAAG,GAAE,GAAA;AAC3B,aAAK,QAAQ,oBAAI,IAAG;AAEpB,aAAK,UAAU;UACb,YAAY,MAAK;AACf,kBAAM,IAAI,SAAA,gCAA+B;UAC3C;UACA,cAAc,MAAK;AACjB,kBAAM,IAAI,SAAA,gCAA+B;UAC3C;;MAEJ;;;;;;;MA3BA,OAAO,MACL,MACA,MAAuB;AAEvB,cAAM,UAAU,EAAE,GAAG,uBAAA,MAAI,YAAA,GAAA,GAAQ,GAAG,KAAI;AACxC,cAAM,QAAQ,IAAI,MAAsB,uBAAA,MAAI,gBAAA,GAAA,GAAY,OAAO;AAC/D,+BAAA,OAAK,iBAAc,IAAI,IAAI,uBAAA,MAAI,iBAAA,GAAA,CAAW,GAAC,GAAA;AAC3C,cAAM,QAAQ,IAAI,IAAI,KAAK,KAAK;AAChC,cAAM,UAAU,KAAK;AACrB,eAAO;MACT;;;;;;;;MA0BQ,SAAS,MAAY;AAC3B,cAAM,MAAM,KAAK,MAAM,IAAI,IAAI;AAC/B,YAAI,QAAQ;AAAW,gBAAM,IAAI,SAAA,uBAAuB,IAAI;AAC5D,eAAO,IAAI;MACb;;;;;;MAOA,QAA4B,KAAmB;AAC7C,YAAI,QAAQ;AAAW,iBAAO;AAC9B,eAAO,KAAK,MAAM,IAAI,GAAG;MAC3B;;;;;MAMQ,CAAC,oBAAiB;AACxB,mBAAW,CAAC,MAAM,GAAG,KAAK,KAAK;AAAO,cAAI,UAAA,SAAS,IAAI;AAAG,kBAAM;MAClE;MAEA,iBAAc;;AACZ,cAAM,aAAkB,CAAA;AACxB,mBAAW,CAAC,KAAK,QAAQ,KAAK,KAAK,OAAO;AACxC,cAAI,UAAA,SAAS,GAAG,GAAG;AACjB,kBAAM,SAAS,SAAS;AACxB,kBAAM,aAAkB,CAAA;AACxB,uBAAW,CAAC,GAAG,CAAC,KAAK,QAAQ;AAC3B,kBAAI,aAAa,SAAA,UAAU;AACzB,2BAAW,CAAC,IAAI,EAAE,UAAS;qBACtB;AACL,sBAAM,aAAY,KAAA,KAAK,QAAQ,CAAC,OAAC,QAAA,OAAA,SAAA,SAAA,GAAE;AACnC,oBAAI,cAAc;AAChB,wBAAM,IAAI,SAAA,uBAAuB,EAAE,IAAI;AACzC,2BAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAS,EAAE;;;AAGzC,uBAAW,GAAG,IAAI;;;AAGtB,eAAO;MACT;;;;;;;;;MAUA,WAAW,KAAY,QAAoB;AACzC,iBAAS,SAAS,SAAS,CAAA;AAG3B,YAAI,SAAS,OAAO,UAAU,CAAA;AAC9B,YAAI,EAAE,kBAAkB;AAAM,mBAAS,IAAI,IAAI,OAAO,QAAQ,MAAM,CAAC;AAErE,cAAM,EAAE,KAAI,IAAK;AACjB,YAAI,CAAC,UAAA,cAAc,GAAG;AAAG,gBAAM,IAAI,SAAA,wBAAwB,GAAG;AAC9D,cAAM,UAAkB,OAAO,OAAO,IAAI;AAC1C,cAAM,WAAW,KAAK,MAAM,IAAI,OAAO;AACvC,YAAI,UAAU;AACZ,gBAAM,IAAI,SAAA,yBAAyB;YACjC,MAAM;YACN;YACA,UAAU,SAAS;WACpB;;AAGH,iBAAS,aAAa,UAAiC;AACrD,iBAAO,oBAAoB,QAAO,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,iBAAgB;QAC9D;AAEA,cAAM,WAAW,IAAI,QAAA,SAAS;UAC5B,MAAM;UACN;UACA;UACA,IAAI,KAAK,cAAc,GAAG;UAC1B,UAAU,OAAO,YAAY;SAC9B;AACD,aAAK,MAAM,IAAI,KAAK,QAAQ;AAC5B,aAAK,MAAM,IAAI,SAAS,QAAQ;AAChC,eAAO;MACT;;;;;;;;MASA,YAAS;AACP,eAAO,MAAM,KAAK,uBAAA,MAAI,iBAAA,GAAA,EAAY,OAAM,CAAE;MAC5C;;;;;;MAOA,YAAY,IAAU;AACpB,eAAO,uBAAA,MAAI,iBAAA,GAAA,EAAY,IAAI,EAAE;MAC/B;;;;;;;;MASA,YAAY,IAAU;AACpB,YAAI,CAAC,KAAK,YAAY,EAAE;AAAG,gBAAM,IAAI,SAAA,0BAA0B,EAAE;AACjE,eAAO,uBAAA,MAAI,iBAAA,GAAA,EAAY,IAAI,EAAE;MAC/B;;;;;;;MAQA,cAAc,UAAmB,IAAW;AAC1C,YAAI,aAAa;AACjB,YAAI,eAAe,QAAW;AAC5B,uBAAa,uBAAA,MAAI,gBAAA,GAAA,EAAW,MAAK;;AAEnC,+BAAA,MAAI,iBAAA,GAAA,EAAY,IAAI,YAAY,QAAQ;AACxC,eAAO;MACT;;;;MAKA,eAAY;AAKV,mBAAW,OAAO,KAAK,kBAAiB,GAAI;AAE1C,gBAAM,MAAM,UAAA,UAAU,IAAI,GAAG,EAC1B,IAAI,OAAI;AAAA,gBAAA;AAAC,oBAAA,KAAA,KAAK,QAAQ,CAAU,OAAC,QAAA,OAAA,SAAA,SAAA,GAAE;UAAE,CAAA,EACrC,OAAO,QAAM,OAAO,MAAS;AAGhC,iCAAA,MAAI,gBAAA,GAAA,EAAW,YAAY,IAAI,MAAM,GAAG;;MAE5C;;;;;;MAOA,MAAM,aACJ,MACA,QACA,IAAU;AAEV,cAAM,MAAM,KAAK,SAAS,IAAI;AAC9B,cAAM,OAAO,MAAM,QAAQ,IAAI,OAAO,IAAI,OAAK,KAAK,KAAK,CAAC,CAAC,CAAC;AAC5D,cAAM,WAAW,IAAI,IAAI,GAAG,IAAI;AAChC,aAAK,cAAc,UAAU,EAAE;MACjC;;;;;;;MAQA,MAAM,iBACJ,IACA,MACA,OAAa;AAEb,YAAI,WAAW,KAAK,YAAY,EAAE;AAClC,mBAAW,oBAAoB,UAAU,MAAM,WAAW;AAC1D,cAAM,MAAM,UAAA,UAAU,aAAQ,QAAR,aAAQ,SAAA,SAAR,SAAU,WAAW;AAC3C,cAAM,YAAY,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC;AACjD,cAAM,aAAa,IAAI,QAAQ,KAAK,SAAS,KAAK,CAAC;AACnD,YAAI,cAAc,IAAI;AACpB,iBAAO;mBACE,eAAe,IAAI;AAC5B,iBAAO;eACF;AACL,iBAAO,YAAY;;MAEvB;;;;;;MAOA,WAAW,MAAc,OAAa;AACpC,cAAM,UAAU,KAAK,SAAS,IAAI;AAClC,cAAM,WAAW,KAAK,SAAS,KAAK;AACpC,cAAM,MAAM,UAAA,UAAU,OAAO;AAC7B,eAAO,IAAI,SAAS,QAAQ;MAC9B;;;;;;MAOA,MAAM,IAAI,eAA0B,MAAY;AAC9C,cAAM,WAAW,MAAM,KAAK,KAAK,aAAa;AAE9C,cAAM,WAAW,KAAK,MAAM,IAAI,IAAI;AACpC,YAAI,aAAa,QAAW;AAC1B,iBAAO,SAAS,SAAS,QAAQ;eAC5B;AACL,gBAAM,MAAM,KAAK,SAAS,IAAI;AAC9B,gBAAM,OAAO;AACb,iBAAO,gBAAgB,QAAO,SAAI,QAAJ,SAAI,SAAA,SAAJ,KAAM,iBAAgB;;MAExD;;;;;;;MAQA,MAAM,YACJ,SACA,MACA,UAAgB;;AAEhB,YAAI,MAAM;AACV,mBAAW,OAAO,MAAM;AACtB,gBAAM,QAAQ,MAAM,KAAK,KAAK,GAAG;AACjC,cAAI,CAAC,UAAA,SAAS,KAAK;AAAG,kBAAM,IAAI,MAAM,qBAAqB,UAAA,KAAK,KAAK,CAAC,EAAE;AACxE,gBAAM,WAAW,KAAK,MAAM,IAAI,GAAG;AACnC,cAAI,aAAa;AAAW,mBAAO;AAEnC,cAAI,YAAY,SAAS,OAAO,IAAI,KAAK;AACzC,cAAI,cAAc;AAAW,mBAAO;AAEpC,cAAI,qBAAqB,SAAA,UAAU;AACjC,oBAAQ,UAAU,MAAM;cACtB,KAAK,OAAO;AACV,sBAAM,YAAW,KAAA,KAAK,QAAQ,UAAU,SAAS,OAAC,QAAA,OAAA,SAAA,SAAA,GAAE;AACpD,oBAAI,aAAa;AACf,wBAAM,IAAI,SAAA,uBAAuB,UAAU,SAAS;AACtD,4BAAY;AACZ;;cAEF,KAAK;AACH,4BAAY;AACZ;;;AAIN,gBAAM,UAAU,KAAK,QAAQ,SAAS;AACtC,cAAI,YAAY;AAAW,mBAAO;AAClC,gBAAM,QAAQ;;AAEhB,eAAO,aAAa;MACtB;;;;;;MAOA,MAAM,WACJ,IACA,UACA,WAAoB;AAIpB,cAAM,OAAQ,MAAM,KAAK,KAAK,QAAQ;AACtC,cAAM,QAAS,MAAM,KAAK,KAAK,SAAS;AACxC,gBAAQ,IAAI;UACV,KAAK;AACH,mBAAO,uBAAA,MAAI,YAAA,GAAA,EAAO,WAAW,MAAM,KAAK;UAC1C,KAAK;AACH,mBAAO,QAAQ;UACjB,KAAK;AACH,mBAAO,OAAO;UAChB,KAAK;AACH,mBAAO,QAAQ;UACjB,KAAK;AACH,mBAAO,OAAO;UAChB,KAAK;AACH,mBAAO,CAAC,uBAAA,MAAI,YAAA,GAAA,EAAO,WAAW,MAAM,KAAK;UAC3C,SAAS;AACP,kBAAM,IAAW;AACjB,mBAAO;;;MAGb;;;;;;;MAQA,QAAQ,GAAU;;AAChB,gBAAQ,MAAM;UACZ,KAAK,OAAO,MAAM;AAChB,mBAAO,EAAE,OAAO,EAAE,SAAS,EAAY,EAAE;UAC3C,KAAK,OAAO,UAAU,CAAC;AACrB,mBAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAW,EAAE,EAAE;UACtD,KAAK,OAAO,MAAM;AAChB,gBAAI,MAAM,UAAU;AAClB,kBAAI;uBACK,MAAM,WAAW;AAC1B,kBAAI;uBACK,OAAO,MAAM,CAAC,GAAG;AAC1B,kBAAI;;AAEN,mBAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAW,EAAE,EAAE;UACpD,KAAK,UAAA,SAAS,CAAC;AACb,mBAAO,EAAE,OAAO,EAAE,QAAQ,EAAW,EAAE;UACzC,KAAK,MAAM,QAAQ,CAAC,GAAG;AACrB,kBAAM,gBAAiB,EAAqB,IAAI,OAAK,KAAK,QAAQ,CAAC,CAAC;AACpE,mBAAO,EAAE,OAAO,EAAE,MAAM,cAAa,EAAE;;UAEzC,KAAK,aAAa,YAAA,WAAW;AAC3B,kBAAM,EAAE,MAAM,KAAI,IAAK;AACvB,kBAAM,YAAY,KAAK,IAAI,OAAK,KAAK,QAAQ,CAAC,CAAC;AAC/C,mBAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,UAAS,EAAE,EAAE;;UAErD,KAAK,aAAa,WAAA;AAChB,mBAAO,EAAE,OAAO,EAAE,UAAW,EAAe,KAAI,EAAE;UACpD,KAAK,aAAa,aAAA,YAAY;AAC5B,kBAAM,EAAE,UAAU,KAAI,IAAK;AAC3B,kBAAM,YAAY,KAAK,IAAI,OAAK,KAAK,QAAQ,CAAC,CAAC;AAC/C,mBAAO,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,MAAM,UAAS,EAAE,EAAE;;UAE/D,KAAK,aAAa,UAAA,SAAS;AACzB,kBAAM,EAAE,KAAK,OAAM,IAAK;AACxB,gBAAI,OAAO,KAAK,QAAQ,MAAM,EAAE;AAEhC,gBAAI,CAAC,QAAA,YAAY,IAAI;AAAG,qBAAO,EAAE,YAAY,EAAE,QAAQ,oBAAI,IAAG,EAAE,EAAE;AAClE,gBAAI,QAAQ;AAAW,qBAAO,EAAE,OAAO,EAAE,SAAS,KAAI,EAAE;AACxD,mBAAO;cACL,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,QAAQ,KAAK,WAAU,EAAE,EAAE;;;UAGpE,KAAK,aAAa,QAAA,MAAM;AACtB,kBAAM,SAAS,IAAI,IACjB,OAAO,QAAQ,CAAS,EAAE,IAAI,CAAC,CAAC,GAAGC,EAAC,MAAM,CAAC,GAAG,KAAK,QAAQA,EAAC,CAAC,CAAC,CAAC;AAEjE,mBAAO,EAAE,OAAO,EAAE,YAAY,EAAE,OAAM,EAAE,EAAE;;UAE5C,SAAS;AACP,gBAAI,aAAiC;AACrC,gBAAI,UAA8B;AAIlC,kBAAM,SAAS;AACf,gBAAI,YAAgC;AAEpC,gBAAI,UAAA,cAAc,CAAC,GAAG;AACpB,4BAAa,KAAA,KAAK,QAAQ,CAAC,OAAC,QAAA,OAAA,SAAA,SAAA,GAAE;AAC9B,wBAAU;AACV,2BAAY,KAAA,KAAK,QAAQ,CAAC,OAAC,QAAA,OAAA,SAAA,SAAA,GAAE;mBACxB;AACL,oBAAM,gBAAmC,WAAM,QAAN,WAAM,SAAA,SAAN,OAAQ;AAGjD,kBAAI,kBAAkB,UAAa,KAAK,MAAM,IAAI,aAAa,GAAG;AAChE,2BAAU,KAAA,KAAK,QAAQ,aAAa,OAAC,QAAA,OAAA,SAAA,SAAA,GAAE;AACvC,6BAAY,KAAA,KAAK,QAAQ,aAAa,OAAC,QAAA,OAAA,SAAA,SAAA,GAAE;;;AAM7C,gBAAI,cAAc,UAAa,CAAC,KAAK,MAAM,IAAI,SAAS,GAAG;AACzD,0BAAY;;AAGd,kBAAM,cAAc,KAAK,cAAc,GAAG,UAAU;AACpD,mBAAO;cACL,OAAO;gBACL,kBAAkB;kBAChB;kBACA,aAAa;kBACb,MAAM,UAAA,KAAK,CAAC;kBACZ,YAAY;kBACZ,UAAU;;;;;;MAMtB;;;;;;MAOA,MAAM,KAAK,GAAY;AACrB,cAAM,IAAI,EAAE;AACZ,YAAI,QAAA,WAAW,CAAC,GAAG;AACjB,iBAAO,EAAE;mBACA,QAAA,WAAW,CAAC,GAAG;AACxB,cAAI,WAAW,EAAE,QAAQ;AACvB,kBAAM,IAAI,EAAE,OAAO;AACnB,oBAAQ,GAAG;cACT,KAAK;AACH,uBAAO;cACT,KAAK;AACH,uBAAO;cACT,KAAK;AACH,uBAAO;cACT;AACE,oBAAI,OAAO,MAAM;AACf,wBAAM,IAAI,SAAA,WACR,4CAA4C,IAAI,GAAG;AAEvD,uBAAO;;iBAEN;AACL,mBAAO,EAAE,OAAO;;mBAET,QAAA,YAAY,CAAC,GAAG;AACzB,iBAAO,EAAE;mBACA,QAAA,YAAY,CAAC,GAAG;AACzB,iBAAO,MAAM,QAAQ,IAAI,EAAE,KAAK,IAAI,OAAM,OAAM,MAAM,KAAK,KAAK,EAAE,CAAC,CAAC;mBAC3D,QAAA,YAAY,CAAC,GAAG;AACzB,gBAAM,YAAY,CAAC,CAAC,GAAGA,EAAC,MAEnB,KAAK,KAAKA,EAAC,EAAE,KAAK,CAAAA,OAAK,CAAC,GAAGA,EAAC,CAAC;AAClC,gBAAM,EAAE,OAAM,IAAK,EAAE;AACrB,gBAAM,UAAU,MAAM,QAAQ,IAAI,CAAC,GAAG,OAAO,QAAO,CAAE,EAAE,IAAI,SAAS,CAAC;AACtE,iBAAO,QAAQ,OAAO,CAAC,MAAY,CAAC,GAAGA,EAAC,MAAK;AAC3C,iBAAK,CAAC,IAAIA;AACV,mBAAO;UACT,GAAG,IAAI,QAAA,KAAK,CAAA,CAAE,CAAC;mBACN,QAAA,gBAAgB,CAAC,GAAG;AAC7B,gBAAM,IAAI,KAAK,YAAY,EAAE,iBAAiB,WAAW;AACzD,iBAAO,aAAa,UAAU,MAAM,IAAI;mBAC/B,QAAA,iBAAiB,CAAC,GAAG;AAC9B,gBAAM,EAAE,MAAM,KAAI,IAAK,EAAE;AACzB,gBAAM,SAAS,MAAM,QAAQ,IAAI,KAAK,IAAI,OAAK,KAAK,KAAK,CAAC,CAAC,CAAC;AAC5D,iBAAO,IAAI,YAAA,UAAU,MAAM,MAAM;mBACxB,QAAA,gBAAgB,CAAC,GAAG;AAC7B,iBAAO,IAAI,WAAA,SAAS,EAAE,QAAQ;mBACrB,QAAA,kBAAkB,CAAC,GAAG;AAC/B,cAAI,CAAC,uBAAA,MAAI,YAAA,GAAA,EAAO;AAAkB,kBAAM,IAAI,SAAA,0BAAyB;AAErE,gBAAM,EAAE,UAAU,MAAM,SAAQ,IAAK,EAAE;AACvC,gBAAM,OAAO,MAAM,QAAQ,IAAI,SAAS,IAAI,OAAK,KAAK,KAAK,CAAC,CAAC,CAAC;AAC9D,iBAAO,IAAI,aAAA,WAAW,UAAU,IAAI;mBAC3B,QAAA,eAAe,CAAC,GAAG;AAC5B,cAAI,gBAAgB,EAAE,SAAS;AAC7B,kBAAM,SAAU,MAAM,KAAK,KAAK,EAAE,OAAO,EAAE,QAAO,CAAE;AACpD,mBAAO,IAAI,UAAA,QAAQ,EAAE,OAAM,CAAE;iBACxB;AACL,kBAAM,EACJ,KACA,QAAQ,EAAE,OAAM,EAAE,IAChB,EAAE,QAAQ;AACd,kBAAM,OAAO,MAAM,KAAK,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,OAAM,EAAE,EAAE,CAAE;AAClE,mBAAO,IAAI,UAAA,QAAQ,EAAE,KAAK,QAAQ,KAAY,CAAE;;eAE7C;AACL,gBAAM,IAAW;AACjB,iBAAO;;MAEX;;AAhhBF,IAAAC,SAAA,OAAA;;;;;;AC9CA;AAAA,8EAAAC,UAAAC,SAAA;AAAA;AAAA,QAAI,UAAU,CAAC;AACf,YAAQ,0BAA0B,IAAIA,QAAO;AAC7C,QAAI;AACJ,QAAM,EAAE,aAAa,YAAY,IAAI,QAAQ,MAAM;AAEnD,QAAM,OAAO,IAAI,MAAM,EAAE,EAAE,KAAK,MAAS;AAEzC,SAAK,KAAK,QAAW,MAAM,MAAM,KAAK;AAEtC,aAAS,UAAU,KAAK;AAAE,aAAO,KAAK,GAAG;AAAA,IAAG;AAE5C,QAAI,kBAAkB;AAEtB,QAAI,qBAAqB,IAAI,WAAW;AAExC,aAAS,kBAAkB;AACvB,UAAI,mBAAmB,eAAe,GAAG;AACrC,6BAAqB,IAAI,WAAW,KAAK,OAAO,MAAM;AAAA,MAC1D;AACA,aAAO;AAAA,IACX;AAEA,QAAI,oBAAoB,IAAI,YAAY,OAAO;AAE/C,QAAM,eAAgB,OAAO,kBAAkB,eAAe,aACxD,SAAU,KAAK,MAAM;AACvB,aAAO,kBAAkB,WAAW,KAAK,IAAI;AAAA,IACjD,IACM,SAAU,KAAK,MAAM;AACvB,YAAM,MAAM,kBAAkB,OAAO,GAAG;AACxC,WAAK,IAAI,GAAG;AACZ,aAAO;AAAA,QACH,MAAM,IAAI;AAAA,QACV,SAAS,IAAI;AAAA,MACjB;AAAA,IACJ;AAEA,aAAS,kBAAkB,KAAK,QAAQ,SAAS;AAE7C,UAAI,YAAY,QAAW;AACvB,cAAM,MAAM,kBAAkB,OAAO,GAAG;AACxC,cAAMC,OAAM,OAAO,IAAI,MAAM;AAC7B,wBAAgB,EAAE,SAASA,MAAKA,OAAM,IAAI,MAAM,EAAE,IAAI,GAAG;AACzD,0BAAkB,IAAI;AACtB,eAAOA;AAAA,MACX;AAEA,UAAI,MAAM,IAAI;AACd,UAAI,MAAM,OAAO,GAAG;AAEpB,YAAM,MAAM,gBAAgB;AAE5B,UAAI,SAAS;AAEb,aAAO,SAAS,KAAK,UAAU;AAC3B,cAAM,OAAO,IAAI,WAAW,MAAM;AAClC,YAAI,OAAO,IAAM;AACjB,YAAI,MAAM,MAAM,IAAI;AAAA,MACxB;AAEA,UAAI,WAAW,KAAK;AAChB,YAAI,WAAW,GAAG;AACd,gBAAM,IAAI,MAAM,MAAM;AAAA,QAC1B;AACA,cAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,IAAI,SAAS,CAAC;AACrD,cAAM,OAAO,gBAAgB,EAAE,SAAS,MAAM,QAAQ,MAAM,GAAG;AAC/D,cAAM,MAAM,aAAa,KAAK,IAAI;AAElC,kBAAU,IAAI;AAAA,MAClB;AAEA,wBAAkB;AAClB,aAAO;AAAA,IACX;AAEA,aAAS,WAAW,GAAG;AACnB,aAAO,MAAM,UAAa,MAAM;AAAA,IACpC;AAEA,QAAI,qBAAqB,IAAI,WAAW;AAExC,aAAS,kBAAkB;AACvB,UAAI,mBAAmB,eAAe,GAAG;AACrC,6BAAqB,IAAI,WAAW,KAAK,OAAO,MAAM;AAAA,MAC1D;AACA,aAAO;AAAA,IACX;AAEA,QAAI,YAAY,KAAK;AAErB,aAAS,WAAW,KAAK;AACrB,UAAI,MAAM,GAAI;AACd,WAAK,GAAG,IAAI;AACZ,kBAAY;AAAA,IAChB;AAEA,aAAS,WAAW,KAAK;AACrB,YAAM,MAAM,UAAU,GAAG;AACzB,iBAAW,GAAG;AACd,aAAO;AAAA,IACX;AAEA,QAAI,uBAAuB,IAAI,aAAa;AAE5C,aAAS,oBAAoB;AACzB,UAAI,qBAAqB,eAAe,GAAG;AACvC,+BAAuB,IAAI,aAAa,KAAK,OAAO,MAAM;AAAA,MAC9D;AACA,aAAO;AAAA,IACX;AAEA,aAAS,cAAc,KAAK;AACxB,UAAI,cAAc,KAAK,OAAQ,MAAK,KAAK,KAAK,SAAS,CAAC;AACxD,YAAM,MAAM;AACZ,kBAAY,KAAK,GAAG;AAEpB,WAAK,GAAG,IAAI;AACZ,aAAO;AAAA,IACX;AAEA,QAAI,oBAAoB,IAAI,YAAY,SAAS,EAAE,WAAW,MAAM,OAAO,KAAK,CAAC;AAEjF,sBAAkB,OAAO;AAEzB,aAAS,mBAAmB,KAAK,KAAK;AAClC,aAAO,kBAAkB,OAAO,gBAAgB,EAAE,SAAS,KAAK,MAAM,GAAG,CAAC;AAAA,IAC9E;AAEA,aAAS,YAAY,KAAK;AAEtB,YAAM,OAAO,OAAO;AACpB,UAAI,QAAQ,YAAY,QAAQ,aAAa,OAAO,MAAM;AACtD,eAAQ,GAAG,GAAG;AAAA,MAClB;AACA,UAAI,QAAQ,UAAU;AAClB,eAAO,IAAI,GAAG;AAAA,MAClB;AACA,UAAI,QAAQ,UAAU;AAClB,cAAM,cAAc,IAAI;AACxB,YAAI,eAAe,MAAM;AACrB,iBAAO;AAAA,QACX,OAAO;AACH,iBAAO,UAAU,WAAW;AAAA,QAChC;AAAA,MACJ;AACA,UAAI,QAAQ,YAAY;AACpB,cAAM,OAAO,IAAI;AACjB,YAAI,OAAO,QAAQ,YAAY,KAAK,SAAS,GAAG;AAC5C,iBAAO,YAAY,IAAI;AAAA,QAC3B,OAAO;AACH,iBAAO;AAAA,QACX;AAAA,MACJ;AAEA,UAAI,MAAM,QAAQ,GAAG,GAAG;AACpB,cAAM,SAAS,IAAI;AACnB,YAAI,QAAQ;AACZ,YAAI,SAAS,GAAG;AACZ,mBAAS,YAAY,IAAI,CAAC,CAAC;AAAA,QAC/B;AACA,iBAAQ,IAAI,GAAG,IAAI,QAAQ,KAAK;AAC5B,mBAAS,OAAO,YAAY,IAAI,CAAC,CAAC;AAAA,QACtC;AACA,iBAAS;AACT,eAAO;AAAA,MACX;AAEA,YAAM,iBAAiB,sBAAsB,KAAK,SAAS,KAAK,GAAG,CAAC;AACpE,UAAI;AACJ,UAAI,eAAe,SAAS,GAAG;AAC3B,oBAAY,eAAe,CAAC;AAAA,MAChC,OAAO;AAEH,eAAO,SAAS,KAAK,GAAG;AAAA,MAC5B;AACA,UAAI,aAAa,UAAU;AAIvB,YAAI;AACA,iBAAO,YAAY,KAAK,UAAU,GAAG,IAAI;AAAA,QAC7C,SAAS,GAAG;AACR,iBAAO;AAAA,QACX;AAAA,MACJ;AAEA,UAAI,eAAe,OAAO;AACtB,eAAO,GAAG,IAAI,IAAI,KAAK,IAAI,OAAO;AAAA,EAAK,IAAI,KAAK;AAAA,MACpD;AAEA,aAAO;AAAA,IACX;AAEA,aAAS,YAAY,GAAG,MAAM;AAC1B,UAAI;AACA,eAAO,EAAE,MAAM,MAAM,IAAI;AAAA,MAC7B,SAAS,GAAG;AACR,aAAK,qBAAqB,cAAc,CAAC,CAAC;AAAA,MAC9C;AAAA,IACJ;AAGA,QAAM,QAAN,MAAM,OAAM;AAAA,MAER,OAAO,OAAO,KAAK;AACf,cAAM,MAAM,OAAO,OAAO,OAAM,SAAS;AACzC,YAAI,MAAM;AAEV,eAAO;AAAA,MACX;AAAA,MAEA,qBAAqB;AACjB,cAAM,MAAM,KAAK;AACjB,aAAK,MAAM;AAEX,eAAO;AAAA,MACX;AAAA,MAEA,OAAO;AACH,cAAM,MAAM,KAAK,mBAAmB;AACpC,aAAK,iBAAiB,GAAG;AAAA,MAC7B;AAAA;AAAA;AAAA,MAGA,cAAc;AACV,cAAM,MAAM,KAAK,eAAe;AAChC,eAAO,OAAM,OAAO,GAAG;AAAA,MAC3B;AAAA;AAAA;AAAA;AAAA,MAIA,KAAK,SAAS;AACV,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,eAAK,WAAW,QAAQ,KAAK,KAAK,cAAc,OAAO,CAAC;AACxD,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AAAA,QACJ,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA,MAGA,aAAa;AACT,aAAK,iBAAiB,KAAK,GAAG;AAAA,MAClC;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,iBAAiB,MAAM,MAAM;AACzB,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,gBAAM,OAAO,kBAAkB,MAAM,KAAK,mBAAmB,KAAK,kBAAkB;AACpF,gBAAM,OAAO;AACb,eAAK,uBAAuB,QAAQ,KAAK,KAAK,MAAM,MAAM,cAAc,IAAI,CAAC;AAC7E,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AAAA,QACJ,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAIA,kBAAkB;AACd,cAAM,MAAM,KAAK,sBAAsB,KAAK,GAAG;AAC/C,eAAO,QAAQ,IAAI,SAAY,MAAM,OAAO,GAAG;AAAA,MACnD;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,gBAAgB,KAAK;AACjB,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,gBAAM,OAAO,kBAAkB,KAAK,KAAK,mBAAmB,KAAK,kBAAkB;AACnF,gBAAM,OAAO;AACb,eAAK,sBAAsB,QAAQ,KAAK,KAAK,MAAM,IAAI;AACvD,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AACA,iBAAO,MAAM,OAAO,EAAE;AAAA,QAC1B,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,iBAAiB,MAAM;AACnB,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,eAAK,uBAAuB,QAAQ,KAAK,KAAK,cAAc,IAAI,CAAC;AACjE,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AACA,iBAAO,MAAM,OAAO,EAAE;AAAA,QAC1B,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAIA,QAAQ;AACJ,cAAM,MAAM,KAAK,YAAY,KAAK,GAAG;AACrC,eAAO;AAAA,MACX;AAAA;AAAA;AAAA;AAAA,MAIA,cAAc;AACV,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,eAAK,kBAAkB,QAAQ,KAAK,GAAG;AACvC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AACA,iBAAO,WAAW,EAAE;AAAA,QACxB,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,YAAY,MAAM,KAAK;AACnB,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,gBAAM,OAAO,kBAAkB,MAAM,KAAK,mBAAmB,KAAK,kBAAkB;AACpF,gBAAM,OAAO;AACb,eAAK,kBAAkB,QAAQ,KAAK,KAAK,MAAM,MAAM,cAAc,GAAG,CAAC;AACvE,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AAAA,QACJ,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAQA,gBAAgB,OAAO,iBAAiB,UAAU,WAAW;AACzD,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,gBAAM,OAAO,kBAAkB,UAAU,KAAK,mBAAmB,KAAK,kBAAkB;AACxF,gBAAM,OAAO;AACb,gBAAM,OAAO,kBAAkB,WAAW,KAAK,mBAAmB,KAAK,kBAAkB;AACzF,gBAAM,OAAO;AACb,eAAK,sBAAsB,QAAQ,KAAK,KAAK,cAAc,KAAK,GAAG,cAAc,eAAe,GAAG,MAAM,MAAM,MAAM,IAAI;AACzH,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AACA,iBAAO,WAAW,EAAE;AAAA,QACxB,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAIA,wBAAwB,yBAAyB;AAC7C,aAAK,8BAA8B,KAAK,KAAK,uBAAuB;AAAA,MACxE;AAAA,IACJ;AACA,IAAAD,QAAO,QAAQ,QAAQ;AAGvB,QAAM,QAAN,MAAM,OAAM;AAAA,MAER,OAAO,OAAO,KAAK;AACf,cAAM,MAAM,OAAO,OAAO,OAAM,SAAS;AACzC,YAAI,MAAM;AAEV,eAAO;AAAA,MACX;AAAA,MAEA,qBAAqB;AACjB,cAAM,MAAM,KAAK;AACjB,aAAK,MAAM;AAEX,eAAO;AAAA,MACX;AAAA,MAEA,OAAO;AACH,cAAM,MAAM,KAAK,mBAAmB;AACpC,aAAK,iBAAiB,GAAG;AAAA,MAC7B;AAAA;AAAA;AAAA;AAAA,MAIA,YAAY;AACR,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,eAAK,gBAAgB,QAAQ,KAAK,GAAG;AACrC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AACA,iBAAO,WAAW,EAAE;AAAA,QACxB,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,WAAW,SAAS,MAAM;AACtB,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,eAAK,iBAAiB,QAAQ,KAAK,KAAK,SAAS,cAAc,IAAI,CAAC;AACpE,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AAAA,QACJ,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,eAAe,SAAS,QAAQ;AAC5B,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,eAAK,qBAAqB,QAAQ,KAAK,KAAK,SAAS,MAAM;AAC3D,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AAAA,QACJ,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAIA,aAAa,SAAS;AAClB,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,gBAAM,OAAO,kBAAkB,SAAS,KAAK,mBAAmB,KAAK,kBAAkB;AACvF,gBAAM,OAAO;AACb,eAAK,mBAAmB,QAAQ,KAAK,KAAK,MAAM,IAAI;AACpD,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AAAA,QACJ,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAIA,SAAS,KAAK;AACV,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,gBAAM,OAAO,kBAAkB,KAAK,KAAK,mBAAmB,KAAK,kBAAkB;AACnF,gBAAM,OAAO;AACb,eAAK,eAAe,QAAQ,KAAK,KAAK,MAAM,IAAI;AAChD,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AAAA,QACJ,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAIA,cAAc;AACV,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,eAAK,kBAAkB,QAAQ,KAAK,GAAG;AACvC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AACA,iBAAO,WAAW,EAAE;AAAA,QACxB,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA,MAIA,SAAS;AACL,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,eAAK,aAAa,QAAQ,KAAK,GAAG;AAClC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,iBAAO,mBAAmB,IAAI,EAAE;AAAA,QACpC,UAAE;AACE,eAAK,gCAAgC,EAAE;AACvC,eAAK,gBAAgB,IAAI,EAAE;AAAA,QAC/B;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,KAAK,MAAM,MAAM;AACb,YAAI;AACA,gBAAM,SAAS,KAAK,gCAAgC,GAAG;AACvD,gBAAM,OAAO,kBAAkB,MAAM,KAAK,mBAAmB,KAAK,kBAAkB;AACpF,gBAAM,OAAO;AACb,eAAK,WAAW,QAAQ,KAAK,KAAK,MAAM,MAAM,cAAc,IAAI,CAAC;AACjE,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,KAAK,gBAAgB,EAAE,SAAS,IAAI,CAAC;AACzC,cAAI,IAAI;AACJ,kBAAM,WAAW,EAAE;AAAA,UACvB;AAAA,QACJ,UAAE;AACE,eAAK,gCAAgC,EAAE;AAAA,QAC3C;AAAA,MACJ;AAAA;AAAA;AAAA;AAAA;AAAA,MAKA,kBAAkB,UAAU,WAAW;AACnC,YAAI,OAAO,WAAW,QAAQ,IAAI,IAAI,kBAAkB,UAAU,KAAK,mBAAmB,KAAK,kBAAkB;AACjH,YAAI,OAAO;AACX,YAAI,OAAO,WAAW,SAAS,IAAI,IAAI,kBAAkB,WAAW,KAAK,mBAAmB,KAAK,kBAAkB;AACnH,YAAI,OAAO;AACX,aAAK,wBAAwB,KAAK,KAAK,MAAM,MAAM,MAAM,IAAI;AAAA,MACjE;AAAA,IACJ;AACA,IAAAA,QAAO,QAAQ,QAAQ;AAEvB,IAAAA,QAAO,QAAQ,wBAAwB,SAAS,MAAM,MAAM;AACxD,YAAM,MAAM,UAAU,IAAI;AAC1B,YAAM,MAAM,OAAO,QAAS,WAAW,MAAM;AAC7C,UAAI,OAAO,WAAW,GAAG,IAAI,IAAI,kBAAkB,KAAK,KAAK,mBAAmB,KAAK,kBAAkB;AACvG,UAAI,OAAO;AACX,sBAAgB,EAAE,OAAO,IAAI,CAAC,IAAI;AAClC,sBAAgB,EAAE,OAAO,IAAI,CAAC,IAAI;AAAA,IACtC;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,SAAS,MAAM;AACvD,iBAAW,IAAI;AAAA,IACnB;AAEA,IAAAA,QAAO,QAAQ,yBAAyB,SAAS,MAAM;AACnD,YAAM,IAAI,UAAU,IAAI;AACxB,YAAM,MAAM,OAAO,MAAO,YAAa,IAAI,IAAI,IAAK;AACpD,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,wBAAwB,SAAS,MAAM,MAAM;AACxD,YAAM,MAAM,UAAU,IAAI;AAC1B,YAAM,MAAM,OAAO,QAAS,WAAW,MAAM;AAC7C,wBAAkB,EAAE,OAAO,IAAI,CAAC,IAAI,WAAW,GAAG,IAAI,IAAI;AAC1D,sBAAgB,EAAE,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,GAAG;AAAA,IACrD;AAEA,IAAAA,QAAO,QAAQ,uBAAuB,SAAS,MAAM;AACjD,YAAM,MAAM,UAAU,IAAI;AAC1B,YAAM,MAAM,OAAO,QAAS,YAAY,QAAQ;AAChD,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,uBAAuB,SAAS,MAAM;AACjD,YAAM,MAAM,OAAO,UAAU,IAAI,MAAO;AACxC,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,qBAAqB,SAAS,MAAM;AAC/C,YAAM,MAAM,UAAU,IAAI,MAAM;AAChC,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,0BAA0B,SAAS,MAAM;AACpD,YAAM,MAAM,UAAU,IAAI,MAAM;AAChC,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,wBAAwB,SAAS,MAAM;AAClD,YAAM,MAAM;AACZ,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,8BAA8B,SAAS,MAAM;AACxD,YAAM,MAAM,UAAU,IAAI;AAC1B,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,wBAAwB,SAAS,MAAM,MAAM;AACxD,YAAM,MAAM,mBAAmB,MAAM,IAAI;AACzC,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,gCAAgC,SAAS,MAAM,MAAM;AAChE,YAAM,MAAM,OAAO,UAAU,IAAI,CAAC;AAClC,YAAM,OAAO,kBAAkB,KAAK,KAAK,mBAAmB,KAAK,kBAAkB;AACnF,YAAM,OAAO;AACb,sBAAgB,EAAE,OAAO,IAAI,CAAC,IAAI;AAClC,sBAAgB,EAAE,OAAO,IAAI,CAAC,IAAI;AAAA,IACtC;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,SAAS,MAAM,MAAM;AAC7D,YAAM,MAAM,UAAU,IAAI,EAAE,WAAW,IAAI,CAAC;AAC5C,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,SAAS,MAAM,MAAM,MAAM;AACnE,gBAAU,IAAI,EAAE,WAAW,IAAI,CAAC,IAAI,WAAW,IAAI;AAAA,IACvD;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,WAAW;AACnD,YAAM,MAAM,IAAI,MAAM;AACtB,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,+BAA+B,SAAS,MAAM,MAAM;AAC/D,YAAM,MAAM,UAAU,IAAI,EAAE;AAC5B,YAAM,OAAO,kBAAkB,KAAK,KAAK,mBAAmB,KAAK,kBAAkB;AACnF,YAAM,OAAO;AACb,sBAAgB,EAAE,OAAO,IAAI,CAAC,IAAI;AAClC,sBAAgB,EAAE,OAAO,IAAI,CAAC,IAAI;AAAA,IACtC;AAEA,IAAAA,QAAO,QAAQ,+BAA+B,SAAS,MAAM,MAAM;AAC/D,UAAI;AACA,gBAAQ,MAAM,mBAAmB,MAAM,IAAI,CAAC;AAAA,MAChD,UAAE;AACE,aAAK,gBAAgB,MAAM,IAAI;AAAA,MACnC;AAAA,IACJ;AAEA,IAAAA,QAAO,QAAQ,+BAA+B,SAAS,MAAM,MAAM;AAC/D,cAAQ,MAAM,mBAAmB,MAAM,IAAI,CAAC;AAAA,IAChD;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,SAAS,MAAM,MAAM;AAC7D,YAAM,MAAM,UAAU,IAAI,EAAE,SAAS,CAAC;AACtC,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,gCAAgC,SAAS,MAAM;AAC1D,YAAM,MAAM,UAAU,IAAI,EAAE;AAC5B,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,WAAW;AACnD,YAAM,MAAM,IAAI,MAAM;AACtB,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,yBAAyB,SAAS,MAAM;AACnD,YAAM,MAAM,OAAO,UAAU,IAAI,MAAO;AACxC,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,WAAW;AACnD,YAAM,MAAM,oBAAI,IAAI;AACpB,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,8BAA8B,SAAS,MAAM;AACxD,YAAM,MAAM,UAAU,IAAI,EAAE;AAC5B,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,8BAA8B,WAAW;AAAE,aAAO,YAAY,SAAU,MAAM;AACzF,cAAM,MAAM,UAAU,IAAI,EAAE,KAAK;AACjC,eAAO,cAAc,GAAG;AAAA,MAC5B,GAAG,SAAS;AAAA,IAAE;AAEd,IAAAA,QAAO,QAAQ,8BAA8B,SAAS,MAAM;AACxD,YAAM,MAAM,UAAU,IAAI,EAAE;AAC5B,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,+BAA+B,SAAS,MAAM;AACzD,YAAM,MAAM,UAAU,IAAI,EAAE;AAC5B,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,kCAAkC,WAAW;AACxD,YAAM,MAAM,OAAO;AACnB,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,WAAW;AAAE,aAAO,YAAY,SAAU,MAAM,MAAM;AAC9F,cAAM,MAAM,QAAQ,IAAI,UAAU,IAAI,GAAG,UAAU,IAAI,CAAC;AACxD,eAAO,cAAc,GAAG;AAAA,MAC5B,GAAG,SAAS;AAAA,IAAE;AAEd,IAAAA,QAAO,QAAQ,8BAA8B,WAAW;AAAE,aAAO,YAAY,SAAU,MAAM,MAAM;AAC/F,cAAM,MAAM,UAAU,IAAI,EAAE,KAAK,UAAU,IAAI,CAAC;AAChD,eAAO,cAAc,GAAG;AAAA,MAC5B,GAAG,SAAS;AAAA,IAAE;AAEd,IAAAA,QAAO,QAAQ,6BAA6B,WAAW;AACnD,YAAM,MAAM,IAAI,OAAO;AACvB,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,iCAAiC,SAAS,MAAM;AAC3D,YAAM,MAAM,MAAM,QAAQ,UAAU,IAAI,CAAC;AACzC,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,8BAA8B,SAAS,MAAM,MAAM;AAC9D,YAAM,MAAM,UAAU,IAAI,EAAE,KAAK,UAAU,IAAI,CAAC;AAChD,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,gDAAgD,SAAS,MAAM;AAC1E,UAAI;AACJ,UAAI;AACA,iBAAS,UAAU,IAAI,aAAa;AAAA,MACxC,QAAQ;AACJ,iBAAS;AAAA,MACb;AACA,YAAM,MAAM;AACZ,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,gCAAgC,SAAS,MAAM;AAC1D,YAAM,MAAM,UAAU,IAAI,EAAE,OAAO;AACnC,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,SAAS,MAAM,MAAM;AAC7D,YAAM,MAAM,IAAI,MAAM,mBAAmB,MAAM,IAAI,CAAC;AACpD,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,iCAAiC,SAAS,MAAM,MAAM,MAAM;AACvE,gBAAU,IAAI,EAAE,OAAO,mBAAmB,MAAM,IAAI;AAAA,IACxD;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,SAAS,MAAM,MAAM,MAAM;AACnE,YAAM,MAAM,UAAU,IAAI,EAAE,IAAI,UAAU,IAAI,GAAG,UAAU,IAAI,CAAC;AAChE,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,uCAAuC,SAAS,MAAM;AACjE,YAAM,MAAM,OAAO,cAAc,UAAU,IAAI,CAAC;AAChD,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,WAAW;AACnD,YAAM,MAAM,KAAK,IAAI;AACrB,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,iCAAiC,SAAS,MAAM;AAC3D,YAAM,MAAM,OAAO,QAAQ,UAAU,IAAI,CAAC;AAC1C,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,gCAAgC,SAAS,MAAM;AAC1D,YAAM,MAAM,UAAU,IAAI,EAAE;AAC5B,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,SAAS,MAAM;AACvD,YAAM,MAAM,IAAI,WAAW,UAAU,IAAI,CAAC;AAC1C,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,SAAS,MAAM,MAAM,MAAM;AACnE,gBAAU,IAAI,EAAE,IAAI,UAAU,IAAI,GAAG,SAAS,CAAC;AAAA,IACnD;AAEA,IAAAA,QAAO,QAAQ,gCAAgC,SAAS,MAAM;AAC1D,YAAM,MAAM,UAAU,IAAI,EAAE;AAC5B,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,+CAA+C,SAAS,MAAM;AACzE,UAAI;AACJ,UAAI;AACA,iBAAS,UAAU,IAAI,aAAa;AAAA,MACxC,QAAQ;AACJ,iBAAS;AAAA,MACb;AACA,YAAM,MAAM;AACZ,aAAO;AAAA,IACX;AAEA,IAAAA,QAAO,QAAQ,6BAA6B,WAAW;AAAE,aAAO,YAAY,SAAU,MAAM,MAAM;AAC9F,cAAM,MAAM,QAAQ,IAAI,UAAU,IAAI,GAAG,UAAU,IAAI,CAAC;AACxD,eAAO;AAAA,MACX,GAAG,SAAS;AAAA,IAAE;AAEd,IAAAA,QAAO,QAAQ,0BAA0B,SAAS,MAAM,MAAM;AAC1D,YAAM,MAAM,YAAY,UAAU,IAAI,CAAC;AACvC,YAAM,OAAO,kBAAkB,KAAK,KAAK,mBAAmB,KAAK,kBAAkB;AACnF,YAAM,OAAO;AACb,sBAAgB,EAAE,OAAO,IAAI,CAAC,IAAI;AAClC,sBAAgB,EAAE,OAAO,IAAI,CAAC,IAAI;AAAA,IACtC;AAEA,IAAAA,QAAO,QAAQ,mBAAmB,SAAS,MAAM,MAAM;AACnD,YAAM,IAAI,MAAM,mBAAmB,MAAM,IAAI,CAAC;AAAA,IAClD;AAEA,IAAAA,QAAO,QAAQ,oBAAoB,WAAW;AAC1C,YAAM,MAAM,KAAK;AACjB,aAAO,cAAc,GAAG;AAAA,IAC5B;AAEA,QAAM,OAAO,QAAQ,MAAM,EAAE,KAAK,WAAW,wBAAwB;AACrE,QAAM,QAAQ,QAAQ,IAAI,EAAE,aAAa,IAAI;AAE7C,QAAM,aAAa,IAAI,YAAY,OAAO,KAAK;AAC/C,QAAM,eAAe,IAAI,YAAY,SAAS,YAAY,OAAO;AACjE,WAAO,aAAa;AACpB,IAAAA,QAAO,QAAQ,SAAS;AAAA;AAAA;;;;;;;;;;;;;;;;;;;;;ACn1BxB,QAAA,SAAA,QAAA,MAAA;AACA,QAAA,aAAA,QAAA,UAAA;AAEA,QAAA,SAAA,QAAA,MAAA;AAGA,QAAA,WAAA;AAMA,QAAA,UAAA;AACA,QAAA,SAAA;AACA,QAAA,mBAAA;AACA,QAAA,cAAA;AAEA,QAAA,aAAA;AACA,QAAA,UAAA;AAQA,QAAA,YAAA;AASA,QAAM,SAAN,MAAY;MAIV,YAAY,KAAa,UAAiB;AACxC,aAAK,MAAM;AACX,aAAK,WAAW;MAClB;;AAIF,QAAa,QAAb,MAAkB;MAehB,YAAY,OAAgB,CAAA,GAAE;AAT9B,wBAAA,IAAA,MAAA,MAAA;AAOA,oBAAA,IAAA,MAAA,MAAA;AAGE,+BAAA,MAAI,iBAAa,IAAI,iBAAA,MAAQ,GAAE,GAAA;AAG/B,+BAAA,MAAI,iBAAA,GAAA,EAAW,wBACb,CAAC,EAAC,YAAO,QAAP,YAAO,SAAA,SAAP,QAAS,IAAI,8BAA6B;AAE9C,+BAAA,MAAI,aAAS,IAAI,OAAA,KAAK,uBAAA,MAAI,iBAAA,GAAA,GAAY;UACpC,kBAAkB;UAClB,YAAY,KAAK,cAAc,UAAA;SAChC,GAAC,GAAA;AAGF,aAAK,iBAAiB,MAAM,KAAK;AAGjC,aAAK,cAAc,OAAO;AAC1B,aAAK,cAAc,QAAQ,EAAE,MAAM,UAAS,CAAE;AAC9C,aAAK,cAAc,QAAQ,EAAE,MAAM,QAAO,CAAE;AAC5C,aAAK,cAAc,MAAM;AACzB,aAAK,cAAc,OAAO,EAAE,MAAM,OAAM,CAAE;AAC1C,aAAK,cAAc,QAAA,MAAM,EAAE,MAAM,aAAY,CAAE;MACjD;;;;;;;;;;;;MAaA,OAAI;AACF,+BAAA,MAAI,iBAAA,GAAA,EAAW,KAAI;MACrB;;;;;;MAOQ,kBAAe;AACrB,mBAAS;AACP,gBAAM,MAAM,uBAAA,MAAI,iBAAA,GAAA,EAAW,YAAW;AACtC,cAAI,QAAQ;AAAW;AACvB,qBAAA,eAAe,GAAG;;MAEtB;;;;;MAMA,aAAU;AACR,+BAAA,MAAI,iBAAA,GAAA,EAAW,WAAU;AACzB,aAAK,gBAAe;MACtB;;;;MAKA,MAAM,UAAU,WAAmB;AACjC,YAAI,UAAU,WAAW;AAAG;AAE5B,YAAI,CAAC,OAAA,SAAS;AACZ,gBAAM,IAAI,SAAA,WAAW,2CAA2C;;AAElE,cAAM,UAAU,MAAM,QAAQ,IAC5B,UAAU,IAAI,OAAM,aAAW;AAC7B,cAAI,OAAA,QAAQ,QAAQ,MAAM;AACxB,kBAAM,IAAI,SAAA,wBAAwB,QAAQ;AAE5C,cAAI;AACF,kBAAM,WAAW,MAAM,UAAA,SAAS,QAAQ;AACxC,mBAAO,IAAI,OAAO,UAAU,QAAQ;mBAC7B,GAAG;AACV,gBAAK,EAA4B,SAAS;AACxC,oBAAM,IAAI,SAAA,uBAAuB,QAAQ;AAC3C,kBAAM;;QAEV,CAAC,CAAC;AAGJ,eAAO,KAAK,YAAY,OAAO;MACjC;;;;;;;;MASA,MAAM,SAAS,UAAgB;AAC7B,gBAAQ,MACN,sMAC8G;AAEhH,eAAO,KAAK,UAAU,CAAC,QAAQ,CAAC;MAClC;;;;MAKA,MAAM,QAAQ,UAAkB,UAAiB;AAC/C,eAAO,KAAK,YAAY,CAAC,IAAI,OAAO,UAAU,QAAQ,CAAC,CAAC;MAC1D;;MAGQ,MAAM,YAAY,SAAiB;AACzC,+BAAA,MAAI,iBAAA,GAAA,EAAW,KAAK,OAAO;AAC3B,aAAK,gBAAe;AACpB,eAAO,KAAK,mBAAkB;MAChC;MAEQ,MAAM,qBAAkB;AAC9B,mBAAS;AACP,gBAAM,QAAQ,uBAAA,MAAI,iBAAA,GAAA,EAAW,gBAAe;AAC5C,eAAK,gBAAe;AACpB,cAAI,UAAU;AAAW;AACzB,gBAAM,SAAS,MAAM,OAAM;AAC3B,gBAAM,EAAE,QAAO,IAAK,IAAI,QAAA,MAAM,OAAO,KAAK,QAAO,CAAE;AACnD,gBAAM,EAAE,KAAI,IAAK,MAAM,QAAQ,KAAI;AACnC,gBAAM,QAAQ,OAAM;AACpB,cAAI;AAAM,kBAAM,IAAI,SAAA,uBAAuB,MAAM;;MAErD;;;;MAKA,MAAM,GAAuB,MAAgB;AAC3C,cAAM,OAAO,OAAA,KAAK,MAAM,KAAK,QAAO,GAAI;UACtC,mBAAkB,SAAI,QAAJ,SAAI,SAAA,SAAJ,KAAM,qBAAoB;SAC7C;AAED,YAAI;AACJ,YAAI,UAAA,SAAS,CAAC,GAAG;AACf,qBAAW,uBAAA,MAAI,iBAAA,GAAA,EAAW,gBAAgB,CAAC;eACtC;AACL,gBAAM,OAAO,KAAK,QAAQ,CAAC;AAC3B,qBAAW,uBAAA,MAAI,iBAAA,GAAA,EAAW,iBAAiB,IAAI;;AAEjD,aAAK,gBAAe;AACpB,eAAO,IAAI,QAAA,MAAM,UAAU,MAAM,SAAI,QAAJ,SAAI,SAAA,SAAJ,KAAM,QAAQ,EAAE;MACnD;MAOA,UAAU,eAAmC,MAAe;AAC1D,YAAI,OAAO,eAAe;AACxB,iBAAO,KAAK,MAAM,IAAI,YAAA,UAAU,YAAY,IAAI,GAAG,CAAA,CAAE;AAEvD,YAAI,OAAO,KAAK,CAAC,MAAM;AACrB,gBAAM,IAAI,SAAA,WAAW,gDAAgD;AAEvE,cAAM,CAAC,UAAU,GAAG,QAAQ,IAAI;AAChC,eAAO,KAAK,MAAM,IAAI,YAAA,UAAU,UAAU,QAAQ,GAAG,UAAU;MACjE;;;;MAKA,MAAM,cAAc,SAAiB,MAAe;AAClD,cAAM,UAAU,KAAK,MAAM,IAAI,YAAA,UAAU,MAAM,IAAI,CAAC;AACpD,cAAM,EAAE,KAAI,IAAK,MAAM,QAAQ,KAAI;AACnC,cAAM,QAAQ,OAAM;AACpB,eAAO,CAAC;MACV;;;;;;;MAQA,cAAc,KAAY,QAAoB;AAC5C,cAAM,UAAU,KAAK,QAAO,EAAG,WAAW,KAAK,MAAM;AACrD,aAAK,iBAAiB,KAAK,OAAO;AAClC,aAAK,QAAO,EAAG,aAAY;MAC7B;;;;MAKA,iBAAiB,OAAgB,MAAY;AAC3C,cAAM,OAAO,KAAK,QAAO,EAAG,QAAQ,KAAK;AACzC,+BAAA,MAAI,iBAAA,GAAA,EAAW,iBAAiB,MAAM,IAAI;MAC5C;MAEA,UAAO;AACL,eAAO,uBAAA,MAAI,aAAA,GAAA;MACb;MAEA,SAAM;AACJ,eAAO,uBAAA,MAAI,iBAAA,GAAA;MACb;;MAGA,MAAM,KAAK,OAAgB;;AACzB,YAAI,OAAO,WAAA,oBAAoB;AAC7B,gBAAM,IAAI,SAAA,WAAW,sCAAsC;AAE7D,YAAI;AACF,cAAI,UAAK,QAAL,UAAK,SAAA,SAAL,MAAO;AAAQ,kBAAM,KAAK,UAAU,KAAK;iBACtC,GAAG;AACV,oBAAA,WAAW,CAAU;;AAKvB,cAAM,QAAO,KAAA,OAAO,UAAI,QAAA,OAAA,SAAA,SAAA,GAAE;AAE1B,YAAI,MAAM;AACR,eAAK,UAAU,UAAA,MAAM;AACrB,gBAAM,YAAY,KAAK,cAAc,KAAK,IAAI;AAG9C,eAAK,OAAO,OACV,SACA,MACA,OACA,OACG,GAAG,MAAM,MAAM,UAAU,OAAO,CAAC;AACtC,gBAAM,YAAY,KAAK,UAAU,MAAM;AACvC,eAAK,mBAAmB,MAAM;AAC9B,eAAK,oBAAoB,QAAQ,MAAK;AACpC,sBAAU,QAAQ,OAAK,KAAK,YAAY,QAAQ,CAAC,CAAC;AAClD,mBAAA,MAAM,EAAE,WAAW,KAAI,CAAE;UAC3B,CAAC;eACI;AACL,gBAAM,KAAK,WAAA,gBAAgB;YACzB,OAAO,QAAQ;YACf,QAAQ,QAAQ;YAChB,QAAQ,UAAA;YACR,SAAS;WACV;AACD,aAAG,OAAM;AAET,aAAG,GAAG,QAAQ,OAAO,SAAgB;AACnC,kBAAM,SAAS,MAAM,KAAK,cAAc,IAAI;AAC5C,gBAAI,WAAW;AAAW,sBAAQ,IAAI,MAAM;AAC5C,eAAG,OAAM;UACX,CAAC;;MAEL;;;;;;MAOQ,MAAM,cAAc,OAAa;AACvC,cAAM,QAAQ,MAAM,KAAI,EAAG,QAAQ,OAAO,EAAE;AAC5C,YAAI;AACF,cAAI,UAAU,IAAI;AAChB,kBAAM,WAAW,uBAAA,MAAI,iBAAA,GAAA,EAAW,gBAAgB,KAAK;AACrD,kBAAME,SAAQ,IAAI,QAAA,MAAM,UAAU,KAAK,QAAO,CAAE;AAChD,kBAAM,UAAU,CAAA;AAChB,6BAAiB,UAAUA,OAAM,SAAS;AACxC,sBAAQ,KAAK,MAAM;;AAErB,gBAAI,QAAQ,WAAW,GAAG;AACxB,qBAAO;mBACF;AACL,yBAAW,UAAU,SAAS;AAC5B,2BAAW,CAAC,UAAU,KAAK,KAAK,QAAQ;AACtC,0BAAQ,IAAI,WAAW,QAAQ,UAAA,KAAK,KAAK,CAAC;;;AAG9C,qBAAO;;;iBAGJ,GAAG;AACV,oBAAA,WAAW,CAAU;;MAEzB;;AAzSF,IAAAC,SAAA,QAAA;;;;;;;;;;;;;;;;;;;;;;;;;AC9CA,QAAA,UAAA;AACA,QAAA,aAAA;AACA,QAAA,eAAA;AACA,QAAA,YAAA;AAEA,QAAA,WAAA;AAMA,QAAA,WAAA;AAKA,QAAa,MAAb,cAOU,QAAA,MAAsB;MAK9B,YAAY,OAAgB,CAAA,GAAE;AAC5B,cAAM,IAAI;AALZ,2BAAA,IAAA,MAA8B,SAAA,aAAa;AAC3C,4BAAA,IAAA,MAA+B,SAAA,cAAc;AAC7C,wBAAA,IAAA,MAAuB,MAAM;AAK3B,YAAI,KAAK;AAAe,iCAAA,MAAI,oBAAkB,KAAK,eAAa,GAAA;AAChE,YAAI,KAAK;AAAgB,iCAAA,MAAI,qBAAmB,KAAK,gBAAc,GAAA;AACnE,YAAI,KAAK;AAAY,iCAAA,MAAI,iBAAe,KAAK,YAAU,GAAA;MACzD;;;;;;;;;;MAWA,MAAM,UACJ,OACA,QACA,UAAkB;AAElB,eAAO,KAAK,cAAc,SAAS,OAAO,QAAQ,QAAQ;MAC5D;;;;;;;;;;;;;;;;;;;;;MAsBA,MAAM,UACJ,OACA,QACA,UACA,UAAmC,CAAA,GAAE;AAErC,YAAI,OAAO,QAAQ,cAAc;AAAa,kBAAQ,YAAY;AAClE,YAAI,MAAM,KAAK,cAAc,SAAS,OAAO,QAAQ,QAAQ,GAAG;AAC9D;;AAGF,YAAI,aAAa;AACjB,YAAI,QAAQ,WAAW;AACrB,cAAI,WAAW,uBAAA,MAAI,iBAAA,GAAA,GAAc;AAC/B,yBAAa;iBACR;AACL,kBAAM,UAAU,MAAM,KAAK,cACzB,SACA,OACA,uBAAA,MAAI,iBAAA,GAAA,GACJ,QAAQ;AAEV,gBAAI,CAAC,SAAS;AACZ,2BAAa;;;;AAInB,cAAM,aAAa,aAAa,uBAAA,MAAI,oBAAA,GAAA,IAAkB,uBAAA,MAAI,qBAAA,GAAA;AAC1D,cAAM,IAAI,WAAU;MACtB;;;;;;;;;;;;;;;MAgBA,MAAM,kBACJ,OACA,UACA,UAAuC,CAAA,GAAE;AAEzC,cAAM,UAAU,KAAK,UACnB,SACA,OACA,IAAI,WAAA,SAAS,QAAQ,GACrB,QAAQ;AAEV,cAAM,UAAU,oBAAI,IAAG;AACvB,yBAAiB,UAAU,SAAS;AAClC,gBAAM,SAAS,OAAO,IAAI,QAAQ;AAClC,cAAI,kBAAkB,WAAA,UAAU;AAC9B,gBAAI,CAAC,QAAQ,eAAe;AAC1B,oBAAM,IAAI,SAAA,SAAS;;WAElB;mBACI;AACL,qBAAO,oBAAI,IAAI,CAAC,GAAG,CAAC;;;AAKxB,kBAAQ,IAAI,MAAgB;;AAE9B,eAAO;MACT;;;;;;;;;;;;;;MAeA,MAAM,iBAAiB,OAAc,SAAgB;AACnD,cAAM,YAAY,MAAM,KAAK,cAAc,iBAAiB,OAAO,OAAO;AAC1E,YAAI,CAAC,WAAW;AACd,gBAAM,KAAI,uBAAA,MAAI,qBAAA,GAAA,GAAgB;;MAElC;;;;;;;;;;;;;;;MAgBA,MAAM,eACJ,OACA,QACA,UACA,OAAY;AAEZ,cAAM,YAAY,MAAM,KAAK,cAC3B,eACA,OACA,QACA,UACA,KAAK;AAEP,YAAI,CAAC,WAAW;AACd,gBAAM,KAAI,uBAAA,MAAI,qBAAA,GAAA,GAAgB;;MAElC;;;;;;;;;;;;;;;;;MAkBA,MAAM,iBACJ,OACA,QACA,UACA,UAAuC,CAAA,GAAE;AAEzC,cAAM,UAAU,KAAK,UACnB,eACA,OACA,QACA,UACA,IAAI,WAAA,SAAS,OAAO,CAAC;AAEvB,cAAM,SAAS,oBAAI,IAAG;AACtB,yBAAiB,UAAU,SAAS;AAClC,gBAAM,QAAQ,OAAO,IAAI,OAAO;AAChC,cAAI,iBAAiB,WAAA,UAAU;AAC7B,gBAAI,CAAC,QAAQ,eAAe;AAC1B,oBAAM,IAAI,SAAA,SAAS;;WAElB;mBACI;AACL,qBAAO,oBAAI,IAAI,CAAC,GAAG,CAAC;;;AAKxB,iBAAO,IAAI,KAAc;;AAE3B,eAAO;MACT;;;;;;;;;;MAWA,MAAM,gBACJ,OACA,QACA,aAAqC;;AAErC,cAAM,WAAW,IAAI,WAAA,SAAS,UAAU;AACxC,cAAM,OAAO,KAAK,QAAO;AACzB,YAAI;AACJ,YAAI,OAAO,gBAAgB,UAAU;AACnC,oBAAU;eACL;AACL,qBAAU,KAAA,KAAK,QAAQ,WAAW,OAAC,QAAA,OAAA,SAAA,SAAA,GAAE;AACrC,cAAI,YAAY;AACd,kBAAM,IAAI,SAAA,uBAAuB,YAAY,IAAI;;AAGrD,cAAM,aAAa,IAAI,aAAA,WAAW,OAAO;UACvC,IAAI,aAAA,WAAW,OAAO;YACpB;YACA,IAAI,UAAA,QAAQ,EAAE,KAAK,SAAS,QAAQ,CAAA,EAAE,CAAE;WACzC;SACF;AACD,cAAM,WAAW,oBAAI,IAAG;AACxB,iBAAS,IAAI,YAAY,UAAU;AACnC,cAAM,UAAU,KAAK,UACnB;UACE;UACA,kBAAkB;WAEpB,SACA,OACA,QACA,QAAQ;AAGV,cAAM,eAAuD,CAAA;AAC7D,yBAAiB,UAAU,SAAS;AAClC,uBAAa,KAAK;;YAEhB,UAAU,IAAI,IACZ,CAAC,GAAG,OAAO,QAAO,CAAE,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC;WAE9D;;AAGH,cAAM,aAAa,KAAK,OAAM,EAAG,gBAC/B,KAAK,eAAc,GACnB,cACA,YACA,OAAO;AAET,cAAM,SAAS,MAAM,SAAA,YAAY,YAAY,IAAI;AACjD,eAAO,KAAK,QAAQ,WAAW,MAAM;MACvC;;;;;;;;;;MAWA,MAAM,oBACJ,OACA,QACA,aAAqC;AAErC,cAAM,QAAQ,MAAM,KAAK,gBAAgB,OAAO,QAAQ,WAAW;AACnE,YAAI,CAAC;AAAO,iBAAO,CAAA;AACnB,eAAO,KAAK,QAAO,EAAG,QAAQ,aAAa,KAAK;MAClD;;;;MAKA,wBAAwB,SAAiC;AACvD,aAAK,QAAO,EAAG,UAAU;MAC3B;;AAhUF,IAAAC,SAAA,MAAA;;;;;;;;;;;AChBA,QAAA,QAAA;AAAS,WAAA,eAAAC,UAAA,OAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,MAAA;IAAG,EAAA,CAAA;AACZ,QAAA,aAAA;AAAS,WAAA,eAAAA,UAAA,YAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,WAAA;IAAQ,EAAA,CAAA;AACjB,QAAA,WAAA;AAAS,WAAA,eAAAA,UAAA,sBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,SAAA;IAAkB,EAAA,CAAA;AAAE,WAAA,eAAAA,UAAA,kBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,SAAA;IAAc,EAAA,CAAA;AAAE,WAAA,eAAAA,UAAA,iBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,SAAA;IAAa,EAAA,CAAA;AAC1D,QAAA,WAAA;AACE,WAAA,eAAAA,UAAA,YAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,SAAA;IAAQ,EAAA,CAAA;AAQV,QAAA,YAAA;AAAS,WAAA,eAAAA,UAAA,qBAAA,EAAA,YAAA,MAAA,KAAA,WAAA;AAAA,aAAA,UAAA;IAAiB,EAAA,CAAA;;;;;ACZ1B;AAAA;AAAA;AAAA;AAAA,IAUM,MAOA,MAIA,UAOA,cAEO;AA9Bb;AAAA;AAAA;AAUA,IAAM,OAAN,MAAW;AAAA,MACT,YACS,MACA,SACP;AAFO;AACA;AAAA,MACN;AAAA,IACL;AAEA,IAAM,OAAN,MAAW;AAAA,MACT,YAAmB,MAAc;AAAd;AAAA,MAAe;AAAA,IACpC;AAEA,IAAM,WAAN,MAAe;AAAA,MACb,YACS,MACA,SACP;AAFO;AACA;AAAA,MACN;AAAA,IACL;AAEA,IAAM,eAAN,MAAmB;AAAA,IAAC;AAEb,IAAM,kBAAN,MAAM,iBAAwC;AAAA;AAAA,MAE3C;AAAA,MACA,cAAoD,oBAAI,IAAI;AAAA,MAE5D,cAAc;AAAA,MAAC;AAAA,MAEvB,aAAa,OAAO,YAAsB,WAAgD;AACxF,YAAI;AACJ,YAAI;AACF,gBAAM,YAAY,MAAM;AACxB,qBAAW,UAAU;AAAA,QACvB,QAAQ;AACN,gBAAM,IAAI;AAAA,YACR;AAAA,UAEF;AAAA,QACF;AAEA,cAAM,SAAS,IAAI,iBAAgB;AACnC,eAAO,MAAM,IAAI,SAAS;AAE1B,eAAO,IAAI,cAAc,IAAI;AAC7B,eAAO,IAAI,cAAc,IAAI;AAC7B,eAAO,IAAI,cAAc,QAAQ;AACjC,eAAO,IAAI,cAAc,YAAY;AAErC,mBAAW,QAAQ,YAAY;AAC7B,gBAAM,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC;AAAA,QACnC;AAEA,cAAM,WAAW,MAAM,UAAU,mBAAmB;AACpD,mBAAW,WAAW,UAAU;AAC9B,cAAI,QAAQ,QAAQ;AAClB,mBAAO,YAAY,IAAI,QAAQ,MAAM,QAAQ,MAAM;AAAA,UACrD;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAAA,MAEA,aAAa,MAAc,MAA8B;AACvD,cAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,cAAM,eAAe,IAAI,KAAK,IAAI;AAOlC,YAAI;AAIF,gBAAM,SAAS,KAAK,IAAI,gBAAgB,MAAM,UAAU,YAAY;AACpE,cAAI,WAAW,QAAW;AACxB,mBAAO,SAAS,UAAU;AAAA,UAC5B;AAAA,QACF,QAAQ;AAAA,QAER;AAGA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,kBAAkB,MAAc,MAAuC;AAC3E,cAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,cAAM,eAAe,IAAI,KAAK,IAAI;AAClC,cAAM,UAAU,MAAM,KAAK,IAAI,UAAU,MAAM,UAAU,YAAY;AACrE,eAAO,UAAU,UAAU;AAAA,MAC7B;AAAA,MAEA,aACE,MACA,SACA,WACA,OACgB;AAChB,cAAM,OAAO,IAAI,KAAK,MAAM,OAAO;AACnC,cAAM,WAAW,IAAI,SAAS,OAAO,OAAO;AAE5C,YAAI;AACF,gBAAM,SAAS,KAAK,IAAI,gBAAgB,MAAM,WAAW,QAAQ;AACjE,cAAI,WAAW,QAAW;AACxB,mBAAO,SAAS,UAAU;AAAA,UAC5B;AAAA,QACF,QAAQ;AAAA,QAER;AACA,eAAO;AAAA,MACT;AAAA,MAEA,MAAM,kBACJ,MACA,SACA,WACA,MACyB;AACzB,cAAM,OAAO,IAAI,KAAK,MAAM,OAAO;AACnC,cAAM,WAAW,IAAI,SAAS,MAAM,OAAO;AAC3C,cAAM,UAAU,MAAM,KAAK,IAAI,UAAU,MAAM,WAAW,QAAQ;AAClE,eAAO,UAAU,UAAU;AAAA,MAC7B;AAAA,MAEA,iBAAiB,MAAc,MAAuB;AAEpD,YAAI;AACF,gBAAM,OAAO,IAAI,KAAK,IAAI;AAC1B,gBAAM,eAAe,IAAI,KAAK,IAAI;AAClC,gBAAM,SAAS,KAAK,IAAI,gBAAgB,MAAM,gBAAgB,YAAY;AAC1E,cAAI,WAAW,OAAW,QAAO,CAAC;AAAA,QACpC,QAAQ;AAAA,QAER;AACA,eAAO;AAAA,MACT;AAAA,MAEA,iBAAiB,MAA6B;AAC5C,cAAM,SAAS,KAAK,YAAY,IAAI,IAAI;AACxC,eAAQ,QAAQ,kBAAoC;AAAA,MACtD;AAAA,MAEA,gBAAgB,MAAsB;AACpC,cAAM,SAAS,KAAK,YAAY,IAAI,IAAI;AACxC,eAAQ,QAAQ,mBAA8B;AAAA,MAChD;AAAA,MAEA,iBAAiB,MAA6B;AAC5C,cAAM,SAAS,KAAK,YAAY,IAAI,IAAI;AACxC,cAAM,YAAY,QAAQ;AAG1B,YAAI,CAAC,UAAW,QAAO,CAAC;AAExB,eAAO;AAAA,UACL,mBAAmB,UAAU,oBAAoB,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;AAAA,UACzE,mBAAmB,UAAU,oBAAoB,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;AAAA,QAC3E;AAAA,MACF;AAAA,MAEA,eAAe,MAAsB;AACnC,cAAM,SAAS,KAAK,YAAY,IAAI,IAAI;AACxC,eAAQ,QAAQ,sBAAiC;AAAA,MACnD;AAAA,IACF;AAAA;AAAA;;;AC/KA;AAAA;AAAA;AAAA;AAAA,IAEa;AAFb;AAAA;AAAA;AAEO,IAAM,qBAAN,MAA8C;AAAA,MAC3C,WAA0B,CAAC;AAAA,MAC3B,YAAwB,CAAC;AAAA,MAEjC,eAAe,SAA4B;AACzC,aAAK,SAAS,KAAK,OAAO;AAAA,MAC5B;AAAA,MAEA,YAAY,UAA0B;AACpC,aAAK,UAAU,KAAK,QAAQ;AAAA,MAC9B;AAAA,MAEA,MAAM,SAAS,QAAwC;AACrD,eAAO,KAAK,SAAS,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM;AAAA,MACxD;AAAA,MAEA,MAAM,qBAA6C;AACjD,eAAO,CAAC,GAAG,KAAK,QAAQ;AAAA,MAC1B;AAAA,MAEA,MAAM,aAAa,SAAiB,WAAwC;AAC1E,eAAO,KAAK,UAAU,OAAO,CAAC,MAAM,EAAE,YAAY,WAAW,EAAE,cAAc,SAAS;AAAA,MACxF;AAAA,IACF;AAAA;AAAA;;;ACzBA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,gBAAyC;AACzC,kBAAmC;AACnC,mBAAsB;;;ACFtB,qBAAkC;AAElC,IAAM,gBAAgB,oBAAK,OAAO;AAAA,EAChC,UAAU,oBAAK,OAAO,EAAE,SAAS,cAAc,CAAC;AAAA,EAChD,UAAU,oBAAK,OAAO,EAAE,SAAS,cAAc,CAAC;AAAA,EAChD,cAAc,oBAAK,OAAO,EAAE,SAAS,kBAAkB,CAAC;AAC1D,CAAC;AAED,IAAM,kBAAkB,oBAAK,OAAO;AAAA,EAClC,YAAY,oBAAK,OAAO,EAAE,SAAS,eAAe,CAAC;AACrD,CAAC;AAED,IAAM,aAAa,oBAAK,OAAO;AAAA,EAC7B,UAAU,oBAAK,MAAM,CAAC,oBAAK,QAAQ,KAAK,GAAG,oBAAK,QAAQ,OAAO,GAAG,oBAAK,QAAQ,MAAM,CAAC,GAAG;AAAA,IACvF,SAAS;AAAA,EACX,CAAC;AAAA,EACD,KAAK,oBAAK,SAAS,aAAa;AAAA,EAChC,OAAO,oBAAK,SAAS,eAAe;AACtC,CAAC;AAID,IAAM,mBAAmB,oBAAK,OAAO;AAAA,EACnC,YAAY,oBAAK,OAAO,EAAE,SAAS,0BAA0B,CAAC;AAChE,CAAC;AAED,IAAM,kBAAkB,oBAAK,OAAO;AAAA,EAClC,aAAa,oBAAK,MAAM,oBAAK,OAAO,GAAG;AAAA,IACrC,SAAS,CAAC,yBAAyB,wBAAwB;AAAA,EAC7D,CAAC;AACH,CAAC;AAED,IAAM,eAAe,oBAAK,OAAO;AAAA,EAC/B,QAAQ,oBAAK,MAAM,CAAC,oBAAK,QAAQ,MAAM,GAAG,oBAAK,QAAQ,KAAK,CAAC,GAAG,EAAE,SAAS,OAAO,CAAC;AAAA,EACnF,MAAM,oBAAK,SAAS,gBAAgB;AAAA,EACpC,KAAK,oBAAK,SAAS,eAAe;AACpC,CAAC;AAED,IAAM,kBAAkB,oBAAK,OAAO;AAAA,EAClC,WAAW,oBAAK,OAAO,EAAE,SAAS,eAAe,CAAC;AAAA,EAClD,SAAS,oBAAK,OAAO,EAAE,SAAS,eAAe,CAAC;AAClD,CAAC;AAED,IAAM,oBAAoB,oBAAK,OAAO;AAAA,EACpC,KAAK,oBAAK,OAAO;AACnB,CAAC;AAED,IAAM,aAAa,oBAAK,OAAO;AAAA,EAC7B,cAAc,oBAAK;AAAA,IACjB,CAAC,oBAAK,QAAQ,YAAY,GAAG,oBAAK,QAAQ,YAAY,GAAG,oBAAK,QAAQ,SAAS,CAAC;AAAA,IAChF,EAAE,SAAS,aAAa;AAAA,EAC1B;AAAA,EACA,kBAAkB,oBAAK,MAAM,CAAC,oBAAK,QAAQ,KAAK,GAAG,oBAAK,QAAQ,SAAS,CAAC,GAAG,EAAE,SAAS,MAAM,CAAC;AAAA,EAC/F,iBAAiB,oBAAK,OAAO,EAAE,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,CAAC;AAAA,EACzE,SAAS,oBAAK,SAAS,iBAAiB;AAC1C,CAAC;AAED,IAAM,kBAAkB,oBAAK,OAAO;AAAA,EAClC,MAAM,oBAAK,QAAQ,OAAO;AAAA,EAC1B,MAAM,oBAAK,OAAO,EAAE,SAAS,0BAA0B,CAAC;AAC1D,CAAC;AAED,IAAM,oBAAoB,oBAAK,OAAO;AAAA,EACpC,MAAM,oBAAK,QAAQ,SAAS;AAAA,EAC5B,KAAK,oBAAK,OAAO;AACnB,CAAC;AAED,IAAM,qBAAqB,oBAAK,OAAO;AAAA,EACrC,MAAM,oBAAK,QAAQ,UAAU;AAAA,EAC7B,YAAY,oBAAK,OAAO;AAC1B,CAAC;AAED,IAAM,kBAAkB,oBAAK,MAAM,CAAC,iBAAiB,mBAAmB,kBAAkB,CAAC;AAE3F,IAAM,cAAc,oBAAK,OAAO;AAAA,EAC9B,OAAO,oBAAK,MAAM,iBAAiB;AAAA,IACjC,SAAS,CAAC,EAAE,MAAM,SAAS,MAAM,0BAA0B,CAAC;AAAA,EAC9D,CAAC;AACH,CAAC;AAED,IAAM,kBAAkB,oBAAK,OAAO;AAAA,EAClC,MAAM,oBAAK,SAAS,oBAAK,QAAQ,UAAU,CAAC;AAAA,EAC5C,QAAQ,oBAAK;AAAA,IACX,oBAAK,OAAO;AAAA,MACV,aAAa,oBAAK,SAAS,oBAAK,OAAO,CAAC;AAAA,MACxC,aAAa,oBAAK,SAAS,oBAAK,OAAO,CAAC;AAAA,IAC1C,CAAC;AAAA,EACH;AACF,CAAC;AAID,IAAM,mBAAmB,oBAAK,OAAO;AAAA,EACnC,UAAU,oBAAK,MAAM,CAAC,oBAAK,QAAQ,SAAS,GAAG,oBAAK,QAAQ,MAAM,GAAG,oBAAK,QAAQ,MAAM,CAAC,GAAG;AAAA,IAC1F,SAAS;AAAA,EACX,CAAC;AAAA,EACD,YAAY,oBAAK,SAAS,oBAAK,OAAO,EAAE,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC;AAAA,EACjE,aAAa,oBAAK,SAAS,oBAAK,OAAO,EAAE,SAAS,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,IAAM,yBAAyB,oBAAK,OAAO;AAAA,EACzC,MAAM,oBAAK,OAAO;AAAA,EAClB,SAAS,oBAAK,OAAO;AAAA,EACrB,UAAU,oBAAK,MAAM;AAAA,IACnB,oBAAK,QAAQ,KAAK;AAAA,IAClB,oBAAK,QAAQ,QAAQ;AAAA,IACrB,oBAAK,QAAQ,MAAM;AAAA,IACnB,oBAAK,QAAQ,UAAU;AAAA,EACzB,CAAC;AAAA,EACD,QAAQ,oBAAK;AAAA,IACX,oBAAK,MAAM,CAAC,oBAAK,QAAQ,OAAO,GAAG,oBAAK,QAAQ,MAAM,GAAG,oBAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,EACjF;AACF,CAAC;AAED,IAAM,0BAA0B,oBAAK,OAAO;AAAA,EAC1C,SAAS,oBAAK,OAAO;AACvB,CAAC;AAED,IAAM,wBAAwB,oBAAK,OAAO;AAAA,EACxC,SAAS,oBAAK,SAAS,oBAAK,QAAQ,CAAC;AAAA,EACrC,MAAM,oBAAK;AAAA,IACT,oBAAK,MAAM,CAAC,oBAAK,QAAQ,OAAO,GAAG,oBAAK,QAAQ,MAAM,GAAG,oBAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,EACjF;AAAA,EACA,UAAU,oBAAK;AAAA,IACb,oBAAK,MAAM,CAAC,oBAAK,QAAQ,OAAO,GAAG,oBAAK,QAAQ,MAAM,GAAG,oBAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,EACjF;AAAA,EACA,WAAW,oBAAK;AAAA,IACd,oBAAK,MAAM,CAAC,oBAAK,QAAQ,OAAO,GAAG,oBAAK,QAAQ,MAAM,GAAG,oBAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,EACjF;AACF,CAAC;AAED,IAAM,YAAY,oBAAK,OAAO;AAAA,EAC5B,SAAS,oBAAK,QAAQ,EAAE,SAAS,MAAM,CAAC;AAAA,EACxC,MAAM,oBAAK;AAAA,IACT,oBAAK,MAAM,CAAC,oBAAK,QAAQ,OAAO,GAAG,oBAAK,QAAQ,MAAM,GAAG,oBAAK,QAAQ,OAAO,CAAC,GAAG;AAAA,MAC/E,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA,EACA,UAAU,oBAAK;AAAA,IACb,oBAAK,MAAM,CAAC,oBAAK,QAAQ,OAAO,GAAG,oBAAK,QAAQ,MAAM,GAAG,oBAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,EACjF;AAAA,EACA,WAAW,oBAAK;AAAA,IACd,oBAAK,MAAM,CAAC,oBAAK,QAAQ,OAAO,GAAG,oBAAK,QAAQ,MAAM,GAAG,oBAAK,QAAQ,OAAO,CAAC,CAAC;AAAA,EACjF;AAAA,EACA,SAAS,oBAAK,SAAS,gBAAgB;AAAA,EACvC,oBAAoB,oBAAK;AAAA,IACvB,oBAAK;AAAA,MACH,CAAC,oBAAK,QAAQ,KAAK,GAAG,oBAAK,QAAQ,QAAQ,GAAG,oBAAK,QAAQ,MAAM,GAAG,oBAAK,QAAQ,UAAU,CAAC;AAAA,MAC5F,EAAE,SAAS,MAAM;AAAA,IACnB;AAAA,EACF;AAAA,EACA,UAAU,oBAAK;AAAA,IACb,oBAAK,OAAO;AAAA,MACV,SAAS,oBAAK,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,MACvC,KAAK,oBAAK,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,IACrC,CAAC;AAAA,EACH;AAAA,EACA,iBAAiB,oBAAK,SAAS,oBAAK,MAAM,sBAAsB,CAAC;AAAA,EACjE,WAAW,oBAAK,SAAS,oBAAK,MAAM,uBAAuB,CAAC;AAAA,EAC5D,gBAAgB,oBAAK,SAAS,oBAAK,OAAO,oBAAK,OAAO,GAAG,qBAAqB,CAAC;AACjF,CAAC;AAMD,IAAM,iCAAiC,oBAAK,OAAO;AAAA,EACjD,WAAW,oBAAK,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,EACzC,YAAY,oBAAK,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,EAC1C,eAAe,oBAAK,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,EAC7C,iBAAiB,oBAAK,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,EAC/C,iBAAiB,oBAAK,QAAQ,EAAE,SAAS,KAAK,CAAC;AACjD,CAAC;AAED,IAAM,2BAA2B,oBAAK,OAAO;AAAA,EAC3C,SAAS,oBAAK,QAAQ,EAAE,SAAS,KAAK,CAAC;AAAA,EACvC,QAAQ,oBAAK,SAAS,8BAA8B;AAAA,EACpD,iBAAiB,oBAAK;AAAA,IACpB,oBAAK,OAAO;AAAA,MACV,cAAc,oBAAK,OAAO,EAAE,SAAS,IAAI,SAAS,EAAE,CAAC;AAAA,MACrD,sBAAsB,oBAAK,OAAO,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EACA,SAAS,oBAAK;AAAA,IACZ,oBAAK,MAAM,CAAC,oBAAK,QAAQ,UAAU,GAAG,oBAAK,QAAQ,OAAO,GAAG,oBAAK,QAAQ,OAAO,CAAC,GAAG;AAAA,MACnF,SAAS;AAAA,IACX,CAAC;AAAA,EACH;AAAA,EACA,WAAW,oBAAK,SAAS,oBAAK,MAAM,oBAAK,OAAO,CAAC,CAAC;AAAA,EAClD,WAAW,oBAAK,SAAS,oBAAK,MAAM,oBAAK,OAAO,CAAC,CAAC;AAAA,EAClD,oBAAoB,oBAAK,SAAS,oBAAK,MAAM,oBAAK,OAAO,CAAC,CAAC;AAAA,EAC3D,wBAAwB,oBAAK,QAAQ,EAAE,SAAS,KAAK,CAAC;AACxD,CAAC;AAIM,IAAM,yBAAyB,oBAAK,OAAO;AAAA,EAChD,MAAM,oBAAK,SAAS,UAAU;AAAA,EAC9B,QAAQ,oBAAK,SAAS,YAAY;AAAA,EAClC,WAAW,oBAAK,SAAS,eAAe;AAAA,EACxC,MAAM,oBAAK,SAAS,UAAU;AAAA,EAC9B,OAAO,oBAAK,SAAS,WAAW;AAAA,EAChC,KAAK,oBAAK,SAAS,SAAS;AAAA,EAC5B,qBAAqB,oBAAK,SAAS,wBAAwB;AAAA,EAC3D,WAAW,oBAAK,SAAS,oBAAK,OAAO,oBAAK,OAAO,GAAG,eAAe,CAAC;AACtE,CAAC;;;AC3MM,IAAM,WAA6B;AAAA,EACxC,MAAM;AAAA,IACJ,UAAU;AAAA,IACV,KAAK;AAAA,MACH,UAAU;AAAA,MACV,UAAU;AAAA,MACV,cAAc;AAAA,IAChB;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,YAAY;AAAA,IACd;AAAA,EACF;AAAA,EACA,WAAW;AAAA,IACT,WAAW;AAAA,IACX,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,iBAAiB;AAAA,EACnB;AAAA,EACA,OAAO;AAAA,IACL,OAAO,CAAC,EAAE,MAAM,SAAS,MAAM,0BAA0B,CAAC;AAAA,EAC5D;AAAA,EACA,KAAK;AAAA,IACH,SAAS;AAAA,IACT,MAAM;AAAA,IACN,UAAU;AAAA,IACV,WAAW;AAAA,IACX,SAAS;AAAA,MACP,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,IACA,oBAAoB;AAAA,IACpB,UAAU;AAAA,MACR,SAAS;AAAA,MACT,KAAK;AAAA,IACP;AAAA,EACF;AACF;;;AFvCA,SAAS,iBAAyC;AAChD,SAAO;AAAA,IACL,QAAQ,IAAI,0BAA0B;AAAA,IACtC;AAAA,IACA,GAAG,QAAQ,IAAI,MAAM,CAAC;AAAA,EACxB;AACF;AAEO,SAAS,aAA2D;AACzE,aAAW,QAAQ,eAAe,GAAG;AACnC,QAAI,YAAQ,sBAAW,IAAI,GAAG;AAC5B,YAAM,UAAM,wBAAa,MAAM,OAAO;AACtC,YAAM,aAAS,YAAAC,OAAU,GAAG;AAE5B,YAAM,WAAW,eAAe,MAAM;AAEtC,YAAM,SAAS,CAAC,GAAG,mBAAM,OAAO,wBAAwB,QAAQ,CAAC;AACjE,UAAI,OAAO,SAAS,GAAG;AACrB,cAAM,IAAI;AAAA,UACR;AAAA,UACA,OAAO,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,EAAE,QAAQ,EAAE;AAAA,QAC1D;AAAA,MACF;AAEA,YAAM,SAAS,mBAAM,QAAQ,wBAAwB,QAAQ;AAC7D,aAAO,EAAE,QAAQ,QAAQ,KAAK;AAAA,IAChC;AAAA,EACF;AAEA,SAAO,EAAE,QAAQ,UAAU,QAAQ,WAAW;AAChD;AAEA,SAAS,eAAe,KAAuB;AAC7C,MAAI,OAAO,QAAQ,UAAU;AAC3B,WAAO,IAAI,QAAQ,gBAAgB,CAAC,GAAG,SAAiB,QAAQ,IAAI,IAAI,KAAK,EAAE;AAAA,EACjF;AACA,MAAI,MAAM,QAAQ,GAAG,EAAG,QAAO,IAAI,IAAI,cAAc;AACrD,MAAI,OAAO,OAAO,QAAQ,UAAU;AAClC,WAAO,OAAO;AAAA,MACZ,OAAO,QAAQ,GAA8B,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC;AAAA,IACvF;AAAA,EACF;AACA,SAAO;AACT;AAEO,IAAM,wBAAN,cAAoC,MAAM;AAAA,EAC/C,YAAY,MAAc,QAAkD;AAC1E,UAAM,UAAU,OAAO,IAAI,CAAC,MAAM,KAAK,EAAE,IAAI,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI;AACxE,UAAM,gCAAgC,IAAI;AAAA,EAAM,OAAO,EAAE;AACzD,SAAK,OAAO;AAAA,EACd;AACF;;;AGzDA,IAAAC,aAA6B;AAC7B,IAAAC,eAAmC;AACnC,uBAA0B;AA+BnB,IAAM,mBAAN,MAA+C;AAAA,EAC5C;AAAA,EAER,YAAY,sBAA0C;AACpD,QAAI,OAAO,yBAAyB,UAAU;AAC5C,YAAM,UAAM,yBAAa,sBAAsB,OAAO;AACtD,WAAK,YAAQ,aAAAC,OAAU,GAAG;AAAA,IAC5B,OAAO;AACL,WAAK,QAAQ;AAAA,IACf;AAAA,EACF;AAAA,EAEQ,QAAQ,MAAwB;AACtC,UAAM,IAAI,KAAK,MAAM,MAAM,IAAI;AAC/B,QAAI,CAAC,GAAG;AACN,YAAM,IAAI;AAAA,QACR,iBAAiB,IAAI,sBAAsB,OAAO,KAAK,KAAK,MAAM,KAAK,EAAE,KAAK,IAAI,CAAC;AAAA,MACrF;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,MAAc,MAA8B;AACvD,UAAM,IAAI,KAAK,QAAQ,IAAI;AAG3B,QAAI,EAAE,cAAc,SAAS,IAAI,EAAG,QAAO;AAG3C,QAAI,EAAE,cAAc,SAAS,KAAK,KAAK,EAAE,cAAc,SAAS,IAAI,GAAG;AACrE,aAAO;AAAA,IACT;AAGA,WAAO;AAAA,EACT;AAAA,EAEA,aACE,MACA,UACA,YACA,MACgB;AAChB,UAAM,IAAI,KAAK,QAAQ,IAAI;AAG3B,eAAW,WAAW,EAAE,eAAe;AACrC,cAAI,4BAAU,MAAM,SAAS,EAAE,KAAK,KAAK,CAAC,GAAG;AAC3C,eAAO;AAAA,MACT;AAAA,IACF;AAGA,eAAW,WAAW,EAAE,eAAe;AACrC,YAAM,WAAW,QAAQ,QAAQ,oBAAoB,QAAQ,IAAI,CAAC;AAClE,cAAI,4BAAU,MAAM,UAAU,EAAE,KAAK,KAAK,CAAC,GAAG;AAC5C,eAAO;AAAA,MACT;AAAA,IACF;AAGA,WAAO;AAAA,EACT;AAAA,EAEA,iBAAiB,MAAc,MAAuB;AACpD,UAAM,IAAI,KAAK,QAAQ,IAAI;AAG3B,QAAI,EAAE,eAAe,cAAc,SAAS,IAAI,EAAG,QAAO;AAG1D,QAAI,EAAE,eAAe,aAAa,SAAS,KAAK,EAAG,QAAO;AAC1D,WAAO,EAAE,eAAe,aAAa,SAAS,IAAI;AAAA,EACpD;AAAA,EAEA,iBAAiB,MAA6B;AAC5C,WAAO,KAAK,QAAQ,IAAI,EAAE;AAAA,EAC5B;AAAA,EAEA,gBAAgB,MAAsB;AACpC,WAAO,KAAK,QAAQ,IAAI,EAAE;AAAA,EAC5B;AAAA,EAEA,iBAAiB,MAA6B;AAC5C,UAAM,IAAI,KAAK,QAAQ,IAAI;AAC3B,UAAM,YAAY,EAAE;AACpB,QAAI,CAAC,UAAW,QAAO,CAAC;AAExB,WAAO;AAAA,MACL,mBAAmB,UAAU,oBAAoB,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;AAAA,MACzE,mBAAmB,UAAU,oBAAoB,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;AAAA,IAC3E;AAAA,EACF;AAAA,EAEA,eAAe,MAAsB;AACnC,WAAO,KAAK,QAAQ,IAAI,EAAE;AAAA,EAC5B;AACF;;;ACzHA,eAAsB,mBAAmB,QAA8C;AACrF,QAAM,SAAS,QAAQ,UAAU;AAEjC,MAAI,WAAW,QAAQ;AACrB,UAAM,YAAY,QAAQ,MAAM,cAAc;AAC9C,WAAO,IAAI,iBAAiB,SAAS;AAAA,EACvC;AAEA,MAAI,WAAW,OAAO;AACpB,UAAM,EAAE,iBAAAC,iBAAgB,IAAI,MAAM;AAClC,UAAM,EAAE,oBAAAC,oBAAmB,IAAI,MAAM;AAErC,UAAM,aAAa,QAAQ,KAAK,eAAe;AAAA,MAC7C;AAAA,MACA;AAAA,IACF;AAEA,UAAM,YAAY,IAAIA,oBAAmB;AACzC,WAAOD,iBAAgB,OAAO,YAAY,SAAS;AAAA,EACrD;AAEA,QAAM,IAAI,MAAM,0BAA0B,MAAM,4BAA4B;AAC9E;;;AC7BO,IAAM,sBAAN,MAAsD;AAAA,EAG3D,YACU,UAAkB,eAClB,UAAkB,eAClB,aAAqB,mBAC7B;AAHQ;AACA;AACA;AAAA,EACP;AAAA,EANH,OAAO;AAAA,EAQP,MAAM,UAA4C;AAChD,UAAM,SAAS,QAAQ,IAAI,KAAK,OAAO;AACvC,UAAM,OAAO,QAAQ,IAAI,KAAK,OAAO;AACrC,UAAM,UAAU,QAAQ,IAAI,KAAK,UAAU;AAE3C,QAAI,CAAC,UAAU,CAAC,KAAM,QAAO;AAE7B,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,SAAS,WAAW;AAAA,MACpB,QAAQ;AAAA,IACV;AAAA,EACF;AACF;;;ACzBA,IAAAE,aAA6B;AAC7B,IAAAC,eAAmC;AAQ5B,IAAM,wBAAN,MAAwD;AAAA,EAC7D,OAAO;AAAA,EACC;AAAA,EAER,YAAY,eAAuB;AACjC,UAAM,UAAM,yBAAa,eAAe,OAAO;AAC/C,SAAK,YAAQ,aAAAC,OAAU,GAAG;AAAA,EAC5B;AAAA,EAEA,MAAM,UAA4C;AAEhD,UAAM,WAAW,QAAQ,IAAI,QAAQ,QAAQ,IAAI;AACjD,QAAI,CAAC,SAAU,QAAO;AAEtB,UAAM,QAAQ,KAAK,MAAM,QAAQ;AACjC,QAAI,CAAC,MAAO,QAAO;AAEnB,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM,YAAY;AAAA,MAC3B,QAAQ;AAAA,IACV;AAAA,EACF;AACF;;;AC5BO,IAAM,gBAAN,MAAoB;AAAA,EACjB;AAAA,EAER,YAAY,WAA+B;AACzC,SAAK,YAAY;AAAA,EACnB;AAAA,EAEA,MAAM,UAAqC;AACzC,eAAW,YAAY,KAAK,WAAW;AACrC,YAAM,WAAW,MAAM,SAAS,QAAQ;AACxC,UAAI,SAAU,QAAO;AAAA,IACvB;AAGA,WAAO;AAAA,MACL,QAAQ;AAAA,MACR,MAAM;AAAA;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAEO,SAAS,oBAAoB,QAAwC;AAC1E,QAAM,YAAgC,CAAC;AAGvC,YAAU;AAAA,IACR,IAAI;AAAA,MACF,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,MACb,QAAQ,KAAK;AAAA,IACf;AAAA,EACF;AAGA,MAAI,QAAQ,aAAa,WAAW,OAAO,OAAO,YAAY;AAC5D,QAAI;AACF,gBAAU,KAAK,IAAI,sBAAsB,OAAO,MAAM,UAAU,CAAC;AAAA,IACnE,QAAQ;AAAA,IAER;AAAA,EACF;AAEA,SAAO,IAAI,cAAc,SAAS;AACpC;;;AClDA,qBAA6B;AAC7B,IAAAC,eAAmC;AAW5B,IAAM,gBAAN,MAAyC;AAAA,EACtC;AAAA,EAIR,YAAY,OAA+B;AACzC,QAAI,OAAO,UAAU,UAAU;AAC7B,YAAM,UAAM,6BAAa,OAAO,OAAO;AACvC,YAAM,aAAS,aAAAC,OAAU,GAAG;AAC5B,WAAK,WAAW,KAAK,WAAW,MAAM;AAAA,IACxC,OAAO;AACL,WAAK,WAAW,KAAK,WAAW,KAAK;AAAA,IACvC;AAAA,EACF;AAAA,EAEQ,WAAW,OAAqC;AACtD,WAAO,OAAO,QAAQ,KAAK,EAAE,IAAI,CAAC,CAAC,QAAQ,KAAK,OAAO;AAAA,MACrD;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,SAAS,MAAM,YAAY;AAAA,MAC3B,QAAQ,MAAM;AAAA,IAChB,EAAE;AAAA,EACJ;AAAA,EAEA,MAAM,SAAS,QAAwC;AACrD,WAAO,KAAK,SAAS,OAAO,CAAC,MAAM,EAAE,WAAW,MAAM;AAAA,EACxD;AAAA,EAEA,MAAM,qBAA6C;AACjD,WAAO,CAAC,GAAG,KAAK,QAAQ;AAAA,EAC1B;AAAA,EAEA,MAAM,aAAa,UAAkB,YAAyC;AAE5E,WAAO,CAAC;AAAA,EACV;AACF;;;ATxBA;;;AUxBO,IAAM,gBAA0B;AAAA;AAAA,EAErC;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AACF;AAEO,IAAM,qBAA+B;AAAA;AAAA,EAE1C;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;AChJO,IAAM,iBAAN,MAAqB;AAAA,EAClB;AAAA,EACA;AAAA,EAER,YAAY,WAA2B;AACrC,SAAK,eAAe,CAAC,GAAG,eAAe,GAAI,WAAW,qBAAqB,CAAC,CAAE;AAC9E,SAAK,oBAAoB,CAAC,GAAG,oBAAoB,GAAI,WAAW,qBAAqB,CAAC,CAAE;AAAA,EAC1F;AAAA,EAEA,SAAS,SAAqC;AAC5C,UAAM,UAAU,QAAQ,KAAK;AAI7B,eAAW,WAAW,KAAK,mBAAmB;AAC5C,UAAI,QAAQ,KAAK,OAAO,EAAG,QAAO;AAAA,IACpC;AAKA,UAAM,WAAW,KAAK,aAAa,OAAO;AAE1C,QAAI,SAAS,SAAS,GAAG;AACvB,YAAM,kBAAkB,SAAS,IAAI,CAAC,MAAM,KAAK,eAAe,CAAC,CAAC;AAClE,UAAI,gBAAgB,SAAS,WAAW,EAAG,QAAO;AAClD,UAAI,gBAAgB,SAAS,cAAc,EAAG,QAAO;AACrD,aAAO;AAAA,IACT;AAEA,WAAO,KAAK,eAAe,OAAO;AAAA,EACpC;AAAA,EAEQ,eAAe,SAAqC;AAC1D,UAAM,UAAU,QAAQ,KAAK;AAG7B,eAAW,WAAW,KAAK,mBAAmB;AAC5C,UAAI,QAAQ,KAAK,OAAO,EAAG,QAAO;AAAA,IACpC;AAGA,eAAW,WAAW,KAAK,cAAc;AACvC,UAAI,QAAQ,KAAK,OAAO,EAAG,QAAO;AAAA,IACpC;AAGA,WAAO;AAAA,EACT;AAAA,EAEQ,aAAa,SAA2B;AAG9C,UAAM,WAAqB,CAAC;AAC5B,QAAI,UAAU;AACd,QAAI,gBAAgB;AACpB,QAAI,gBAAgB;AACpB,QAAI,UAAU;AAEd,aAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAM,OAAO,QAAQ,CAAC;AAEtB,UAAI,SAAS;AACX,mBAAW;AACX,kBAAU;AACV;AAAA,MACF;AAEA,UAAI,SAAS,MAAM;AACjB,kBAAU;AACV,mBAAW;AACX;AAAA,MACF;AAEA,UAAI,SAAS,OAAO,CAAC,eAAe;AAClC,wBAAgB,CAAC;AACjB,mBAAW;AACX;AAAA,MACF;AAEA,UAAI,SAAS,OAAO,CAAC,eAAe;AAClC,wBAAgB,CAAC;AACjB,mBAAW;AACX;AAAA,MACF;AAEA,UAAI,CAAC,iBAAiB,CAAC,eAAe;AACpC,YAAI,SAAS,OAAO,QAAQ,IAAI,CAAC,MAAM,KAAK;AAC1C,mBAAS,KAAK,QAAQ,KAAK,CAAC;AAC5B,oBAAU;AACV;AAAA,QACF;AACA,YAAI,SAAS,KAAK;AAChB,mBAAS,KAAK,QAAQ,KAAK,CAAC;AAC5B,oBAAU;AACV;AAAA,QACF;AACA,YAAI,SAAS,OAAO,QAAQ,IAAI,CAAC,MAAM,KAAK;AAC1C,mBAAS,KAAK,QAAQ,KAAK,CAAC;AAC5B,oBAAU;AACV;AACA;AAAA,QACF;AACA,YAAI,SAAS,OAAO,QAAQ,IAAI,CAAC,MAAM,KAAK;AAC1C,mBAAS,KAAK,QAAQ,KAAK,CAAC;AAC5B,oBAAU;AACV;AACA;AAAA,QACF;AAAA,MACF;AAEA,iBAAW;AAAA,IACb;AAEA,QAAI,QAAQ,KAAK,EAAG,UAAS,KAAK,QAAQ,KAAK,CAAC;AAChD,WAAO,SAAS,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC;AAAA,EAC5C;AACF;;;AChHO,IAAM,kBAAmC;AAAA;AAAA,EAE9C;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SACE;AAAA,IACF,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AACF;AAEO,IAAM,eAAgC;AAAA;AAAA,EAE3C;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SACE;AAAA,IACF,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AAAA;AAAA,EAGA;AAAA,IACE,MAAM;AAAA,IACN,SACE;AAAA,IACF,UAAU;AAAA,IACV,UAAU;AAAA,EACZ;AACF;;;ACvIA,IAAM,iBAA8C;AAAA,EAClD,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AACZ;AAOO,IAAM,aAAN,MAAiB;AAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,QAA0B;AACpC,SAAK,SAAS;AACd,SAAK,oBAAoB,eAAe,OAAO,kBAAkB;AACjE,SAAK,WAAW,CAAC;AACjB,SAAK,mBAAmB,CAAC;AAGzB,QAAI,OAAO,SAAS,SAAS;AAC3B,iBAAW,OAAO,iBAAiB;AACjC,aAAK,SAAS,KAAK,EAAE,IAAI,CAAC;AAAA,MAC5B;AAAA,IACF;AACA,QAAI,OAAO,SAAS,KAAK;AACvB,iBAAW,OAAO,cAAc;AAC9B,aAAK,SAAS,KAAK,EAAE,IAAI,CAAC;AAAA,MAC5B;AAAA,IACF;AAGA,eAAW,MAAM,OAAO,iBAAiB;AACvC,YAAM,MAAqB;AAAA,QACzB,MAAM,GAAG;AAAA,QACT,SAAS,IAAI,OAAO,GAAG,SAAS,GAAG;AAAA,QACnC,UAAU,GAAG;AAAA,QACb,UAAU;AAAA,MACZ;AACA,WAAK,SAAS,KAAK,EAAE,KAAK,QAAQ,GAAG,OAAO,CAAC;AAAA,IAC/C;AAGA,eAAW,YAAY,KAAK,UAAU;AACpC,YAAM,WAAW,OAAO,kBAAkB,IAAI,SAAS,IAAI,IAAI;AAC/D,UAAI,UAAU;AACZ,iBAAS,SAAS;AAAA,MACpB;AAAA,IACF;AAGA,eAAW,SAAS,OAAO,WAAW;AACpC,WAAK,iBAAiB,KAAK,IAAI,OAAO,MAAM,OAAO,CAAC;AAAA,IACtD;AAAA,EACF;AAAA,EAEA,KAAK,MAA6B;AAChC,QAAI,CAAC,KAAK,OAAO,WAAW,KAAK,WAAW,GAAG;AAC7C,aAAO,EAAE,YAAY,OAAO,SAAS,CAAC,EAAE;AAAA,IAC1C;AAEA,UAAM,UAAsB,CAAC;AAE7B,eAAW,YAAY,KAAK,UAAU;AAEpC,UAAI,eAAe,SAAS,IAAI,QAAQ,IAAI,KAAK,mBAAmB;AAClE;AAAA,MACF;AAGA,YAAM,QAAQ,IAAI,OAAO,SAAS,IAAI,QAAQ,QAAQ,SAAS,IAAI,QAAQ,KAAK;AAEhF,UAAI;AACJ,cAAQ,QAAQ,MAAM,KAAK,IAAI,OAAO,MAAM;AAE1C,cAAM,UAAU,MAAM,CAAC,KAAK,MAAM,CAAC;AACnC,cAAM,QAAQ,MAAM,CAAC,IAAI,MAAM,QAAQ,MAAM,CAAC,EAAE,QAAQ,MAAM,CAAC,CAAC,IAAI,MAAM;AAC1E,cAAM,MAAM,QAAQ,QAAQ;AAG5B,YAAI,KAAK,cAAc,OAAO,GAAG;AAC/B;AAAA,QACF;AAEA,gBAAQ,KAAK;AAAA,UACX,aAAa,SAAS,IAAI;AAAA,UAC1B,UAAU,SAAS,IAAI;AAAA,UACvB,UAAU,SAAS,IAAI;AAAA,UACvB;AAAA,UACA;AAAA,UACA;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO,EAAE,YAAY,QAAQ,SAAS,GAAG,QAAQ;AAAA,EACnD;AAAA,EAEA,UAAU,WAA0C;AAClD,QAAI,cAAc,WAAW,KAAK,OAAO,UAAU;AACjD,aAAO,KAAK,OAAO;AAAA,IACrB;AACA,QAAI,cAAc,YAAY,KAAK,OAAO,WAAW;AACnD,aAAO,KAAK,OAAO;AAAA,IACrB;AACA,WAAO,KAAK,OAAO;AAAA,EACrB;AAAA,EAEA,iBAAiB,OAAiB,WAA0C;AAE1E,UAAM,WAAW,KAAK,SAAS,KAAK,CAAC,MAAM,EAAE,IAAI,SAAS,MAAM,WAAW;AAC3E,QAAI,UAAU,QAAQ;AACpB,aAAO,SAAS;AAAA,IAClB;AAGA,WAAO,KAAK,UAAU,SAAS;AAAA,EACjC;AAAA,EAEQ,cAAc,OAAwB;AAC5C,eAAW,MAAM,KAAK,kBAAkB;AACtC,UAAI,GAAG,KAAK,KAAK,EAAG,QAAO;AAAA,IAC7B;AACA,WAAO;AAAA,EACT;AACF;AAEO,SAAS,gBAAgB,GAAgB,GAAwB;AACtE,SAAO,eAAe,CAAC,IAAI,eAAe,CAAC;AAC7C;;;AChLA,yBAA2B;AAS3B,IAAM,iBAAgC;AAAA,EACpC,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,aAAa;AACf;AAEO,IAAM,YAAN,MAAgB;AAAA,EACb;AAAA,EAER,YAAY,QAAiC;AAC3C,SAAK,SAAS,EAAE,GAAG,gBAAgB,GAAG,OAAO;AAAA,EAC/C;AAAA,EAEA,UAAU,OAAuB;AAC/B,YAAQ,KAAK,OAAO,UAAU;AAAA,MAC5B,KAAK;AACH,eAAO,KAAK,OAAO;AAAA,MACrB,KAAK,QAAQ;AACX,cAAM,WAAO,+BAAW,QAAQ,EAAE,OAAO,KAAK,EAAE,OAAO,KAAK,EAAE,MAAM,GAAG,CAAC;AACxE,eAAO,aAAa,IAAI;AAAA,MAC1B;AAAA,MACA,KAAK;AAAA,MACL,SAAS;AACP,YAAI,MAAM,UAAU,KAAK,OAAO,YAAY;AAC1C,iBAAO,KAAK,OAAO;AAAA,QACrB;AACA,eAAO,KAAK,OAAO,cAAc,MAAM,MAAM,CAAC,KAAK,OAAO,UAAU;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS,MAAc,SAA6B;AAClD,QAAI,QAAQ,WAAW,EAAG,QAAO;AAGjC,UAAM,SAAS,CAAC,GAAG,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAE5D,QAAI,SAAS;AACb,eAAW,SAAS,QAAQ;AAC1B,YAAM,SAAS,KAAK,UAAU,MAAM,OAAO;AAC3C,eAAS,OAAO,MAAM,GAAG,MAAM,KAAK,IAAI,SAAS,OAAO,MAAM,MAAM,GAAG;AAAA,IACzE;AACA,WAAO;AAAA,EACT;AACF;;;AC3BA,IAAM,mBAAmB,oBAAI,IAAI;AAAA;AAAA,EAE/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAED,IAAM,wBAAwB,oBAAI,IAAI,CAAC,cAAc,eAAe,MAAM,mBAAmB,CAAC;AAG9F,IAAM,oBAA8B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAQA,IAAM,mBAAmC;AAAA,EACvC,EAAE,SAAS,OAAO,WAAW,OAAO,mBAAmB,4BAA4B;AAAA,EACnF,EAAE,SAAS,QAAQ,WAAW,OAAO,mBAAmB,2BAA2B;AAAA,EACnF,EAAE,SAAS,QAAQ,WAAW,OAAO,mBAAmB,6BAA6B;AAAA,EACrF,EAAE,SAAS,OAAO,WAAW,QAAQ,mBAAmB,oBAAoB;AAAA,EAC5E,EAAE,SAAS,SAAS,WAAW,aAAa,mBAAmB,4BAA4B;AAC7F;AAEA,SAAS,qBACP,KACA,WACoC;AACpC,MAAI,cAAc,OAAO;AAEvB,UAAM,QAAQ,IAAI,YAAY,GAAG;AACjC,QAAI,QAAQ,GAAG;AACb,aAAO,EAAE,MAAM,IAAI,MAAM,GAAG,KAAK,GAAG,SAAS,IAAI,MAAM,QAAQ,CAAC,EAAE;AAAA,IACpE;AACA,WAAO,EAAE,MAAM,IAAI;AAAA,EACrB;AACA,MAAI,cAAc,QAAQ;AAExB,UAAM,QAAQ,IAAI,MAAM,kCAAkC;AAC1D,QAAI,OAAO;AACT,aAAO,EAAE,MAAM,MAAM,CAAC,GAAI,SAAS,MAAM,CAAC,EAAE;AAAA,IAC9C;AACA,WAAO,EAAE,MAAM,IAAI;AAAA,EACrB;AACA,MAAI,cAAc,aAAa;AAE7B,UAAM,QAAQ,IAAI,QAAQ,GAAG;AAC7B,QAAI,QAAQ,GAAG;AACb,aAAO,EAAE,MAAM,IAAI,MAAM,GAAG,KAAK,GAAG,SAAS,IAAI,MAAM,QAAQ,CAAC,EAAE;AAAA,IACpE;AACA,WAAO,EAAE,MAAM,IAAI;AAAA,EACrB;AACA,SAAO,EAAE,MAAM,IAAI;AACrB;AAMO,SAAS,oBAAoB,SAA4C;AAC9E,QAAM,UAAU,QAAQ,KAAK;AAG7B,QAAM,oBAAoB,kBAAkB,KAAK,CAAC,MAAM,EAAE,KAAK,OAAO,CAAC;AAGvE,MAAI,eAAe,KAAK,OAAO,GAAG;AAChC,WAAO;AAAA,MACL,SAAS;AAAA,MACT,UAAU,CAAC;AAAA,MACX,OAAO,CAAC;AAAA,MACR,KAAK;AAAA,MACL,mBAAmB;AAAA,MACnB,oBAAoB;AAAA,IACtB;AAAA,EACF;AAEA,aAAW,WAAW,kBAAkB;AACtC,QAAI,CAAC,QAAQ,kBAAkB,KAAK,OAAO,EAAG;AAG9C,UAAM,WAAW,QAAQ,MAAM,QAAQ,iBAAiB;AACxD,QAAI,CAAC,SAAU;AAEf,UAAM,kBAAkB,QAAQ,MAAM,SAAS,QAAS,SAAS,CAAC,EAAE,MAAM;AAC1E,UAAM,SAAS,SAAS,eAAe;AAEvC,UAAM,WAA4B,CAAC;AACnC,UAAM,QAAkB,CAAC;AACzB,QAAI,qBAAqB;AAEzB,aAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAM,QAAQ,OAAO,CAAC;AAEtB,UAAI,MAAM,WAAW,GAAG,GAAG;AACzB,cAAM,KAAK,KAAK;AAEhB,cAAM,WAAW,MAAM,SAAS,GAAG,IAAI,MAAM,MAAM,GAAG,MAAM,QAAQ,GAAG,CAAC,IAAI;AAC5E,YAAI,sBAAsB,IAAI,QAAQ,GAAG;AACvC,+BAAqB;AAAA,QACvB;AAEA,YAAI,iBAAiB,IAAI,QAAQ,KAAK,MAAM,SAAS,GAAG,GAAG;AACzD,cAAI,CAAC,MAAM,SAAS,GAAG,EAAG;AAAA,QAC5B;AACA;AAAA,MACF;AAGA,UAAI,QAAQ,YAAY,UAAU,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,IAAI;AACnF;AAAA,MACF;AAGA,UACE,QAAQ,YAAY,UACnB,MAAM,WAAW,GAAG,KACnB,MAAM,WAAW,IAAI,KACrB,MAAM,WAAW,SAAS,KAC1B,MAAM,WAAW,UAAU,KAC3B,MAAM,WAAW,MAAM,IACzB;AACA;AAAA,MACF;AAEA,YAAM,EAAE,MAAM,QAAQ,IAAI,qBAAqB,OAAO,QAAQ,SAAS;AACvE,UAAI,MAAM;AACR,iBAAS,KAAK,EAAE,MAAM,SAAS,WAAW,QAAQ,UAAU,CAAC;AAAA,MAC/D;AAAA,IACF;AAEA,WAAO;AAAA,MACL,SAAS,QAAQ;AAAA,MACjB;AAAA,MACA;AAAA,MACA,KAAK;AAAA,MACL;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AACT;AAGA,SAAS,SAAS,OAAyB;AACzC,QAAM,SAAmB,CAAC;AAC1B,MAAI,UAAU;AACd,MAAI,gBAAgB;AACpB,MAAI,gBAAgB;AAEpB,WAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,UAAM,KAAK,MAAM,CAAC;AAElB,QAAI,OAAO,OAAO,CAAC,eAAe;AAChC,sBAAgB,CAAC;AACjB;AAAA,IACF;AACA,QAAI,OAAO,OAAO,CAAC,eAAe;AAChC,sBAAgB,CAAC;AACjB;AAAA,IACF;AAEA,QAAI,OAAO,OAAO,CAAC,iBAAiB,CAAC,eAAe;AAClD,UAAI,QAAS,QAAO,KAAK,OAAO;AAChC,gBAAU;AAAA,IACZ,OAAO;AACL,iBAAW;AAAA,IACb;AAAA,EACF;AACA,MAAI,QAAS,QAAO,KAAK,OAAO;AAChC,SAAO;AACT;;;AC5MA,IAAM,qBAAqB;AAE3B,SAAS,YAAY,IAAyB;AAC5C,SAAO,YAAY,QAAQ,EAAE;AAC/B;AAwBA,eAAe,iBAAiB,MAAyC;AACvE,QAAM,cAAc,KAAK,WAAW,GAAG,IACnC,IAAI,mBAAmB,KAAK,MAAM,CAAC,CAAC,CAAC,KACrC,mBAAmB,IAAI;AAC3B,QAAM,MAAM,8BAA8B,WAAW;AAErD,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,YAAY,kBAAkB,EAAE,CAAC;AAAA,EACpE,QAAQ;AACN,WAAO,SAAS,MAAM,KAAK;AAAA,EAC7B;AAEA,MAAI,CAAC,IAAI,GAAI,QAAO,SAAS,MAAM,KAAK;AAExC,QAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,QAAM,SAAS,KAAK,WAAW,IAAI,QAAQ;AAC3C,QAAM,gBAAgB,SAAS,KAAK,WAAW,MAAM,IAAI;AACzD,QAAM,UAAU,eAAe,WAAW,CAAC;AAC3C,QAAM,oBAAoB,CAAC,EACzB,QAAQ,YAAY,KACpB,QAAQ,SAAS,KACjB,QAAQ,aAAa;AAIvB,MAAI;AACJ,MAAI;AACF,UAAM,QAAQ,mDAAmD,WAAW;AAC5E,UAAM,QAAQ,MAAM,MAAM,OAAO,EAAE,QAAQ,YAAY,kBAAkB,EAAE,CAAC;AAC5E,QAAI,MAAM,IAAI;AACZ,YAAM,SAAU,MAAM,MAAM,KAAK;AACjC,wBAAkB,OAAO;AAAA,IAC3B;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AAAA,IACL;AAAA,IACA,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,WAAW,KAAK,OAAO,SAAS,IAAI,IAAI,KAAK,KAAK,KAAK,SAAS,CAAC,IAAI;AAAA,IACrE,YAAY,KAAK,OAAO,UAAU,IAAI,IAAI,KAAK,KAAK,KAAK,UAAU,CAAC,IAAI;AAAA,IACxE,eAAe;AAAA,IACf;AAAA,IACA,iBAAiB,KAAK,aAAa;AAAA,IACnC,eAAe,CAAC,CAAC,KAAK;AAAA,IACtB,WAAW,CAAC,EAAE,KAAK,UAAU,KAAK,OAAO,SAAS;AAAA,IAClD;AAAA,IACA,aAAa,KAAK;AAAA,IAClB,SAAS,KAAK;AAAA,EAChB;AACF;AA0BA,eAAe,kBAAkB,MAAyC;AACxE,QAAM,MAAM,yBAAyB,mBAAmB,IAAI,CAAC;AAE7D,MAAI;AACJ,MAAI;AACF,UAAM,MAAM,MAAM,KAAK,EAAE,QAAQ,YAAY,kBAAkB,EAAE,CAAC;AAAA,EACpE,QAAQ;AACN,WAAO,SAAS,MAAM,MAAM;AAAA,EAC9B;AAEA,MAAI,CAAC,IAAI,GAAI,QAAO,SAAS,MAAM,MAAM;AAEzC,QAAM,OAAQ,MAAM,IAAI,KAAK;AAG7B,MAAI;AACJ,aAAW,SAAS,OAAO,OAAO,KAAK,QAAQ,GAAG;AAChD,eAAW,QAAQ,OAAO;AACxB,YAAM,IAAI,IAAI,KAAK,KAAK,WAAW;AACnC,UAAI,CAAC,YAAY,IAAI,SAAU,YAAW;AAAA,IAC5C;AAAA,EACF;AAGA,QAAM,cAAc,KAAK,KAAK,gBAAgB,CAAC;AAC/C,QAAM,UAAU,CAAC,EACf,KAAK,KAAK,aACV,YAAY,QAAQ,KACpB,YAAY,YAAY,KACxB,YAAY,QAAQ,KACpB,YAAY,UAAU;AAIxB,QAAM,gBAAgB,CAAC,EAAE,KAAK,KAAK,cAAc,KAAK,KAAK;AAG3D,MAAI;AACJ,MAAI;AACF,UAAM,WAAW,sCAAsC,mBAAmB,IAAI,CAAC;AAC/E,UAAM,WAAW,MAAM,MAAM,UAAU;AAAA,MACrC,QAAQ,YAAY,kBAAkB;AAAA,MACtC,SAAS,EAAE,QAAQ,mBAAmB;AAAA,IACxC,CAAC;AACD,QAAI,SAAS,IAAI;AACf,YAAM,YAAa,MAAM,SAAS,KAAK;AACvC,wBAAkB,UAAU,MAAM;AAAA,IACpC;AAAA,EACF,QAAQ;AAAA,EAER;AAEA,SAAO;AAAA,IACL;AAAA,IACA,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,YACE,KAAK,KAAK,SAAS,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,SAAS,CAAC,EAAG,WAAW,IAAI;AAAA,IAClF,eAAe,KAAK,KAAK;AAAA,IACzB;AAAA,IACA,iBAAiB,gBAAgB,IAAI;AAAA,IACrC,eAAe;AAAA,IACf,WAAW,CAAC,EAAE,KAAK,KAAK,eAAe,KAAK,KAAK,YAAY,SAAS;AAAA,IACtE,mBAAmB;AAAA;AAAA,IACnB,aAAa,KAAK,KAAK;AAAA,IACvB,SAAS,KAAK,KAAK;AAAA,EACrB;AACF;AAIA,SAAS,SAAS,MAAc,WAAwC;AACtE,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,QAAQ;AAAA,IACR,eAAe;AAAA,IACf,WAAW;AAAA,IACX,mBAAmB;AAAA,EACrB;AACF;AAIA,IAAM,QAAQ,oBAAI,IAA8B;AAChD,IAAM,iBAAiB;AAEvB,SAAS,SAAS,MAAc,WAA8B;AAC5D,SAAO,GAAG,SAAS,IAAI,IAAI;AAC7B;AAIA,eAAsB,sBACpB,MACA,WAC2B;AAC3B,QAAM,MAAM,SAAS,MAAM,SAAS;AACpC,QAAM,SAAS,MAAM,IAAI,GAAG;AAC5B,MAAI,OAAQ,QAAO;AAEnB,MAAI;AACJ,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,eAAS,MAAM,iBAAiB,IAAI;AACpC;AAAA,IACF,KAAK;AACH,eAAS,MAAM,kBAAkB,IAAI;AACrC;AAAA,IACF;AACE,eAAS,SAAS,MAAM,SAAS;AAAA,EACrC;AAGA,MAAI,MAAM,QAAQ,gBAAgB;AAChC,UAAM,WAAW,MAAM,KAAK,EAAE,KAAK,EAAE;AACrC,QAAI,aAAa,OAAW,OAAM,OAAO,QAAQ;AAAA,EACnD;AACA,QAAM,IAAI,KAAK,MAAM;AAErB,SAAO;AACT;;;ACtOA,IAAMC,sBAAqB;AAG3B,SAAS,aAAa,WAA8B;AAClD,UAAQ,WAAW;AAAA,IACjB,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT,KAAK;AACH,aAAO;AAAA,IACT;AACE,aAAO;AAAA,EACX;AACF;AA4BA,SAAS,cAAc,MAAuD;AAC5E,QAAM,WAAW,KAAK,UAAU,KAAK,CAAC,MAAM,EAAE,SAAS,SAAS;AAChE,MAAI,CAAC,SAAU,QAAO;AAItB,QAAM,WAAW,SAAS;AAC1B,QAAM,eAAe,SAAS,MAAM,YAAY;AAChD,MAAI,cAAc;AAChB,UAAM,QAAQ,WAAW,aAAa,CAAC,CAAE;AACzC,QAAI,SAAS,EAAK,QAAO;AACzB,QAAI,SAAS,EAAK,QAAO;AACzB,QAAI,SAAS,EAAK,QAAO;AACzB,WAAO;AAAA,EACT;AAEA,SAAO;AACT;AAEA,SAAS,oBAAoB,MAAmC;AAC9D,aAAW,YAAY,KAAK,YAAY,CAAC,GAAG;AAC1C,eAAW,SAAS,SAAS,UAAU,CAAC,GAAG;AACzC,iBAAW,SAAS,MAAM,UAAU,CAAC,GAAG;AACtC,YAAI,MAAM,MAAO,QAAO,MAAM;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,QAAQ,MAA0B;AACzC,SAAO;AAAA,IACL,IAAI,KAAK;AAAA,IACT,SAAS,KAAK,WAAW,KAAK,SAAS,MAAM,GAAG,GAAG,KAAK;AAAA,IACxD,UAAU,cAAc,IAAI;AAAA,IAC5B,SAAS,oBAAoB,IAAI;AAAA,IACjC,SAAS,KAAK,WAAW,CAAC;AAAA,EAC5B;AACF;AAKA,eAAsB,qBACpB,MACA,WACA,SAC8B;AAC9B,QAAM,OAAwB;AAAA,IAC5B,SAAS,EAAE,MAAM,WAAW,aAAa,SAAS,EAAE;AAAA,EACtD;AACA,MAAI,QAAS,MAAK,UAAU;AAE5B,MAAI;AACF,UAAM,MAAM,MAAM,MAAM,gCAAgC;AAAA,MACtD,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,IAAI;AAAA,MACzB,QAAQ,YAAY,QAAQA,mBAAkB;AAAA,IAChD,CAAC;AAED,QAAI,CAAC,IAAI,IAAI;AACX,aAAO,EAAE,SAAS,MAAM,WAAW,iBAAiB,CAAC,GAAG,OAAO,YAAY,IAAI,MAAM,GAAG;AAAA,IAC1F;AAEA,UAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,kBAAkB,KAAK,SAAS,CAAC,GAAG,IAAI,OAAO;AAAA,IACjD;AAAA,EACF,SAAS,KAAK;AACZ,WAAO;AAAA,MACL,SAAS;AAAA,MACT;AAAA,MACA,iBAAiB,CAAC;AAAA,MAClB,OAAO,eAAe,QAAQ,IAAI,UAAU;AAAA,IAC9C;AAAA,EACF;AACF;AAKA,eAAsB,0BACpB,UACgC;AAChC,MAAI,SAAS,WAAW,EAAG,QAAO,CAAC;AAGnC,MAAI,SAAS,WAAW,GAAG;AACzB,UAAM,MAAM,SAAS,CAAC;AACtB,WAAO,CAAC,MAAM,qBAAqB,IAAI,MAAM,IAAI,WAAW,IAAI,OAAO,CAAC;AAAA,EAC1E;AAEA,QAAM,UAAU,SAAS,IAAI,CAAC,QAAQ;AACpC,UAAM,IAAqB;AAAA,MACzB,SAAS,EAAE,MAAM,IAAI,MAAM,WAAW,aAAa,IAAI,SAAS,EAAE;AAAA,IACpE;AACA,QAAI,IAAI,QAAS,GAAE,UAAU,IAAI;AACjC,WAAO;AAAA,EACT,CAAC;AAED,MAAI;AACF,UAAM,MAAM,MAAM,MAAM,qCAAqC;AAAA,MAC3D,QAAQ;AAAA,MACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,MAC9C,MAAM,KAAK,UAAU,EAAE,QAAQ,CAAC;AAAA,MAChC,QAAQ,YAAY,QAAQA,mBAAkB;AAAA,IAChD,CAAC;AAED,QAAI,CAAC,IAAI,IAAI;AACX,aAAO,SAAS,IAAI,CAAC,SAAS;AAAA,QAC5B,SAAS,IAAI;AAAA,QACb,WAAW,IAAI;AAAA,QACf,iBAAiB,CAAC;AAAA,QAClB,OAAO,YAAY,IAAI,MAAM;AAAA,MAC/B,EAAE;AAAA,IACJ;AAEA,UAAM,OAAQ,MAAM,IAAI,KAAK;AAC7B,WAAO,KAAK,QAAQ,IAAI,CAAC,QAAQ,OAAO;AAAA,MACtC,SAAS,SAAS,CAAC,EAAG;AAAA,MACtB,WAAW,SAAS,CAAC,EAAG;AAAA,MACxB,kBAAkB,OAAO,SAAS,CAAC,GAAG,IAAI,OAAO;AAAA,IACnD,EAAE;AAAA,EACJ,SAAS,KAAK;AACZ,UAAM,SAAS,eAAe,QAAQ,IAAI,UAAU;AACpD,WAAO,SAAS,IAAI,CAAC,SAAS;AAAA,MAC5B,SAAS,IAAI;AAAA,MACb,WAAW,IAAI;AAAA,MACf,iBAAiB,CAAC;AAAA,MAClB,OAAO;AAAA,IACT,EAAE;AAAA,EACJ;AACF;;;AClMO,SAAS,oBAAoB,GAAW,GAAmB;AAChE,MAAI,MAAM,EAAG,QAAO;AACpB,MAAI,EAAE,WAAW,EAAG,QAAO,EAAE;AAC7B,MAAI,EAAE,WAAW,EAAG,QAAO,EAAE;AAG7B,MAAI,EAAE,SAAS,EAAE,OAAQ,EAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC;AAEvC,QAAM,IAAI,EAAE;AACZ,QAAM,IAAI,EAAE;AACZ,QAAM,MAAM,IAAI,MAAc,IAAI,CAAC;AACnC,WAAS,IAAI,GAAG,KAAK,GAAG,IAAK,KAAI,CAAC,IAAI;AAEtC,WAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,QAAI,SAAS,IAAI,CAAC;AAClB,QAAI,CAAC,IAAI;AACT,aAAS,IAAI,GAAG,KAAK,GAAG,KAAK;AAC3B,YAAM,OAAO,IAAI,CAAC;AAClB,UAAI,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG;AACzB,YAAI,CAAC,IAAI;AAAA,MACX,OAAO;AACL,YAAI,CAAC,IAAI,IAAI,KAAK,IAAI,QAAQ,MAAM,IAAI,IAAI,CAAC,CAAE;AAAA,MACjD;AACA,eAAS;AAAA,IACX;AAAA,EACF;AACA,SAAO,IAAI,CAAC;AACd;AAEO,SAAS,qBAAqB,GAAW,GAAmB;AACjE,QAAM,SAAS,KAAK,IAAI,EAAE,QAAQ,EAAE,MAAM;AAC1C,MAAI,WAAW,EAAG,QAAO;AACzB,SAAO,IAAI,oBAAoB,GAAG,CAAC,IAAI;AACzC;AAQO,SAAS,cAAc,MAAsB;AAElD,QAAM,WAAW,KAAK,QAAQ,aAAa,EAAE;AAE7C,SAAO,SAAS,QAAQ,UAAU,EAAE,EAAE,YAAY;AACpD;AAYO,SAAS,gBAAgB,MAAc,QAA8C;AAC1F,QAAM,aAAa,cAAc,IAAI;AAErC,MAAI;AACJ,MAAI,eAAe;AAEnB,aAAW,UAAU,QAAQ;AAC3B,UAAM,mBAAmB,cAAc,MAAM;AAG7C,QAAI,qBAAqB,WAAY,QAAO;AAE5C,UAAM,WAAW,oBAAoB,YAAY,gBAAgB;AACjE,UAAM,aAAa,qBAAqB,YAAY,gBAAgB;AAMpE,UAAM,aACJ,aAAa,KAAM,aAAa,KAAK,WAAW,UAAU,KAAM,cAAc;AAEhF,QAAI,cAAc,WAAW,cAAc;AACzC,qBAAe;AACf,kBAAY,EAAE,QAAQ,UAAU,WAAW;AAAA,IAC7C;AAAA,EACF;AAEA,SAAO;AACT;;;ACvFO,IAAM,wBAAkC;AAAA;AAAA,EAE7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AACF;AAEO,IAAM,yBAAmC;AAAA;AAAA,EAE9C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,0BAAoC;AAAA;AAAA,EAE/C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,6BAAuC;AAAA,EAClD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAWO,SAAS,qBACd,WACA,eACA,eACA,uBACkB;AAClB,QAAM,OACJ,cAAc,QACV,wBACA,cAAc,SACZ,yBACA,CAAC;AAET,SAAO;AAAA,IACL,WAAW,CAAC,GAAG,MAAM,GAAG,aAAa;AAAA,IACrC,WAAW,CAAC,GAAG,yBAAyB,GAAG,aAAa;AAAA,IACxD,mBAAmB;AAAA,MACjB,GAAG;AAAA,MACH,GAAG,sBAAsB,IAAI,CAAC,MAAM,IAAI,OAAO,CAAC,CAAC;AAAA,IACnD;AAAA,EACF;AACF;AAKO,SAAS,cAAc,MAAc,WAA8B;AACxE,SAAO,UAAU,SAAS,IAAI;AAChC;AAKO,SAAS,cACd,MACA,WACA,mBACS;AACT,MAAI,UAAU,SAAS,IAAI,EAAG,QAAO;AACrC,SAAO,kBAAkB,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC;AACnD;;;AClPA,IAAM,qBAAqC;AAAA,EACzC,YAAY;AAAA,EACZ,oBAAoB;AACtB;AAEA,IAAMC,kBAA+C;AAAA,EACnD,MAAM;AAAA,EACN,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AACZ;AAEA,SAAS,YAAY,GAAiB,GAA+B;AACnE,SAAOA,gBAAe,CAAC,KAAKA,gBAAe,CAAC,IAAI,IAAI;AACtD;AAEO,SAAS,kBACd,UACA,OACA,gBACAC,gBACAC,gBACA,aAA6B,oBACjB;AACZ,QAAM,UAAwB,CAAC;AAC/B,MAAI,cAA4B;AAIhC,MAAI,CAAC,SAAS,QAAQ;AACpB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ,YAAY,SAAS,IAAI,uBAAuB,SAAS,SAAS;AAAA,IAC5E,CAAC;AACD,kBAAc;AAAA,EAChB;AAEA,MAAID,gBAAe;AACjB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ,YAAY,SAAS,IAAI;AAAA,IACnC,CAAC;AACD,kBAAc;AAAA,EAChB;AAGA,aAAW,QAAQ,OAAO;AACxB,YAAQ,KAAK;AAAA,MACX,MAAM;AAAA,MACN,UAAU,KAAK;AAAA,MACf,QAAQ,GAAG,KAAK,EAAE,KAAK,KAAK,OAAO,GAAG,KAAK,UAAU,cAAc,KAAK,OAAO,MAAM,EAAE;AAAA,IACzF,CAAC;AACD,kBAAc,YAAY,aAAa,KAAK,QAAQ;AAAA,EACtD;AAGA,MAAIC,kBAAiB,QAAQ,WAAW,GAAG;AACzC,WAAO;AAAA,MACL,SAAS,SAAS;AAAA,MAClB,WAAW,SAAS;AAAA,MACpB,aAAa;AAAA,MACb,SAAS,CAAC;AAAA,MACV,iBAAiB;AAAA,MACjB,gBAAgB;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAGA,MAAI,CAACA,kBAAiB,SAAS,QAAQ;AAErC,QAAI,SAAS,WAAW;AACtB,YAAM,WAAW,KAAK,IAAI,IAAI,SAAS,UAAU,QAAQ,MAAM,MAAO,KAAK,KAAK;AAChF,UAAI,UAAU,GAAG;AACf,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,UAAU;AAAA,UACV,QAAQ,WAAW,KAAK,MAAM,OAAO,CAAC;AAAA,QACxC,CAAC;AACD,sBAAc,YAAY,aAAa,MAAM;AAAA,MAC/C,WAAW,UAAU,WAAW,YAAY;AAC1C,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,UAAU;AAAA,UACV,QAAQ,WAAW,KAAK,MAAM,OAAO,CAAC,yBAAyB,WAAW,UAAU;AAAA,QACtF,CAAC;AACD,sBAAc,YAAY,aAAa,QAAQ;AAAA,MACjD;AAAA,IACF;AAGA,QAAI,SAAS,oBAAoB,QAAW;AAC1C,UAAI,SAAS,kBAAkB,WAAW,oBAAoB;AAC5D,cAAM,MAAM,SAAS,kBAAkB,KAAK,SAAS;AACrD,gBAAQ,KAAK;AAAA,UACX,MAAM;AAAA,UACN,UAAU;AAAA,UACV,QAAQ,GAAG,SAAS,eAAe,iCAAiC,WAAW,kBAAkB;AAAA,QACnG,CAAC;AACD,sBAAc,YAAY,aAAa,GAAG;AAAA,MAC5C;AAAA,IACF;AAGA,QAAI,gBAAgB;AAClB,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ,eAAe,eAAe,MAAM,qBAAqB,eAAe,QAAQ;AAAA,MAC1F,CAAC;AACD,oBAAc,YAAY,aAAa,MAAM;AAAA,IAC/C;AAGA,QAAI,SAAS,mBAAmB;AAC9B,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,MACV,CAAC;AACD,oBAAc,YAAY,aAAa,QAAQ;AAAA,IACjD;AAGA,QAAI,CAAC,SAAS,eAAe;AAC3B,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,MACV,CAAC;AACD,oBAAc,YAAY,aAAa,KAAK;AAAA,IAC9C;AAGA,QAAI,CAAC,SAAS,WAAW;AACvB,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,MACV,CAAC;AACD,oBAAc,YAAY,aAAa,KAAK;AAAA,IAC9C;AAGA,QAAI,CAAC,SAAS,SAAS;AACrB,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ;AAAA,MACV,CAAC;AACD,oBAAc,YAAY,aAAa,KAAK;AAAA,IAC9C;AAGA,QAAI,SAAS,oBAAoB,UAAa,SAAS,mBAAmB,GAAG;AAC3E,cAAQ,KAAK;AAAA,QACX,MAAM;AAAA,QACN,UAAU;AAAA,QACV,QAAQ,GAAG,SAAS,eAAe;AAAA,MACrC,CAAC;AAAA,IACH;AAAA,EACF;AAGA,MAAI;AACJ,MAAIF,gBAAe,WAAW,KAAKA,gBAAe,UAAU,GAAG;AAC7D,qBAAiB;AAAA,EACnB,WAAWA,gBAAe,WAAW,KAAKA,gBAAe,QAAQ,GAAG;AAClE,qBAAiB;AAAA,EACnB,OAAO;AACL,qBAAiB;AAAA,EACnB;AAEA,SAAO;AAAA,IACL,SAAS,SAAS;AAAA,IAClB,WAAW,SAAS;AAAA,IACpB;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB;AAAA,IACA;AAAA,EACF;AACF;;;ACjLA,IAAMG,kBAA2C;AAAA,EAC/C,SAAS;AAAA,EACT,QAAQ;AAAA,IACN,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,iBAAiB;AAAA,EACnB;AAAA,EACA,iBAAiB;AAAA,IACf,cAAc;AAAA,IACd,sBAAsB;AAAA,EACxB;AAAA,EACA,SAAS;AAAA,EACT,WAAW,CAAC;AAAA,EACZ,WAAW,CAAC;AAAA,EACZ,oBAAoB,CAAC;AAAA,EACrB,wBAAwB;AAC1B;AAKA,eAAsB,gBACpB,SACA,SAAmCA,iBACV;AACzB,MAAI,CAAC,OAAO,SAAS;AACnB,WAAO,cAAc,SAAS,iCAAiC;AAAA,EACjE;AAEA,QAAM,SAAS,oBAAoB,OAAO;AAC1C,MAAI,CAAC,QAAQ;AACX,WAAO,cAAc,SAAS,kCAAkC;AAAA,EAClE;AAGA,MAAI,OAAO,mBAAmB;AAC5B,WAAO,cAAc,SAAS,yCAAyC;AAAA,EACzE;AAGA,MAAI,OAAO,0BAA0B,OAAO,oBAAoB;AAC9D,WAAO,cAAc,SAAS,2CAA2C;AAAA,EAC3E;AAGA,MAAI,OAAO,SAAS,WAAW,GAAG;AAChC,WAAO,cAAc,SAAS,kCAAkC;AAAA,EAClE;AAGA,QAAM,aAAa,CAAC,GAAG,IAAI,IAAI,OAAO,SAAS,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACvE,QAAM,oBAAoB,IAAI;AAAA,IAC5B,WAAW,IAAI,CAAC,QAAQ;AAAA,MACtB;AAAA,MACA,qBAAqB,KAAK,OAAO,WAAW,OAAO,WAAW,OAAO,kBAAkB;AAAA,IACzF,CAAC;AAAA,EACH;AAGA,QAAM,mBAAmB,OAAO,SAAS,IAAI,OAAO,QAAQ;AAC1D,QAAI,CAAC,OAAO,OAAO,aAAa,CAAC,OAAO,OAAO,cAAc,CAAC,OAAO,OAAO,iBAAiB;AAC3F,aAAO;AAAA,IACT;AACA,WAAO,sBAAsB,IAAI,MAAM,IAAI,SAAS;AAAA,EACtD,CAAC;AAGD,QAAM,cAAc,OAAO,OAAO,kBAC9B;AAAA,IACE,OAAO,SAAS,IAAI,CAAC,OAAO;AAAA,MAC1B,MAAM,EAAE;AAAA,MACR,WAAW,EAAE;AAAA,MACb,SAAS,EAAE;AAAA,IACb,EAAE;AAAA,EACJ,IACA,QAAQ;AAAA,IACN,OAAO,SAAS,IAAI,CAAC,OAAO;AAAA,MAC1B,SAAS,EAAE;AAAA,MACX,WAAW,EAAE;AAAA,MACb,iBAAiB,CAAC;AAAA,IACpB,EAAE;AAAA,EACJ;AAEJ,QAAM,CAAC,iBAAiB,WAAW,IAAI,MAAM,QAAQ,IAAI;AAAA,IACvD,QAAQ,IAAI,gBAAgB;AAAA,IAC5B;AAAA,EACF,CAAC;AAGD,QAAM,UAAwB,CAAC;AAC/B,WAAS,IAAI,GAAG,IAAI,OAAO,SAAS,QAAQ,KAAK;AAC/C,UAAM,MAAM,OAAO,SAAS,CAAC;AAC7B,UAAM,QAAQ,kBAAkB,IAAI,IAAI,SAAS;AACjD,UAAM,UAAU,cAAc,IAAI,MAAM,MAAM,SAAS;AACvD,UAAM,UAAU,cAAc,IAAI,MAAM,MAAM,WAAW,MAAM,iBAAiB;AAEhF,UAAM,WAAW,gBAAgB,CAAC,KAAK;AAAA,MACrC,MAAM,IAAI;AAAA,MACV,WAAW,IAAI;AAAA,MACf,QAAQ;AAAA;AAAA,MACR,eAAe;AAAA,MACf,WAAW;AAAA,MACX,mBAAmB;AAAA,IACrB;AAEA,UAAM,QAAQ,YAAY,CAAC,GAAG,mBAAmB,CAAC;AAElD,UAAM,iBACJ,OAAO,OAAO,iBAAiB,CAAC,UAC5B,gBAAgB,IAAI,MAAM,MAAM,SAAS,IACzC;AAEN,UAAM,SAAS,kBAAkB,UAAU,OAAO,gBAAgB,SAAS,SAAS;AAAA,MAClF,YAAY,OAAO,gBAAgB;AAAA,MACnC,oBAAoB,OAAO,gBAAgB;AAAA,IAC7C,CAAC;AAED,YAAQ,KAAK,MAAM;AAAA,EACrB;AAGA,MAAI,wBAA4C;AAChD,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAO,mBAAmB,SAAS;AACrC,8BAAwB;AACxB;AAAA,IACF;AACA,QAAI,OAAO,mBAAmB,YAAY;AACxC,8BAAwB;AAAA,IAC1B;AAAA,EACF;AAGA,MAAI,OAAO,YAAY,WAAW,0BAA0B,YAAY;AACtE,4BAAwB;AAAA,EAC1B;AAEA,MAAI,OAAO,YAAY,WAAW,0BAA0B,YAAY;AACtE,4BAAwB;AAAA,EAC1B;AAEA,QAAM,UAAU,cAAc,SAAS,SAAS,qBAAqB;AAErE,SAAO;AAAA,IACL;AAAA,IACA,UAAU;AAAA,IACV;AAAA,IACA;AAAA,IACA,eAAe;AAAA,MACb;AAAA,MACA,SAAS,OAAO;AAAA,MAChB,UAAU,QAAQ,IAAI,CAAC,OAAO;AAAA,QAC5B,MAAM,EAAE;AAAA,QACR,WAAW,EAAE;AAAA,QACb,MAAM,EAAE;AAAA,QACR,SAAS,EAAE,QAAQ,IAAI,CAAC,MAAM,EAAE,IAAI;AAAA,QACpC,WAAW,EAAE,gBAAgB;AAAA,MAC/B,EAAE;AAAA,IACJ;AAAA,IACA,SAAS;AAAA,EACX;AACF;AAEA,SAAS,cAAc,SAAiB,QAAgC;AACtE,SAAO;AAAA,IACL;AAAA,IACA,UAAU,CAAC;AAAA,IACX,uBAAuB;AAAA,IACvB,SAAS;AAAA,IACT,eAAe,EAAE,SAAS,SAAS,MAAM,OAAO;AAAA,IAChD,SAAS;AAAA,IACT,YAAY;AAAA,EACd;AACF;AAEA,SAAS,cACP,SACA,SACA,gBACQ;AACR,QAAM,QAAkB,CAAC;AACzB,QAAM,KAAK,YAAY,OAAO,EAAE;AAChC,QAAM,KAAK,EAAE;AAEb,aAAW,UAAU,SAAS;AAC5B,QAAI,OAAO,QAAQ,WAAW,KAAK,OAAO,gBAAgB,WAAW,EAAG;AAExE,UAAM,KAAK,YAAY,OAAO,OAAO,KAAK,OAAO,SAAS,GAAG;AAC7D,UAAM,KAAK,SAAS,OAAO,YAAY,YAAY,CAAC,EAAE;AAEtD,QAAI,OAAO,QAAQ,SAAS,GAAG;AAC7B,YAAM,KAAK,UAAU;AACrB,iBAAW,UAAU,OAAO,SAAS;AACnC,cAAM,OACJ,OAAO,aAAa,cAAc,OAAO,aAAa,SAClD,OACA,OAAO,aAAa,WAClB,OACA;AACR,cAAM,KAAK,KAAK,IAAI,IAAI,OAAO,IAAI,KAAK,OAAO,MAAM,EAAE;AAAA,MACzD;AAAA,IACF;AAEA,UAAM,KAAK,EAAE;AAAA,EACf;AAEA,MAAI,mBAAmB,SAAS;AAC9B,UAAM,KAAK,uBAAuB;AAAA,EACpC,WAAW,mBAAmB,YAAY;AACxC,UAAM,KAAK,yCAAyC;AAAA,EACtD;AAEA,SAAO,MAAM,KAAK,IAAI;AACxB;;;AC9PO,IAAM,gBAAN,MAAoB;AAAA,EACjB,QAAQ;AAAA,EACC;AAAA,EAEjB,YAAY,QAAgB;AAC1B,SAAK,UAAU;AAAA,EACjB;AAAA;AAAA,EAGA,QAAQ,SAAS,GAAY;AAC3B,QAAI,KAAK,YAAY,IAAI;AACvB,WAAK,SAAS;AACd,aAAO;AAAA,IACT;AACA,QAAI,KAAK,QAAQ,SAAS,KAAK,QAAS,QAAO;AAC/C,SAAK,SAAS;AACd,WAAO;AAAA,EACT;AAAA,EAEA,YAAoB;AAClB,QAAI,KAAK,YAAY,GAAI,QAAO;AAChC,WAAO,KAAK,IAAI,GAAG,KAAK,UAAU,KAAK,KAAK;AAAA,EAC9C;AAAA,EAEA,OAAe;AACb,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,cAAuB;AACrB,WAAO,KAAK,YAAY;AAAA,EAC1B;AACF;;;ACnCA,IAAAC,kBAAoD;AACpD,IAAAC,eAAmC;AACnC,IAAAC,gBAAsB;AAOf,IAAM,gBAAN,MAAoB;AAAA,EACjB;AAAA,EACA;AAAA,EACS;AAAA,EACA;AAAA,EACA;AAAA,EAEjB,YACE,YACA,UACA,SACA;AACA,SAAK,aAAa;AAClB,SAAK,WAAW;AAChB,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,QAAc;AACZ,QAAI,KAAK,QAAS;AAClB,SAAK,cAAU,uBAAM,KAAK,YAAY,MAAM,KAAK,aAAa,CAAC;AAAA,EACjE;AAAA,EAEA,OAAa;AACX,QAAI,KAAK,eAAe;AACtB,mBAAa,KAAK,aAAa;AAC/B,WAAK,gBAAgB;AAAA,IACvB;AACA,QAAI,KAAK,SAAS;AAChB,WAAK,QAAQ,MAAM;AACnB,WAAK,UAAU;AAAA,IACjB;AAAA,EACF;AAAA,EAEQ,eAAqB;AAC3B,QAAI,KAAK,cAAe,cAAa,KAAK,aAAa;AACvD,SAAK,gBAAgB,WAAW,MAAM,KAAK,OAAO,GAAG,GAAG;AAAA,EAC1D;AAAA,EAEQ,SAAe;AACrB,QAAI;AACF,YAAM,UAAM,8BAAa,KAAK,YAAY,OAAO;AACjD,YAAM,aAAS,aAAAC,OAAU,GAAG;AAC5B,YAAM,SAAS,CAAC,GAAG,oBAAM,OAAO,wBAAwB,MAAM,CAAC;AAC/D,UAAI,OAAO,SAAS,GAAG;AACrB,cAAM,MAAM,OAAO,IAAI,CAAC,MAAM,GAAG,EAAE,IAAI,KAAK,EAAE,OAAO,EAAE,EAAE,KAAK,IAAI;AAClE,aAAK,UAAU,IAAI,MAAM,6BAA6B,GAAG,EAAE,CAAC;AAC5D;AAAA,MACF;AACA,YAAM,SAAS,oBAAM,QAAQ,wBAAwB,MAAM;AAC3D,WAAK,SAAS,MAAM;AAAA,IACtB,SAAS,KAAK;AACZ,WAAK,UAAU,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,CAAC;AAAA,IACpE;AAAA,EACF;AACF;;;AC/DA,IAAAC,kBAA2B;AAC3B,uBAAuC;AACvC,sBAA8B;AAF9B;AASA,SAAS,gBAAwB;AAC/B,MAAI;AAEF,eAAO,8BAAQ,8BAAQ,+BAAc,YAAY,GAAG,CAAC,GAAG,kBAAkB;AAAA,EAC5E,QAAQ;AAEN,eAAO,0BAAQ,WAAW,kBAAkB;AAAA,EAC9C;AACF;AAEO,IAAM,mBAAN,MAAuB;AAAA,EACpB;AAAA,EACA;AAAA,EAER,YAAY,QAAiC;AAC3C,SAAK,gBAAgB,QAAQ,aAAa;AAC1C,SAAK,mBAAmB,cAAc;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,QAAQ,cAA8B;AAEpC,UAAM,eAAW,8BAAQ,uBAAK,KAAK,eAAe,GAAG,YAAY,KAAK,CAAC;AACvE,YAAI,4BAAW,QAAQ,EAAG,QAAO;AAGjC,UAAM,kBAAc,8BAAQ,uBAAK,KAAK,kBAAkB,GAAG,YAAY,KAAK,CAAC;AAC7E,YAAI,4BAAW,WAAW,EAAG,QAAO;AAEpC,UAAM,IAAI;AAAA,MACR,oBAAoB,YAAY,0BAA0B,QAAQ,KAAK,WAAW;AAAA,IACpF;AAAA,EACF;AACF;;;ACrCO,SAAS,OACd,iBACA,WACQ;AACR,SAAO,gBAAgB,QAAQ,kBAAkB,CAAC,OAAO,QAAgB;AACvE,UAAM,QAAQ,UAAU,GAAG;AAC3B,QAAI,UAAU,OAAW,QAAO;AAChC,QAAI,MAAM,QAAQ,KAAK,EAAG,QAAO,MAAM,KAAK,IAAI;AAChD,WAAO;AAAA,EACT,CAAC;AACH;;;AClBA,IAAAC,sBAA2B;;;ACA3B,sBAAkC;AAClC,IAAAC,oBAAwB;AACxB,qBAAwB;AAGjB,IAAM,iBAAN,MAA0C;AAAA,EACvC;AAAA,EACA,SAAoC,CAAC;AAAA,EAC5B,iBAAiB;AAAA,EAElC,YAAY,MAAc;AACxB,SAAK,OAAO,KAAK,QAAQ,UAAM,wBAAQ,CAAC;AAAA,EAC1C;AAAA,EAEA,MAAM,MAAM,QAAgD;AAC1D,SAAK,OAAO,KAAK,MAAM;AACvB,QAAI,KAAK,OAAO,UAAU,KAAK,gBAAgB;AAC7C,YAAM,KAAK,MAAM;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,OAAO,WAAW,EAAG;AAC9B,UAAM,QAAQ,KAAK,OAAO,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,EAAE,KAAK,IAAI,IAAI;AACrE,SAAK,SAAS,CAAC;AACf,cAAM,2BAAM,2BAAQ,KAAK,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;AACnD,cAAM,4BAAW,KAAK,MAAM,OAAO,OAAO;AAAA,EAC5C;AACF;;;AC1BO,IAAM,mBAAN,MAA4C;AAAA,EACzC;AAAA,EACA,SAAoC,CAAC;AAAA,EAC5B,iBAAiB;AAAA,EAElC,YAAY,KAAa;AACvB,SAAK,MAAM;AAAA,EACb;AAAA,EAEA,MAAM,MAAM,QAAgD;AAC1D,SAAK,OAAO,KAAK,MAAM;AACvB,QAAI,KAAK,OAAO,UAAU,KAAK,gBAAgB;AAC7C,YAAM,KAAK,MAAM;AAAA,IACnB;AAAA,EACF;AAAA,EAEA,MAAM,QAAuB;AAC3B,QAAI,KAAK,OAAO,WAAW,EAAG;AAC9B,UAAM,UAAU,CAAC,GAAG,KAAK,MAAM;AAC/B,SAAK,SAAS,CAAC;AAEf,QAAI;AACF,YAAM,KAAK,KAAK,OAAO;AAAA,IACzB,QAAQ;AAEN,UAAI;AACF,cAAM,KAAK,KAAK,OAAO;AAAA,MACzB,QAAQ;AAAA,MAER;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,KAAK,SAAmD;AACpE,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,GAAM;AAE3D,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,KAAK,KAAK;AAAA,QACrC,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU,OAAO;AAAA,QAC5B,QAAQ,WAAW;AAAA,MACrB,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,oBAAoB,SAAS,MAAM,EAAE;AAAA,MACvD;AAAA,IACF,UAAE;AACA,mBAAa,OAAO;AAAA,IACtB;AAAA,EACF;AACF;;;AFrCO,IAAM,cAAN,MAAkB;AAAA,EACf;AAAA,EACA,SAAsC,oBAAI,IAAI;AAAA,EAEtD,YAAY,QAAsB;AAChC,UAAM,cAAc,QAAQ,SAAS;AAAA,MACnC,EAAE,MAAM,SAAkB,MAAM,0BAA0B;AAAA,IAC5D;AACA,SAAK,QAAQ,CAAC;AAEd,eAAW,MAAM,aAAa;AAC5B,UAAI,GAAG,SAAS,SAAS;AACvB,aAAK,MAAM,KAAK,IAAI,eAAe,GAAG,QAAQ,yBAAyB,CAAC;AAAA,MAC1E,WAAW,GAAG,SAAS,aAAa,GAAG,KAAK;AAC1C,aAAK,MAAM,KAAK,IAAI,iBAAiB,GAAG,GAAG,CAAC;AAAA,MAC9C;AAAA,IAEF;AAGA,QAAI,KAAK,MAAM,WAAW,GAAG;AAC3B,WAAK,MAAM,KAAK,IAAI,eAAe,yBAAyB,CAAC;AAAA,IAC/D;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,QAA8D;AACtE,UAAM,OAAoB;AAAA,MACxB,GAAG;AAAA,MACH,QAAI,gCAAW;AAAA,MACf,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAEA,SAAK,OAAO,IAAI,KAAK,QAAQ,KAAK,OAAO,IAAI,KAAK,KAAK,KAAK,KAAK,CAAC;AAElE,UAAM,QAAQ,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,IAA0C,CAAC,CAAC;AAAA,EAC9F;AAAA,EAEA,MAAM,QAAuB;AAC3B,UAAM,QAAQ,IAAI,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAAA,EACpD;AAAA,EAEA,aAA0C;AACxC,WAAO,IAAI,IAAI,KAAK,MAAM;AAAA,EAC5B;AACF;;;AG3DO,IAAM,cAAN,MAA0C;AAAA,EACvC;AAAA,EACA;AAAA,EAER,YAAY,IAAe,iBAAyB,KAAK;AACvD,SAAK,KAAK;AACV,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEA,MAAM,gBACJ,UACA,SACyB;AACzB,UAAM,QAAQ,sBAAsB,SAAS,QAAQ;AACrD,UAAM,eAAe,OAAO,QAAQ,SAAS,KAAK,EAC/C;AAAA,MACC,CAAC,CAAC,GAAG,CAAC,MACJ,KAAK,CAAC,KAAK,OAAO,MAAM,WAAW,EAAE,MAAM,GAAG,GAAG,IAAI,KAAK,UAAU,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;AAAA,IACxF,EACC,KAAK,IAAI;AACZ,UAAM,UAAU,SAAS,QAAQ,MAAM,KAAK,QAAQ,IAAI;AAAA,OAAW,QAAQ,OAAO;AAAA;AAAA,QAAa,SAAS,QAAQ;AAAA;AAAA,EAAa,YAAY;AAEzI,UAAM,QAAQ,KAAK,IAAI;AAEvB,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,GAAG,QAAQ,OAAO,SAAS;AAAA,QACrD,SAAS,KAAK,iBAAiB;AAAA,MACjC,CAAC;AAED,aAAO;AAAA,QACL;AAAA,QACA,UAAU;AAAA,QACV,UAAU,KAAK,IAAI,IAAI;AAAA,QACvB,QAAQ,WAAW,SAAY;AAAA,MACjC;AAAA,IACF,QAAQ;AAEN,aAAO;AAAA,QACL,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU,KAAK,IAAI,IAAI;AAAA,QACvB,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;;;AC7CO,IAAM,kBAAN,MAA8C;AAAA,EAC3C;AAAA,EACA;AAAA,EAER,YAAY,KAAa,iBAAyB,KAAK;AACrD,SAAK,MAAM;AACX,SAAK,YAAY,iBAAiB;AAAA,EACpC;AAAA,EAEA,MAAM,gBACJ,UACA,SACyB;AACzB,UAAM,QAAQ,KAAK,IAAI;AACvB,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,UAAU,WAAW,MAAM,WAAW,MAAM,GAAG,KAAK,SAAS;AAEnE,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,KAAK,KAAK;AAAA,QACrC,QAAQ;AAAA,QACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,QAC9C,MAAM,KAAK,UAAU;AAAA,UACnB,UAAU,EAAE,UAAU,SAAS,UAAU,OAAO,SAAS,MAAM;AAAA,UAC/D;AAAA,QACF,CAAC;AAAA,QACD,QAAQ,WAAW;AAAA,MACrB,CAAC;AAED,UAAI,CAAC,SAAS,IAAI;AAChB,eAAO;AAAA,UACL,UAAU;AAAA,UACV,UAAU;AAAA,UACV,UAAU,KAAK,IAAI,IAAI;AAAA,UACvB,QAAQ,oBAAoB,SAAS,MAAM;AAAA,QAC7C;AAAA,MACF;AAEA,YAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,aAAO;AAAA,QACL,UAAU,KAAK;AAAA,QACf,UAAU;AAAA,QACV,UAAU,KAAK,IAAI,IAAI;AAAA,QACvB,QAAQ,KAAK;AAAA,MACf;AAAA,IACF,SAAS,KAAK;AACZ,aAAO;AAAA,QACL,UAAU;AAAA,QACV,UAAU;AAAA,QACV,UAAU,KAAK,IAAI,IAAI;AAAA,QACvB,QACE,eAAe,SAAS,IAAI,SAAS,eACjC,sBACA;AAAA,MACR;AAAA,IACF,UAAE;AACA,mBAAa,OAAO;AAAA,IACtB;AAAA,EACF;AACF;;;AC5BO,SAAS,mBAAmB,QAAoB,IAA8B;AACnF,MAAI,OAAO,qBAAqB,aAAa,OAAO,SAAS,KAAK;AAChE,WAAO,IAAI,gBAAgB,OAAO,QAAQ,KAAK,OAAO,eAAe;AAAA,EACvE;AAGA,MAAI,CAAC,IAAI;AACP,UAAM,IAAI,MAAM,iEAAiE;AAAA,EACnF;AAEA,SAAO,IAAI,YAAY,IAAI,OAAO,eAAe;AACnD;;;AC5CA,uBAAwE;AACxE,IAAAC,kBAAyC;AACzC,IAAAC,oBAAqB;AACrB,IAAAC,eAA0B;;;ACHnB,IAAM,cAAsB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;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","names":["exports","QueryEventKind","exports","module","ancestors","exports","exports","MessageKind","exports","exports","host","result","exports","exports","exports","exports","exports","v","exports","exports","module","ptr","query","exports","exports","exports","parseYaml","import_fs","import_yaml","parseYaml","OsoPolicyEngine","OsoMemoryFactStore","import_fs","import_yaml","parseYaml","import_yaml","parseYaml","REQUEST_TIMEOUT_MS","SEVERITY_ORDER","isBlocklisted","isAllowlisted","DEFAULT_CONFIG","import_node_fs","import_yaml","import_value","parseYaml","import_node_fs","import_node_crypto","import_node_path","import_node_fs","import_node_path","import_yaml","resolve"]}