semantifold 0.2.0 → 0.3.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.
- package/README.md +37 -12
- package/build/index.js +2 -2
- package/build/src/acceptance.d.ts +10 -0
- package/build/src/acceptance.d.ts.map +1 -1
- package/build/src/acceptance.js +24 -5
- package/build/src/backends/c-runtime.d.ts +3 -0
- package/build/src/backends/c-runtime.d.ts.map +1 -0
- package/build/src/backends/c-runtime.js +151 -0
- package/build/src/backends/c-validation.d.ts +12 -0
- package/build/src/backends/c-validation.d.ts.map +1 -0
- package/build/src/backends/c-validation.js +85 -0
- package/build/src/backends/c.d.ts +31 -0
- package/build/src/backends/c.d.ts.map +1 -0
- package/build/src/backends/c.js +308 -0
- package/build/src/backends/cpp-runtime.d.ts +3 -0
- package/build/src/backends/cpp-runtime.d.ts.map +1 -0
- package/build/src/backends/cpp-runtime.js +99 -0
- package/build/src/backends/cpp-validation.d.ts +9 -0
- package/build/src/backends/cpp-validation.d.ts.map +1 -0
- package/build/src/backends/cpp-validation.js +74 -0
- package/build/src/backends/cpp.d.ts +16 -0
- package/build/src/backends/cpp.d.ts.map +1 -0
- package/build/src/backends/cpp.js +285 -0
- package/build/src/backends/csharp.d.ts +20 -0
- package/build/src/backends/csharp.d.ts.map +1 -0
- package/build/src/backends/csharp.js +259 -0
- package/build/src/backends/go.d.ts +20 -0
- package/build/src/backends/go.d.ts.map +1 -0
- package/build/src/backends/go.js +374 -0
- package/build/src/backends/identifiers.d.ts +12 -0
- package/build/src/backends/identifiers.d.ts.map +1 -1
- package/build/src/backends/identifiers.js +71 -2
- package/build/src/backends/index.d.ts.map +1 -1
- package/build/src/backends/index.js +9 -1
- package/build/src/backends/native-validation.d.ts +9 -0
- package/build/src/backends/native-validation.d.ts.map +1 -0
- package/build/src/backends/native-validation.js +59 -0
- package/build/src/backends/ordered-expressions.d.ts +74 -0
- package/build/src/backends/ordered-expressions.d.ts.map +1 -0
- package/build/src/backends/ordered-expressions.js +159 -0
- package/build/src/backends/scalars.d.ts.map +1 -1
- package/build/src/backends/scalars.js +7 -2
- package/build/src/backends/shared.d.ts.map +1 -1
- package/build/src/backends/shared.js +59 -14
- package/build/src/frontends/c-parser.d.ts +20 -0
- package/build/src/frontends/c-parser.d.ts.map +1 -0
- package/build/src/frontends/c-parser.js +14 -0
- package/build/src/frontends/c.d.ts +220 -0
- package/build/src/frontends/c.d.ts.map +1 -0
- package/build/src/frontends/c.js +750 -0
- package/build/src/frontends/cpp-parser.d.ts +11 -0
- package/build/src/frontends/cpp-parser.d.ts.map +1 -0
- package/build/src/frontends/cpp-parser.js +15 -0
- package/build/src/frontends/cpp.d.ts +227 -0
- package/build/src/frontends/cpp.d.ts.map +1 -0
- package/build/src/frontends/cpp.js +784 -0
- package/build/src/frontends/csharp.d.ts +14 -0
- package/build/src/frontends/csharp.d.ts.map +1 -0
- package/build/src/frontends/csharp.js +708 -0
- package/build/src/frontends/go.d.ts +15 -0
- package/build/src/frontends/go.d.ts.map +1 -0
- package/build/src/frontends/go.js +712 -0
- package/build/src/frontends/scalars.d.ts.map +1 -1
- package/build/src/frontends/scalars.js +16 -1
- package/build/src/language-registry.d.ts.map +1 -1
- package/build/src/language-registry.js +51 -2
- package/build/src/mapping.js +2 -2
- package/build/src/semantic/provenance.js +3 -3
- package/build/src/semantic/types.d.ts +4 -4
- package/build/src/semantic/types.d.ts.map +1 -1
- package/build/src/semantic/types.js +3 -3
- package/build/src/subprocess.d.ts +10 -1
- package/build/src/subprocess.d.ts.map +1 -1
- package/build/src/subprocess.js +29 -3
- package/build/src/toolchains.d.ts +24 -0
- package/build/src/toolchains.d.ts.map +1 -1
- package/build/src/toolchains.js +6 -2
- package/docs/architecture.md +20 -6
- package/docs/c.md +60 -0
- package/docs/cpp.md +61 -0
- package/docs/goals.md +4 -2
- package/docs/language-support.md +27 -8
- package/docs/parser-qualification.md +153 -4
- package/docs/plans/2026-09-05-standard-library-portability.md +46 -0
- package/docs/source-maps.md +11 -5
- package/docs/standard-library-portability.md +190 -0
- package/docs/testing.md +113 -4
- package/index.js +1 -1
- package/node_modules/node-addon-api/LICENSE.md +9 -0
- package/node_modules/node-addon-api/README.md +95 -0
- package/node_modules/node-addon-api/common.gypi +21 -0
- package/node_modules/node-addon-api/except.gypi +25 -0
- package/node_modules/node-addon-api/index.js +14 -0
- package/node_modules/node-addon-api/napi-inl.deprecated.h +186 -0
- package/node_modules/node-addon-api/napi-inl.h +7250 -0
- package/node_modules/node-addon-api/napi.h +3463 -0
- package/node_modules/node-addon-api/node_addon_api.gyp +42 -0
- package/node_modules/node-addon-api/node_api.gyp +9 -0
- package/node_modules/node-addon-api/noexcept.gypi +26 -0
- package/node_modules/node-addon-api/nothing.c +0 -0
- package/node_modules/node-addon-api/package-support.json +21 -0
- package/node_modules/node-addon-api/package.json +481 -0
- package/node_modules/node-addon-api/tools/README.md +73 -0
- package/node_modules/node-addon-api/tools/check-napi.js +99 -0
- package/node_modules/node-addon-api/tools/clang-format.js +71 -0
- package/node_modules/node-addon-api/tools/conversion.js +301 -0
- package/node_modules/node-gyp-build/LICENSE +21 -0
- package/node_modules/node-gyp-build/README.md +58 -0
- package/node_modules/node-gyp-build/SECURITY.md +5 -0
- package/node_modules/node-gyp-build/bin.js +84 -0
- package/node_modules/node-gyp-build/build-test.js +19 -0
- package/node_modules/node-gyp-build/index.js +6 -0
- package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
- package/node_modules/node-gyp-build/optional.js +7 -0
- package/node_modules/node-gyp-build/package.json +43 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/LICENSE +15 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/README.md +7 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/README.md +90 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/binding.gyp +79 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/index.js +895 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/package.json +62 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/addon_data.h +47 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/binding.cc +35 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.cc +140 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/conversions.h +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.cc +106 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/language.h +17 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.cc +70 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/logger.h +19 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.cc +1056 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/node.h +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.cc +298 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/parser.h +35 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.cc +383 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/query.h +39 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.cc +307 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree.h +45 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/src/tree_cursor.h +52 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/tree-sitter.d.ts +211 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +501 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +221 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +299 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +419 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +49 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +14 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +774 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2151 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +230 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +62 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4134 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +899 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1060 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +382 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +165 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +714 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +50 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +23 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +109 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1294 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1823 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/README.md +18 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/binding.gyp +29 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/grammar.js +1470 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/package.json +60 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/darwin-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/linux-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-arm64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/prebuilds/win32-x64/tree-sitter-c.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/highlights.scm +81 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/queries/tags.scm +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/grammar.json +9735 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/node-types.json +4614 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/parser.c +119615 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter-c.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-c/tree-sitter.json +43 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/LICENSE +21 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/README.md +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/binding.gyp +30 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding.cc +20 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/binding_test.js +9 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.d.ts +28 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/bindings/node/index.js +11 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/grammar.js +1436 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/package.json +61 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/darwin-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/linux-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-arm64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/prebuilds/win32-x64/tree-sitter-cpp.node +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/highlights.scm +70 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/injections.scm +3 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/queries/tags.scm +15 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/grammar.json +17084 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/node-types.json +7997 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/parser.c +530368 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/scanner.c +148 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/alloc.h +54 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/array.h +290 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/src/tree_sitter/parser.h +266 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter-cpp.wasm +0 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/node_modules/tree-sitter-cpp/tree-sitter.json +55 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/package.json +22 -0
- package/node_modules/semantifold-tree-sitter-legacy-internal/src/c.js +152 -0
- package/node_modules/tree-sitter/LICENSE +21 -0
- package/node_modules/tree-sitter/README.md +128 -0
- package/node_modules/tree-sitter/binding.gyp +88 -0
- package/node_modules/tree-sitter/index.js +950 -0
- package/node_modules/tree-sitter/package.json +76 -0
- package/node_modules/tree-sitter/prebuilds/darwin-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/darwin-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/linux-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/linux-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/win32-arm64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/prebuilds/win32-x64/tree-sitter.node +0 -0
- package/node_modules/tree-sitter/src/addon_data.h +47 -0
- package/node_modules/tree-sitter/src/binding.cc +35 -0
- package/node_modules/tree-sitter/src/conversions.cc +140 -0
- package/node_modules/tree-sitter/src/conversions.h +22 -0
- package/node_modules/tree-sitter/src/language.cc +105 -0
- package/node_modules/tree-sitter/src/language.h +17 -0
- package/node_modules/tree-sitter/src/logger.cc +70 -0
- package/node_modules/tree-sitter/src/logger.h +19 -0
- package/node_modules/tree-sitter/src/lookaheaditerator.cc +122 -0
- package/node_modules/tree-sitter/src/lookaheaditerator.h +33 -0
- package/node_modules/tree-sitter/src/node.cc +1088 -0
- package/node_modules/tree-sitter/src/node.h +30 -0
- package/node_modules/tree-sitter/src/parser.cc +332 -0
- package/node_modules/tree-sitter/src/parser.h +35 -0
- package/node_modules/tree-sitter/src/query.cc +425 -0
- package/node_modules/tree-sitter/src/query.h +40 -0
- package/node_modules/tree-sitter/src/tree.cc +316 -0
- package/node_modules/tree-sitter/src/tree.h +45 -0
- package/node_modules/tree-sitter/src/tree_cursor.cc +213 -0
- package/node_modules/tree-sitter/src/tree_cursor.h +52 -0
- package/node_modules/tree-sitter/tree-sitter.d.ts +1083 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/include/tree_sitter/api.h +1478 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.c +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/alloc.h +41 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/array.h +291 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/atomic.h +68 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/clock.h +146 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/error_costs.h +11 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.c +523 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/get_changed_ranges.h +36 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/host.h +21 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.c +293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/language.h +293 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/length.h +52 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.c +483 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lexer.h +54 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/lib.c +12 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/node.c +875 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.c +2297 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/parser.h +286 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/point.h +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/portable/endian.h +241 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/query.c +4347 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reduce_action.h +34 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/reusable_node.h +95 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.c +912 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/stack.h +133 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.c +1034 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/subtree.h +399 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.c +170 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree.h +31 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.c +716 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/tree_cursor.h +48 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/ts_assert.h +11 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ICU_SHA +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/LICENSE +414 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/README.md +29 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/ptypes.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/umachine.h +448 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/urename.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf.h +1 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf16.h +733 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode/utf8.h +881 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/unicode.h +75 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib-symbols.txt +24 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/stdlib.c +137 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm/wasm-stdlib.h +1314 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.c +1937 -0
- package/node_modules/tree-sitter/vendor/tree-sitter/lib/src/wasm_store.h +31 -0
- package/package.json +21 -5
- package/src/acceptance.js +25 -4
- package/src/backends/c-runtime.js +151 -0
- package/src/backends/c-validation.js +83 -0
- package/src/backends/c.js +308 -0
- package/src/backends/cpp-runtime.js +99 -0
- package/src/backends/cpp-validation.js +70 -0
- package/src/backends/cpp.js +285 -0
- package/src/backends/csharp.js +270 -0
- package/src/backends/go.js +383 -0
- package/src/backends/identifiers.js +72 -1
- package/src/backends/index.js +7 -0
- package/src/backends/native-validation.js +64 -0
- package/src/backends/ordered-expressions.js +161 -0
- package/src/backends/scalars.js +7 -1
- package/src/backends/shared.js +56 -12
- package/src/frontends/c-parser.js +17 -0
- package/src/frontends/c.js +780 -0
- package/src/frontends/cpp-parser.js +18 -0
- package/src/frontends/cpp.js +816 -0
- package/src/frontends/csharp.js +759 -0
- package/src/frontends/go.js +770 -0
- package/src/frontends/scalars.js +15 -0
- package/src/language-registry.js +52 -1
- package/src/mapping.js +1 -1
- package/src/semantic/provenance.js +2 -2
- package/src/semantic/types.js +2 -2
- package/src/subprocess.js +31 -2
- package/src/toolchains.js +5 -1
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# Semantifold
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Task019 adds independent [C++20 source and target support](docs/cpp.md) (`cpp`): one deterministic `program.cpp`, owned UTF-8 `std::string` values, checked integer arithmetic, exact ordered-expression reparsing, and real Clang O0/O2 sanitizer acceptance. The official CPP grammar shares the existing private isolated parser runtime inside the single root distribution.
|
|
4
|
+
|
|
5
|
+
Semantifold is an early language-neutral semantic code toolkit. The current source tree proves a deliberately small ten-language end-to-end baseline: parse equivalent PHP, Ruby, JavaScript with JSDoc, TypeScript, Java, strictly annotated Python, canonical C#, bounded Go, C17, and C++20 programs into one typed semantic representation, then generate and execute equivalent programs in every target language. The published package remains `semantifold@0.2.0`; Task019 does not publish a release.
|
|
4
6
|
|
|
5
7
|
## Current API
|
|
6
8
|
|
|
@@ -22,7 +24,7 @@ const module = parse({
|
|
|
22
24
|
const javaSource = generate({language: "java", module})
|
|
23
25
|
```
|
|
24
26
|
|
|
25
|
-
`parse` returns parser-independent discriminated semantic nodes with normalized types, source locations, a versioned source registry, and deterministic node/symbol provenance. `generate` accepts that shared module and returns an independently executable source program with its historical bytes unchanged. `generateArtifact` adds an output filename, an authoritative range-based `SemantifoldMapping` v1, and a Source Map v3 sidecar
|
|
27
|
+
`parse` returns parser-independent discriminated semantic nodes with normalized types, source locations, a versioned source registry, and deterministic node/symbol provenance. `generate` accepts that shared module and returns an independently executable source program with its historical bytes unchanged. For each single-artifact target, `generateArtifact` adds an output filename, an authoritative range-based `SemantifoldMapping` v1, and a Source Map v3 sidecar:
|
|
26
28
|
|
|
27
29
|
```js
|
|
28
30
|
import {generateArtifact, originalPositionFor} from "semantifold"
|
|
@@ -31,37 +33,58 @@ const artifact = generateArtifact({language: "java", module})
|
|
|
31
33
|
const original = originalPositionFor(artifact.mapping, {offset: artifact.code.indexOf("label")})
|
|
32
34
|
```
|
|
33
35
|
|
|
34
|
-
Generated output always uses LF. Exact original content, including LF, CRLF, lone CR, and astral UTF-16 coordinates, remains in the source registry and `sourcesContent`. Optional inline/external `sourceMappingURL` directives apply only to JavaScript and TypeScript; PHP, Ruby, Java, and
|
|
36
|
+
Generated output always uses LF. Exact original content, including LF, CRLF, lone CR, and astral UTF-16 coordinates, remains in the source registry and `sourcesContent`. Optional inline/external `sourceMappingURL` directives apply only to JavaScript and TypeScript; PHP, Ruby, Java, Python, C#, Go, C, and CPP use the same rich/v3 model without foreign comments. See [source provenance and mappings](docs/source-maps.md) for schemas, lookups, composition, diagnostics, directives, and compatibility.
|
|
35
37
|
|
|
36
|
-
`supportedLanguages` is the immutable registry-derived list `php`, `ruby`, `javascript`, `typescript`, `java`, and `
|
|
38
|
+
`supportedLanguages` is the immutable registry-derived list `php`, `ruby`, `javascript`, `typescript`, `java`, `python`, `csharp`, `go`, `c`, and `cpp`. `languageCapabilities` exposes each ID's independent frontend, text-backend, binary-backend, application-backend, and interoperability roles together with artifact multiplicity, round-trip, mapping, acceptance-stage, and toolchain declarations. Unknown IDs use `UNSUPPORTED_LANGUAGE`; a registered ID missing a requested role uses `UNSUPPORTED_ROLE`; an existing backend that cannot represent a semantic module uses `UNSUPPORTED_CAPABILITY`.
|
|
37
39
|
|
|
38
|
-
`generateArtifactSet` is the additive single-module artifact API. Original text targets return an entry artifact with the exact legacy bytes and rich/v3 mappings; an external JavaScript-family map directive also returns the referenced serialized mapping sidecar. `createGeneratedArtifactSet` validates
|
|
40
|
+
`generateArtifactSet` is the additive single-module artifact API. Original text targets return an entry artifact with the exact legacy bytes and rich/v3 mappings; an external JavaScript-family map directive also returns the referenced serialized mapping sidecar. C# returns mapped `Program.cs` then synthetic-provenance `Semantifold.csproj`. Go returns exactly two ordered artifacts: fixed synthetic-provenance `go.mod` first, then mapped `main.go`; the fixed module is `example.com/semantifold/generated` with `go 1.26.0` and creates no `go.sum`. C returns mapped `program.c` followed by synthetic `semantifold_runtime.h`. Because C#, Go, and C are deliberately multi-artifact, `generate()` and `generateArtifact()` reject them with `UNSUPPORTED_ROLE`. Go accepts only an omitted filename or exact `main.go`, and C accepts only omitted or exact `program.c`; these multi-artifact backends reject mapping options rather than ignoring them. `createGeneratedArtifactSet` validates multi-file text, binary, mixed loader/binary, and application shapes transactionally: paths are ordered, unique, safe relative POSIX paths with no file/directory prefix collisions; content is explicitly text or bytes; media type, role, generated ownership, and provenance are required; and exactly one artifact has role `entry`. Binary content is held privately and returned as a fresh detached byte view on every read, so caller mutation cannot change validated bytes or their provenance. Generated helper files do not create semantic modules and are not Task 010 projects.
|
|
39
41
|
|
|
40
42
|
Binary/resource provenance uses `SemantifoldByteMapping` v1 through `createByteMapping`, `parseByteMapping`, and `stringifyByteMapping`. Generated ranges are ordered, non-overlapping, half-open byte offsets with semantic identities or explicit synthetic reasons. They are never interpreted as UTF-16 positions.
|
|
41
43
|
|
|
42
|
-
`discoverCanonicalToolchain` and `discoverToolchain` resolve an exact executable from a configured absolute override or one unambiguous canonical PATH command and capture its version. `runAcceptanceStages` materializes a validated artifact set in a unique temporary directory and runs applicable `parse`, `generate`, `compile`, `link`, `validate`, `instantiate`, and `execute` stages with exact argument arrays, a deterministic locale/timezone, bounded per-stage timeouts, captured output, no shell, and normalized stage diagnostics. The canonical overrides are `SEMANTIFOLD_PHP`, `SEMANTIFOLD_RUBY`, `SEMANTIFOLD_NODE`, `SEMANTIFOLD_TSC`, `SEMANTIFOLD_JAVAC`, `SEMANTIFOLD_JAVA`, and `
|
|
44
|
+
`discoverCanonicalToolchain` and `discoverToolchain` resolve an exact executable from a configured absolute override or one unambiguous canonical PATH command and capture its version. `runAcceptanceStages` materializes a validated artifact set in a unique temporary directory and runs applicable `parse`, `generate`, `restore`, `compile`, `link`, `validate`, `instantiate`, and `execute` stages with exact argument arrays, a deterministic locale/timezone, bounded per-stage timeouts, captured output, no shell, and normalized stage diagnostics. The canonical overrides are `SEMANTIFOLD_PHP`, `SEMANTIFOLD_RUBY`, `SEMANTIFOLD_NODE`, `SEMANTIFOLD_TSC`, `SEMANTIFOLD_JAVAC`, `SEMANTIFOLD_JAVA`, `SEMANTIFOLD_PYTHON`, `SEMANTIFOLD_DOTNET`, `SEMANTIFOLD_GO`, `SEMANTIFOLD_CLANG`, and `SEMANTIFOLD_CLANGPP`; none of these APIs installs or downloads a tool. C# requires .NET SDK major 10, while Go requires Go 1.26.x on Linux/amd64 with matching-GOROOT `gofmt`.
|
|
45
|
+
|
|
46
|
+
This is not general-purpose support for any of the ten languages. The implemented subset is a two-parameter function using explicit integer, boolean, or string types; explicitly typed, initialized scalar locals; plain assignment to mutable locals; ordered lexical blocks; strictly boolean, nested `if` statements with optional `else`; explicit scalar returns; typed scalar operations; a two-argument function call; and sequenced printing. Operations cover integer add/subtract/multiply/negate and ordering, Boolean not/short-circuit and/or, same-type scalar value equality/inequality, and string concatenation. Non-void functions must return on every reachable path, and statements after an unconditional return are rejected. See [language support](docs/language-support.md) before using it on other code.
|
|
47
|
+
|
|
48
|
+
Semantic integers must be JavaScript-safe mathematical integers and have one unsigned zero. Generated JavaScript and TypeScript canonically render scalar output for modules containing negation or multiplication so IEEE-754 `-0` is observed as `0` without folding or rewriting the semantic operation tree. Java generation narrows literals and compile-time-known arithmetic trees further to signed 32-bit `int`. C# uses checked signed-64-bit arithmetic. Go uses exact decimal `int64` literals, rejects compile-time-known results outside signed 64-bit, and otherwise preserves native runtime wrap outside the portable guarantee. Strings are parser-decoded Unicode scalar values and are re-escaped for each target without preserving source quotes or escapes. Equality never coerces and never applies to objects or collections. Division, remainder, exponentiation, bitwise/shift/update/compound operations, ternary/nullish forms, casts/assertions, truthiness, implicit returns, loops, switches, exceptions, and constant folding are unsupported. JavaScript and TypeScript functions must be synchronous and non-generator; Ruby annotations must be immediately associated comment blocks; and PHP accepts only an optional exact `declare(strict_types=1)`. Python requires exact `int`/`bool`/`str` annotations and its exact adjacent immutable carrier. C# requires its exact generated namespace/class shell. Go requires `package main`, at most the exact `fmt` import, explicit `int64`/`bool`/`string` types, final zero-argument `func main()`, and direct `fmt.Println`; assignment occurrence determines source-local mutability, while generated immutable locals carry exact adjacent `// @semantifold-immutable`. Frontends reject syntax instead of dropping receivers, arguments, parameters, declarations, or statements. Before emission, each backend recursively validates blocks, flow, scalar types, typed operations, modeled bindings, mutability, target identifiers, and literal representability.
|
|
49
|
+
|
|
50
|
+
C17 support uses exact `int64_t`, `bool` and immutable UTF-8 byte slices. Its deterministic `program.c`/header pair preserves left-to-right and short-circuit effects through checked ordered-expression regions, uses checked signed-64-bit arithmetic, and owns concatenation storage until main cleanup. Reparse verifies the complete generated CST before collapsing temporary values. The qualified toolchain is Ubuntu Clang 21.1.8 on Linux x86-64 with mandatory O0/O2 ordinary and sanitizer execution. See the [C source/target profile](docs/c.md) and [portable toolchain commands](docs/testing.md).
|
|
51
|
+
|
|
52
|
+
## Standard-library portability direction
|
|
43
53
|
|
|
44
|
-
|
|
54
|
+
Standard-library portability is planned and is not implemented in `semantifold@0.2.0`. The design is hub-and-spoke, with two integrations per language: a source-facing **language compatibility stdlib/facade** preserves that language's familiar supported API shape in portable executable definitions, while a **target host provider/native binding** implements versioned **canonical Semantifold stdlib contracts/capabilities** with the target's genuine native standard library.
|
|
45
55
|
|
|
46
|
-
|
|
56
|
+
For example, planned Ruby-to-PHP compilation would compile a Ruby application with portable Ruby `TCPSocket` and bounded one-string `puts`/`Kernel.puts` compatibility facades through the semantic IR. The generated PHP could retain those source-compatible names in a collision-safe compatibility namespace, call canonical `SocketClient`, text-stream, output, and resource capabilities, and link only the required PHP provider modules. That provider would use native `fsockopen`, `fgets`, and `fclose` for socket operations and native stdout output without adding a duplicate LF. This requires no handwritten Ruby-on-PHP bridge, source-specific loop recognition, or whole-program intelligent refactor. See the [authoritative standard-library portability design](docs/standard-library-portability.md) and [dependency-ordered implementation plan](docs/plans/2026-09-05-standard-library-portability.md).
|
|
47
57
|
|
|
48
58
|
## Development
|
|
49
59
|
|
|
50
|
-
Use Node.js 24 and install with `npm ci`. Specs use `@velocious/testing@0.0.0` and the standalone `velocious-test` runner. Run a focused spec with `npx velocious-test spec/repository-contract.spec.js
|
|
60
|
+
Use Node.js 24 and install with `npm ci`. Specs use `@velocious/testing@0.0.0` and the standalone `velocious-test` runner. Run a focused spec with `npx velocious-test spec/repository-contract.spec.js`. Task 018 local validation runs explicitly named changed/affected spec files sequentially; aggregate `npm test` discovery runs only in TensorBuzz.
|
|
51
61
|
|
|
52
|
-
The
|
|
62
|
+
The aggregate suite includes direct real-toolchain specs that inherit the outer test process locale, so repository validation requires `LANG=C.UTF-8` and `LC_ALL=C.UTF-8`. The canonical container currently exports neither variable. This outer-suite requirement is separate from `runAcceptanceStages`, which normalizes the locale and timezone of every child it owns and does not depend on ambient locale.
|
|
63
|
+
|
|
64
|
+
The local quality/package gate follows the named focused specs documented in [testing](docs/testing.md):
|
|
53
65
|
|
|
54
66
|
```sh
|
|
55
|
-
|
|
67
|
+
export LANG=C.UTF-8
|
|
68
|
+
export LC_ALL=C.UTF-8
|
|
69
|
+
npm run verify:legacy-runtime
|
|
70
|
+
npx velocious-test spec/repository-contract.spec.js
|
|
56
71
|
npm run lint
|
|
57
72
|
npm run typecheck
|
|
58
73
|
npm run build
|
|
59
74
|
npm audit --audit-level=high
|
|
60
75
|
npm ls --omit=dev --all
|
|
76
|
+
npm ls --all
|
|
61
77
|
npm pack --dry-run --json
|
|
78
|
+
git diff --check
|
|
62
79
|
```
|
|
63
80
|
|
|
64
|
-
The
|
|
81
|
+
The one `semantifold@0.2.0` distribution explicitly bundles root `tree-sitter@0.25.1` and a private internal package containing an isolated exact `tree-sitter@0.21.1` plus `tree-sitter-c@0.23.2` and `tree-sitter-cpp@0.23.4` dependency subtree. The private `packages/tree-sitter-legacy` workspace owns source checking and declaration generation, but has no export or publication identity. Its serializer returns only recursively frozen parser-neutral CST data; native parser, tree, node, and language handles stay inside the legacy runtime. The packed-consumer spec installs the real root tarball with a fresh npm cache and proves modern Go and legacy C parsing together without a workspace or registry fallback for the internal package.
|
|
82
|
+
|
|
83
|
+
Because `install-links=true` installs a copy of the private runtime, run `npm ci` again after editing its shipped files under `packages/tree-sitter-legacy/runtime/`. Tests, lint, and `npm pack` reject a stale installed payload with that recovery instruction. The gate compares npm's source file inventory and every file's bytes, including the manifest, serializer, README, and license; it never copies or repairs dependencies itself.
|
|
84
|
+
|
|
85
|
+
Consumers need no Semantifold-specific npm settings: default `npm install`, `npm ls --all`, and subsequent `npm ci` work with `install-links=false`. The repository alone uses `install-links=true` to materialize the local source. Root `acceptDependencies` accepts the exact private `0.1.0` package already present in the bundle; npm still resolves new installations from the declared `file:` source, never from a registry release of the internal name. The cold-consumer proof isolates user/global configuration, verifies the public registry and ordinary default, and repeats dependency, parser, and TypeScript checks after both install and clean reinstall.
|
|
86
|
+
|
|
87
|
+
The execution specs require PHP CLI, Ruby, Python 3, TypeScript, a Java JDK, .NET 10, Clang 21.1.8 with compiler-rt, and Go 1.26 with matching `gofmt` in addition to Node; missing tools are failures. The canonical container provides them: `docker compose up --build --detach`, followed by `docker compose exec dev npm ci` and the commands above.
|
|
65
88
|
|
|
66
89
|
## Documentation
|
|
67
90
|
|
|
@@ -72,6 +95,8 @@ The execution specs require PHP CLI, Ruby, Python 3, TypeScript, and a Java JDK
|
|
|
72
95
|
- [Parser qualification](docs/parser-qualification.md)
|
|
73
96
|
- [Testing](docs/testing.md)
|
|
74
97
|
- [Source provenance and mappings](docs/source-maps.md)
|
|
98
|
+
- [Standard-library portability design](docs/standard-library-portability.md)
|
|
99
|
+
- [Standard-library portability implementation plan](docs/plans/2026-09-05-standard-library-portability.md)
|
|
75
100
|
- [Language feature roadmap](https://github.com/kaspernj/semantifold/blob/master/todo/README.md)
|
|
76
101
|
- [Initial toolchain plan](docs/plans/2026-09-02-initial-toolchain.md)
|
|
77
102
|
|
package/build/index.js
CHANGED
|
@@ -88,7 +88,7 @@ export function generateArtifactSet(input) {
|
|
|
88
88
|
const record = languageRegistry.record(language);
|
|
89
89
|
if (record.artifactMultiplicity == "multiple") {
|
|
90
90
|
const backend = languageRegistry.resolve(language, "textBackend", module?.location);
|
|
91
|
-
return constructArtifactSet(backend({ filename, language, module, sources }));
|
|
91
|
+
return constructArtifactSet(backend({ filename, language, mapDirective, module, sourceMapFilename, sources }));
|
|
92
92
|
}
|
|
93
93
|
const artifact = generateArtifactSource({
|
|
94
94
|
filename,
|
|
@@ -137,4 +137,4 @@ export function generateArtifactSet(input) {
|
|
|
137
137
|
const backend = languageRegistry.resolve(language, registryRole, module?.location);
|
|
138
138
|
return constructArtifactSet(backend({ filename, language, module, sources }));
|
|
139
139
|
}
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsMEJBQTBCLElBQUksb0JBQW9CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQTtBQUUzRCxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBRXZFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxDQUFBO0FBQzlCLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ25GLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQzdELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQ2pHLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3RHLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFBO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQTtBQUM1RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixvQkFBb0IsRUFD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QUFPLG9CQUFvQixDQUFDLE9BQU8sQ0FBQyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUMsQ0FBQTtBQUM3RSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7cGFyc2VTb3VyY2V9IGZyb20gXCIuL3NyYy9mcm9udGVuZHMvaW5kZXguanNcIlxuaW1wb3J0IHtnZW5lcmF0ZUFydGlmYWN0U291cmNlLCBnZW5lcmF0ZVNvdXJjZX0gZnJvbSBcIi4vc3JjL2JhY2tlbmRzL2luZGV4LmpzXCJcbmltcG9ydCB7Y3JlYXRlR2VuZXJhdGVkQXJ0aWZhY3RTZXQgYXMgY29uc3RydWN0QXJ0aWZhY3RTZXR9IGZyb20gXCIuL3NyYy9hcnRpZmFjdHMuanNcIlxuaW1wb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IGZyb20gXCIuL3NyYy9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7bGFuZ3VhZ2VSZWdpc3RyeX0gZnJvbSBcIi4vc3JjL2xhbmd1YWdlLXJlZ2lzdHJ5LmpzXCJcblxuY29uc3QgYXJ0aWZhY3RCYWNrZW5kUm9sZXMgPSBuZXcgU2V0KFtcInRleHRcIiwgXCJiaW5hcnlcIiwgXCJhcHBsaWNhdGlvblwiXSlcblxuZXhwb3J0IHtTZW1hbnRpZm9sZERpYWdub3N0aWN9XG5leHBvcnQge2xhbmd1YWdlQ2FwYWJpbGl0aWVzLCBzdXBwb3J0ZWRMYW5ndWFnZXN9IGZyb20gXCIuL3NyYy9sYW5ndWFnZS1yZWdpc3RyeS5qc1wiXG5leHBvcnQge2NyZWF0ZUdlbmVyYXRlZEFydGlmYWN0U2V0fSBmcm9tIFwiLi9zcmMvYXJ0aWZhY3RzLmpzXCJcbmV4cG9ydCB7Y3JlYXRlQnl0ZU1hcHBpbmcsIHBhcnNlQnl0ZU1hcHBpbmcsIHN0cmluZ2lmeUJ5dGVNYXBwaW5nfSBmcm9tIFwiLi9zcmMvYmluYXJ5LW1hcHBpbmcuanNcIlxuZXhwb3J0IHtjYW5vbmljYWxUb29sY2hhaW5zLCBkaXNjb3ZlckNhbm9uaWNhbFRvb2xjaGFpbiwgZGlzY292ZXJUb29sY2hhaW59IGZyb20gXCIuL3NyYy90b29sY2hhaW5zLmpzXCJcbmV4cG9ydCB7cnVuQWNjZXB0YW5jZVN0YWdlc30gZnJvbSBcIi4vc3JjL2FjY2VwdGFuY2UuanNcIlxuZXhwb3J0IHtnZXROb2RlUHJvdmVuYW5jZSwgZ2V0U3ltYm9sUHJvdmVuYW5jZX0gZnJvbSBcIi4vc3JjL3NlbWFudGljL3Byb3ZlbmFuY2UuanNcIlxuZXhwb3J0IHtwcmltYXJ5TG9jYXRpb259IGZyb20gXCIuL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmV4cG9ydCB7XG4gIGNvbXBvc2VNYXBwaW5ncyxcbiAgY29tcG9zZVNvdXJjZU1hcHMsXG4gIGdlbmVyYXRlZFBvc2l0aW9uRm9yLFxuICBtYXBwaW5nRnJvbVNvdXJjZU1hcCxcbiAgb3JpZ2luYWxQb3NpdGlvbkZvcixcbiAgcGFyc2VNYXBwaW5nLFxuICByZW1hcERpYWdub3N0aWMsXG4gIHJlbWFwTG9jYXRpb24sXG4gIHNwYW5zRm9yTm9kZSxcbiAgc3BhbnNGb3JTeW1ib2wsXG4gIHN0cmluZ2lmeU1hcHBpbmcsXG4gIHRvU291cmNlTWFwVjNcbn0gZnJvbSBcIi4vc3JjL21hcHBpbmcuanNcIlxuXG4vKipcbiAqIFBhcnNlcyBzb3VyY2UgaW50byBTZW1hbnRpZm9sZCdzIHNoYXJlZCBzZW1hbnRpYyByZXByZXNlbnRhdGlvbi5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIFBhcnNlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuZmlsZW5hbWUgLSBTb3VyY2UgZmlsZW5hbWUgdXNlZCBpbiBkaWFnbm9zdGljcy5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBTb3VyY2UgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQuc291cmNlIC0gU291cmNlIHRleHQuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IFNlbWFudGljIG1vZHVsZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGlucHV0KSB7XG4gIHJldHVybiBwYXJzZVNvdXJjZShpbnB1dClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgdGFyZ2V0LWxhbmd1YWdlIHNvdXJjZSBmcm9tIGEgc2hhcmVkIHNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSBpbnB1dCAtIEdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gaW5wdXQubGFuZ3VhZ2UgLSBUYXJnZXQgbGFuZ3VhZ2UuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBpbnB1dC5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBHZW5lcmF0ZWQgc291cmNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGUoaW5wdXQpIHtcbiAgcmV0dXJuIGdlbmVyYXRlU291cmNlKGlucHV0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIHJldXNhYmxlIG91dHB1dCBhcnRpZmFjdCB3aXRoIHJpY2ggYW5kIFNvdXJjZSBNYXAgdjMgbWFwcGluZ3MuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBHZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5maWxlbmFtZV0gLSBPdXRwdXQgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge1wibm9uZVwiIHwgXCJleHRlcm5hbFwiIHwgXCJpbmxpbmVcIn0gW2lucHV0Lm1hcERpcmVjdGl2ZV0gLSBKYXZhU2NyaXB0LWZhbWlseSBtYXAgZGlyZWN0aXZlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5zb3VyY2VNYXBGaWxlbmFtZV0gLSBFeHRlcm5hbCBtYXAgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX0gW2lucHV0LnNvdXJjZXNdIC0gU291cmNlcyBmb3IgY2FsbGVyLWF1dGhvcmVkIG1vZHVsZXMuXG4gKiBAcmV0dXJucyB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3R9IEdlbmVyYXRlZCBhcnRpZmFjdC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXJ0aWZhY3QoaW5wdXQpIHtcbiAgcmV0dXJuIGdlbmVyYXRlQXJ0aWZhY3RTb3VyY2UoaW5wdXQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIGEgZGV0ZXJtaW5pc3RpYyBhcnRpZmFjdCBzZXQgZm9yIG9uZSBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBBcnRpZmFjdC1zZXQgZ2VuZXJhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0Lmxhbmd1YWdlIC0gUmVnaXN0ZXJlZCB0YXJnZXQgbGFuZ3VhZ2Ugb3IgcGxhdGZvcm0gSUQuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBpbnB1dC5tb2R1bGUgLSBTZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge1widGV4dFwiIHwgXCJiaW5hcnlcIiB8IFwiYXBwbGljYXRpb25cIn0gW2lucHV0LnJvbGVdIC0gUmVxdWVzdGVkIGJhY2tlbmQgYXJ0aWZhY3Qgcm9sZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuZmlsZW5hbWVdIC0gU2FmZSBvdXRwdXQgcGF0aCBmb3IgYSB0ZXh0IHRhcmdldC5cbiAqIEBwYXJhbSB7XCJub25lXCIgfCBcImV4dGVybmFsXCIgfCBcImlubGluZVwifSBbaW5wdXQubWFwRGlyZWN0aXZlXSAtIEphdmFTY3JpcHQtZmFtaWx5IG1hcCBkaXJlY3RpdmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0LnNvdXJjZU1hcEZpbGVuYW1lXSAtIEV4dGVybmFsIG1hcCBmaWxlbmFtZS5cbiAqIEBwYXJhbSB7e2ZpbGVuYW1lOiBzdHJpbmcsIGNvbnRlbnQ6IHN0cmluZywgbGFuZ3VhZ2U/OiBpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfVtdfSBbaW5wdXQuc291cmNlc10gLSBPcmlnaW5hbCBzb3VyY2VzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0fSBDb21wbGV0ZSBnZW5lcmF0ZWQgc2V0LlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVBcnRpZmFjdFNldChpbnB1dCkge1xuICBpZiAoIWlucHV0IHx8IHR5cGVvZiBpbnB1dCAhPSBcIm9iamVjdFwiIHx8IEFycmF5LmlzQXJyYXkoaW5wdXQpIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihpbnB1dCkgIT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY29kZTogXCJJTlZBTElEX0FSVElGQUNUX1NFVFwiLFxuICAgICAgbGFuZ3VhZ2U6IFwiYXJ0aWZhY3RcIixcbiAgICAgIG1lc3NhZ2U6IFwiQXJ0aWZhY3Qtc2V0IGdlbmVyYXRpb24gcmVxdWlyZXMgYSByZXF1ZXN0IG9iamVjdC5cIlxuICAgIH0pXG4gIH1cbiAgY29uc3Qge2ZpbGVuYW1lLCBsYW5ndWFnZSwgbWFwRGlyZWN0aXZlLCBtb2R1bGUsIHJvbGUgPSBcInRleHRcIiwgc291cmNlTWFwRmlsZW5hbWUsIHNvdXJjZXN9ID0gaW5wdXRcblxuICBpZiAodHlwZW9mIGxhbmd1YWdlICE9IFwic3RyaW5nXCIgfHwgbGFuZ3VhZ2UubGVuZ3RoID09IDApIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICAgIGxhbmd1YWdlOiBcImFydGlmYWN0XCIsXG4gICAgICBtZXNzYWdlOiBcIkFydGlmYWN0LXNldCBnZW5lcmF0aW9uIHJlcXVpcmVzIGEgbm9uLWVtcHR5IHN0cmluZyBsYW5ndWFnZSBvciB0YXJnZXQgSUQuXCJcbiAgICB9KVxuICB9XG4gIGlmICh0eXBlb2Ygcm9sZSAhPSBcInN0cmluZ1wiIHx8ICFhcnRpZmFjdEJhY2tlbmRSb2xlcy5oYXMocm9sZSkpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICAgIGxhbmd1YWdlLFxuICAgICAgbWVzc2FnZTogXCJBcnRpZmFjdCBiYWNrZW5kIHJvbGUgbXVzdCBiZSAndGV4dCcsICdiaW5hcnknLCBvciAnYXBwbGljYXRpb24nLlwiXG4gICAgfSlcbiAgfVxuXG4gIGlmIChyb2xlID09IFwidGV4dFwiKSB7XG4gICAgY29uc3QgcmVjb3JkID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZWNvcmQobGFuZ3VhZ2UpXG5cbiAgICBpZiAocmVjb3JkLmFydGlmYWN0TXVsdGlwbGljaXR5ID09IFwibXVsdGlwbGVcIikge1xuICAgICAgY29uc3QgYmFja2VuZCA9IGxhbmd1YWdlUmVnaXN0cnkucmVzb2x2ZShsYW5ndWFnZSwgXCJ0ZXh0QmFja2VuZFwiLCBtb2R1bGU/LmxvY2F0aW9uKVxuXG4gICAgICByZXR1cm4gY29uc3RydWN0QXJ0aWZhY3RTZXQoYmFja2VuZCh7ZmlsZW5hbWUsIGxhbmd1YWdlLCBtb2R1bGUsIHNvdXJjZXN9KSlcbiAgICB9XG4gICAgY29uc3QgYXJ0aWZhY3QgPSBnZW5lcmF0ZUFydGlmYWN0U291cmNlKHtcbiAgICAgIGZpbGVuYW1lLFxuICAgICAgbGFuZ3VhZ2U6IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX0gKi8gKGxhbmd1YWdlKSxcbiAgICAgIG1hcERpcmVjdGl2ZSxcbiAgICAgIG1vZHVsZSxcbiAgICAgIHNvdXJjZU1hcEZpbGVuYW1lLFxuICAgICAgc291cmNlc1xuICAgIH0pXG5cbiAgICAvKiogQHR5cGUge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZFNldEFydGlmYWN0W119ICovXG4gICAgY29uc3QgYXJ0aWZhY3RzID0gW3tcbiAgICAgIGNvbnRlbnQ6IGFydGlmYWN0LmNvZGUsXG4gICAgICBjb250ZW50S2luZDogXCJ0ZXh0XCIsXG4gICAgICBtZWRpYVR5cGU6IC8qKiBAdHlwZSB7c3RyaW5nfSAqLyAocmVjb3JkLm1lZGlhVHlwZSksXG4gICAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICBwYXRoOiBhcnRpZmFjdC5maWxlbmFtZSxcbiAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAga2luZDogXCJ0ZXh0XCIsXG4gICAgICAgIG1hcHBpbmc6IGFydGlmYWN0Lm1hcHBpbmcsXG4gICAgICAgIHNvdXJjZU1hcDogYXJ0aWZhY3Quc291cmNlTWFwLFxuICAgICAgICBzb3VyY2VNYXBGaWxlbmFtZTogYXJ0aWZhY3Quc291cmNlTWFwRmlsZW5hbWVcbiAgICAgIH0sXG4gICAgICByb2xlOiBcImVudHJ5XCJcbiAgICB9XVxuXG4gICAgaWYgKG1hcERpcmVjdGl2ZSA9PSBcImV4dGVybmFsXCIpIHtcbiAgICAgIGFydGlmYWN0cy5wdXNoKHtcbiAgICAgICAgY29udGVudDogYCR7SlNPTi5zdHJpbmdpZnkoYXJ0aWZhY3Quc291cmNlTWFwKX1cXG5gLFxuICAgICAgICBjb250ZW50S2luZDogXCJ0ZXh0XCIsXG4gICAgICAgIG1lZGlhVHlwZTogXCJhcHBsaWNhdGlvbi9qc29uXCIsXG4gICAgICAgIG93bmVyc2hpcDogXCJnZW5lcmF0ZWRcIixcbiAgICAgICAgcGF0aDogYXJ0aWZhY3Quc291cmNlTWFwRmlsZW5hbWUsXG4gICAgICAgIHByb3ZlbmFuY2U6IHtcbiAgICAgICAgICBraW5kOiBcInN5bnRoZXRpY1wiLFxuICAgICAgICAgIHJlYXNvbjogXCJTZXJpYWxpemVkIFNvdXJjZSBNYXAgdjMgcHJvamVjdGlvbiBmb3IgdGhlIGdlbmVyYXRlZCBlbnRyeSBhcnRpZmFjdC5cIixcbiAgICAgICAgICByZWxhdGVkT3JpZ2luczogW11cbiAgICAgICAgfSxcbiAgICAgICAgcm9sZTogXCJtYXBwaW5nXCJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnN0cnVjdEFydGlmYWN0U2V0KHtcbiAgICAgIGFydGlmYWN0cyxcbiAgICAgIHRhcmdldDogbGFuZ3VhZ2VcbiAgICB9KVxuICB9XG5cbiAgY29uc3QgcmVnaXN0cnlSb2xlID0gcm9sZSA9PSBcImJpbmFyeVwiID8gXCJiaW5hcnlCYWNrZW5kXCIgOiBcImFwcGxpY2F0aW9uQmFja2VuZFwiXG4gIGNvbnN0IGJhY2tlbmQgPSBsYW5ndWFnZVJlZ2lzdHJ5LnJlc29sdmUobGFuZ3VhZ2UsIHJlZ2lzdHJ5Um9sZSwgbW9kdWxlPy5sb2NhdGlvbilcblxuICByZXR1cm4gY29uc3RydWN0QXJ0aWZhY3RTZXQoYmFja2VuZCh7ZmlsZW5hbWUsIGxhbmd1YWdlLCBtb2R1bGUsIHNvdXJjZXN9KSlcbn1cbiJdfQ==
|
|
140
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBCQUEwQixDQUFBO0FBQ3BELE9BQU8sRUFBQyxzQkFBc0IsRUFBRSxjQUFjLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQTtBQUM5RSxPQUFPLEVBQUMsMEJBQTBCLElBQUksb0JBQW9CLEVBQUMsTUFBTSxvQkFBb0IsQ0FBQTtBQUNyRixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSw0QkFBNEIsQ0FBQTtBQUUzRCxNQUFNLG9CQUFvQixHQUFHLElBQUksR0FBRyxDQUFDLENBQUMsTUFBTSxFQUFFLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFBO0FBRXZFLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxDQUFBO0FBQzlCLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLDRCQUE0QixDQUFBO0FBQ25GLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLG9CQUFvQixDQUFBO0FBQzdELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxvQkFBb0IsRUFBQyxNQUFNLHlCQUF5QixDQUFBO0FBQ2pHLE9BQU8sRUFBQyxtQkFBbUIsRUFBRSwwQkFBMEIsRUFBRSxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3RHLE9BQU8sRUFBQyxtQkFBbUIsRUFBQyxNQUFNLHFCQUFxQixDQUFBO0FBQ3ZELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxtQkFBbUIsRUFBQyxNQUFNLDhCQUE4QixDQUFBO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSw4QkFBOEIsQ0FBQTtBQUM1RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGlCQUFpQixFQUNqQixvQkFBb0IsRUFD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UUFBUSxDQUFDLENBQUE7SUFFbEYsT0FBTyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFDLENBQUE7QUFDN0UsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge3BhcnNlU291cmNlfSBmcm9tIFwiLi9zcmMvZnJvbnRlbmRzL2luZGV4LmpzXCJcbmltcG9ydCB7Z2VuZXJhdGVBcnRpZmFjdFNvdXJjZSwgZ2VuZXJhdGVTb3VyY2V9IGZyb20gXCIuL3NyYy9iYWNrZW5kcy9pbmRleC5qc1wiXG5pbXBvcnQge2NyZWF0ZUdlbmVyYXRlZEFydGlmYWN0U2V0IGFzIGNvbnN0cnVjdEFydGlmYWN0U2V0fSBmcm9tIFwiLi9zcmMvYXJ0aWZhY3RzLmpzXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljfSBmcm9tIFwiLi9zcmMvZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2xhbmd1YWdlUmVnaXN0cnl9IGZyb20gXCIuL3NyYy9sYW5ndWFnZS1yZWdpc3RyeS5qc1wiXG5cbmNvbnN0IGFydGlmYWN0QmFja2VuZFJvbGVzID0gbmV3IFNldChbXCJ0ZXh0XCIsIFwiYmluYXJ5XCIsIFwiYXBwbGljYXRpb25cIl0pXG5cbmV4cG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljfVxuZXhwb3J0IHtsYW5ndWFnZUNhcGFiaWxpdGllcywgc3VwcG9ydGVkTGFuZ3VhZ2VzfSBmcm9tIFwiLi9zcmMvbGFuZ3VhZ2UtcmVnaXN0cnkuanNcIlxuZXhwb3J0IHtjcmVhdGVHZW5lcmF0ZWRBcnRpZmFjdFNldH0gZnJvbSBcIi4vc3JjL2FydGlmYWN0cy5qc1wiXG5leHBvcnQge2NyZWF0ZUJ5dGVNYXBwaW5nLCBwYXJzZUJ5dGVNYXBwaW5nLCBzdHJpbmdpZnlCeXRlTWFwcGluZ30gZnJvbSBcIi4vc3JjL2JpbmFyeS1tYXBwaW5nLmpzXCJcbmV4cG9ydCB7Y2Fub25pY2FsVG9vbGNoYWlucywgZGlzY292ZXJDYW5vbmljYWxUb29sY2hhaW4sIGRpc2NvdmVyVG9vbGNoYWlufSBmcm9tIFwiLi9zcmMvdG9vbGNoYWlucy5qc1wiXG5leHBvcnQge3J1bkFjY2VwdGFuY2VTdGFnZXN9IGZyb20gXCIuL3NyYy9hY2NlcHRhbmNlLmpzXCJcbmV4cG9ydCB7Z2V0Tm9kZVByb3ZlbmFuY2UsIGdldFN5bWJvbFByb3ZlbmFuY2V9IGZyb20gXCIuL3NyYy9zZW1hbnRpYy9wcm92ZW5hbmNlLmpzXCJcbmV4cG9ydCB7cHJpbWFyeUxvY2F0aW9ufSBmcm9tIFwiLi9zcmMvc2VtYW50aWMvcHJvdmVuYW5jZS5qc1wiXG5leHBvcnQge1xuICBjb21wb3NlTWFwcGluZ3MsXG4gIGNvbXBvc2VTb3VyY2VNYXBzLFxuICBnZW5lcmF0ZWRQb3NpdGlvbkZvcixcbiAgbWFwcGluZ0Zyb21Tb3VyY2VNYXAsXG4gIG9yaWdpbmFsUG9zaXRpb25Gb3IsXG4gIHBhcnNlTWFwcGluZyxcbiAgcmVtYXBEaWFnbm9zdGljLFxuICByZW1hcExvY2F0aW9uLFxuICBzcGFuc0Zvck5vZGUsXG4gIHNwYW5zRm9yU3ltYm9sLFxuICBzdHJpbmdpZnlNYXBwaW5nLFxuICB0b1NvdXJjZU1hcFYzXG59IGZyb20gXCIuL3NyYy9tYXBwaW5nLmpzXCJcblxuLyoqXG4gKiBQYXJzZXMgc291cmNlIGludG8gU2VtYW50aWZvbGQncyBzaGFyZWQgc2VtYW50aWMgcmVwcmVzZW50YXRpb24uXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBQYXJzZSByZXF1ZXN0LlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LmZpbGVuYW1lIC0gU291cmNlIGZpbGVuYW1lIHVzZWQgaW4gZGlhZ25vc3RpY3MuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gU291cmNlIGxhbmd1YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnNvdXJjZSAtIFNvdXJjZSB0ZXh0LlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTW9kdWxlfSBTZW1hbnRpYyBtb2R1bGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZShpbnB1dCkge1xuICByZXR1cm4gcGFyc2VTb3VyY2UoaW5wdXQpXG59XG5cbi8qKlxuICogR2VuZXJhdGVzIHRhcmdldC1sYW5ndWFnZSBzb3VyY2UgZnJvbSBhIHNoYXJlZCBzZW1hbnRpYyBtb2R1bGUuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBHZW5lcmF0aW9uIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9IGlucHV0Lmxhbmd1YWdlIC0gVGFyZ2V0IGxhbmd1YWdlLlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHJldHVybnMge3N0cmluZ30gR2VuZXJhdGVkIHNvdXJjZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlKGlucHV0KSB7XG4gIHJldHVybiBnZW5lcmF0ZVNvdXJjZShpbnB1dClcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZXMgYSByZXVzYWJsZSBvdXRwdXQgYXJ0aWZhY3Qgd2l0aCByaWNoIGFuZCBTb3VyY2UgTWFwIHYzIG1hcHBpbmdzLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gR2VuZXJhdGlvbiByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY0xhbmd1YWdlfSBpbnB1dC5sYW5ndWFnZSAtIFRhcmdldCBsYW5ndWFnZS5cbiAqIEBwYXJhbSB7aW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNNb2R1bGV9IGlucHV0Lm1vZHVsZSAtIFNlbWFudGljIG1vZHVsZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuZmlsZW5hbWVdIC0gT3V0cHV0IGZpbGVuYW1lLlxuICogQHBhcmFtIHtcIm5vbmVcIiB8IFwiZXh0ZXJuYWxcIiB8IFwiaW5saW5lXCJ9IFtpbnB1dC5tYXBEaXJlY3RpdmVdIC0gSmF2YVNjcmlwdC1mYW1pbHkgbWFwIGRpcmVjdGl2ZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbaW5wdXQuc291cmNlTWFwRmlsZW5hbWVdIC0gRXh0ZXJuYWwgbWFwIGZpbGVuYW1lLlxuICogQHBhcmFtIHt7ZmlsZW5hbWU6IHN0cmluZywgY29udGVudDogc3RyaW5nLCBsYW5ndWFnZT86IGltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9W119IFtpbnB1dC5zb3VyY2VzXSAtIFNvdXJjZXMgZm9yIGNhbGxlci1hdXRob3JlZCBtb2R1bGVzLlxuICogQHJldHVybnMge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0fSBHZW5lcmF0ZWQgYXJ0aWZhY3QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUFydGlmYWN0KGlucHV0KSB7XG4gIHJldHVybiBnZW5lcmF0ZUFydGlmYWN0U291cmNlKGlucHV0KVxufVxuXG4vKipcbiAqIEdlbmVyYXRlcyBhIGRldGVybWluaXN0aWMgYXJ0aWZhY3Qgc2V0IGZvciBvbmUgc2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gQXJ0aWZhY3Qtc2V0IGdlbmVyYXRpb24gcmVxdWVzdC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC5sYW5ndWFnZSAtIFJlZ2lzdGVyZWQgdGFyZ2V0IGxhbmd1YWdlIG9yIHBsYXRmb3JtIElELlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5TZW1hbnRpY01vZHVsZX0gaW5wdXQubW9kdWxlIC0gU2VtYW50aWMgbW9kdWxlLlxuICogQHBhcmFtIHtcInRleHRcIiB8IFwiYmluYXJ5XCIgfCBcImFwcGxpY2F0aW9uXCJ9IFtpbnB1dC5yb2xlXSAtIFJlcXVlc3RlZCBiYWNrZW5kIGFydGlmYWN0IHJvbGUuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2lucHV0LmZpbGVuYW1lXSAtIFNhZmUgb3V0cHV0IHBhdGggZm9yIGEgdGV4dCB0YXJnZXQuXG4gKiBAcGFyYW0ge1wibm9uZVwiIHwgXCJleHRlcm5hbFwiIHwgXCJpbmxpbmVcIn0gW2lucHV0Lm1hcERpcmVjdGl2ZV0gLSBKYXZhU2NyaXB0LWZhbWlseSBtYXAgZGlyZWN0aXZlLlxuICogQHBhcmFtIHtzdHJpbmd9IFtpbnB1dC5zb3VyY2VNYXBGaWxlbmFtZV0gLSBFeHRlcm5hbCBtYXAgZmlsZW5hbWUuXG4gKiBAcGFyYW0ge3tmaWxlbmFtZTogc3RyaW5nLCBjb250ZW50OiBzdHJpbmcsIGxhbmd1YWdlPzogaW1wb3J0KFwiLi9zcmMvc2VtYW50aWMvdHlwZXMuanNcIikuU2VtYW50aWNMYW5ndWFnZX1bXX0gW2lucHV0LnNvdXJjZXNdIC0gT3JpZ2luYWwgc291cmNlcy5cbiAqIEByZXR1cm5zIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRBcnRpZmFjdFNldH0gQ29tcGxldGUgZ2VuZXJhdGVkIHNldC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlQXJ0aWZhY3RTZXQoaW5wdXQpIHtcbiAgaWYgKCFpbnB1dCB8fCB0eXBlb2YgaW5wdXQgIT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KGlucHV0KSB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoaW5wdXQpICE9IE9iamVjdC5wcm90b3R5cGUpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNvZGU6IFwiSU5WQUxJRF9BUlRJRkFDVF9TRVRcIixcbiAgICAgIGxhbmd1YWdlOiBcImFydGlmYWN0XCIsXG4gICAgICBtZXNzYWdlOiBcIkFydGlmYWN0LXNldCBnZW5lcmF0aW9uIHJlcXVpcmVzIGEgcmVxdWVzdCBvYmplY3QuXCJcbiAgICB9KVxuICB9XG4gIGNvbnN0IHtmaWxlbmFtZSwgbGFuZ3VhZ2UsIG1hcERpcmVjdGl2ZSwgbW9kdWxlLCByb2xlID0gXCJ0ZXh0XCIsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSA9IGlucHV0XG5cbiAgaWYgKHR5cGVvZiBsYW5ndWFnZSAhPSBcInN0cmluZ1wiIHx8IGxhbmd1YWdlLmxlbmd0aCA9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIsXG4gICAgICBsYW5ndWFnZTogXCJhcnRpZmFjdFwiLFxuICAgICAgbWVzc2FnZTogXCJBcnRpZmFjdC1zZXQgZ2VuZXJhdGlvbiByZXF1aXJlcyBhIG5vbi1lbXB0eSBzdHJpbmcgbGFuZ3VhZ2Ugb3IgdGFyZ2V0IElELlwiXG4gICAgfSlcbiAgfVxuICBpZiAodHlwZW9mIHJvbGUgIT0gXCJzdHJpbmdcIiB8fCAhYXJ0aWZhY3RCYWNrZW5kUm9sZXMuaGFzKHJvbGUpKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjb2RlOiBcIklOVkFMSURfQVJUSUZBQ1RfU0VUXCIsXG4gICAgICBsYW5ndWFnZSxcbiAgICAgIG1lc3NhZ2U6IFwiQXJ0aWZhY3QgYmFja2VuZCByb2xlIG11c3QgYmUgJ3RleHQnLCAnYmluYXJ5Jywgb3IgJ2FwcGxpY2F0aW9uJy5cIlxuICAgIH0pXG4gIH1cblxuICBpZiAocm9sZSA9PSBcInRleHRcIikge1xuICAgIGNvbnN0IHJlY29yZCA9IGxhbmd1YWdlUmVnaXN0cnkucmVjb3JkKGxhbmd1YWdlKVxuXG4gICAgaWYgKHJlY29yZC5hcnRpZmFjdE11bHRpcGxpY2l0eSA9PSBcIm11bHRpcGxlXCIpIHtcbiAgICAgIGNvbnN0IGJhY2tlbmQgPSBsYW5ndWFnZVJlZ2lzdHJ5LnJlc29sdmUobGFuZ3VhZ2UsIFwidGV4dEJhY2tlbmRcIiwgbW9kdWxlPy5sb2NhdGlvbilcblxuICAgICAgcmV0dXJuIGNvbnN0cnVjdEFydGlmYWN0U2V0KGJhY2tlbmQoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgbWFwRGlyZWN0aXZlLCBtb2R1bGUsIHNvdXJjZU1hcEZpbGVuYW1lLCBzb3VyY2VzfSkpXG4gICAgfVxuICAgIGNvbnN0IGFydGlmYWN0ID0gZ2VuZXJhdGVBcnRpZmFjdFNvdXJjZSh7XG4gICAgICBmaWxlbmFtZSxcbiAgICAgIGxhbmd1YWdlOiAvKiogQHR5cGUge2ltcG9ydChcIi4vc3JjL3NlbWFudGljL3R5cGVzLmpzXCIpLlNlbWFudGljTGFuZ3VhZ2V9ICovIChsYW5ndWFnZSksXG4gICAgICBtYXBEaXJlY3RpdmUsXG4gICAgICBtb2R1bGUsXG4gICAgICBzb3VyY2VNYXBGaWxlbmFtZSxcbiAgICAgIHNvdXJjZXNcbiAgICB9KVxuXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NyYy9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRTZXRBcnRpZmFjdFtdfSAqL1xuICAgIGNvbnN0IGFydGlmYWN0cyA9IFt7XG4gICAgICBjb250ZW50OiBhcnRpZmFjdC5jb2RlLFxuICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgbWVkaWFUeXBlOiAvKiogQHR5cGUge3N0cmluZ30gKi8gKHJlY29yZC5tZWRpYVR5cGUpLFxuICAgICAgb3duZXJzaGlwOiBcImdlbmVyYXRlZFwiLFxuICAgICAgcGF0aDogYXJ0aWZhY3QuZmlsZW5hbWUsXG4gICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgIGtpbmQ6IFwidGV4dFwiLFxuICAgICAgICBtYXBwaW5nOiBhcnRpZmFjdC5tYXBwaW5nLFxuICAgICAgICBzb3VyY2VNYXA6IGFydGlmYWN0LnNvdXJjZU1hcCxcbiAgICAgICAgc291cmNlTWFwRmlsZW5hbWU6IGFydGlmYWN0LnNvdXJjZU1hcEZpbGVuYW1lXG4gICAgICB9LFxuICAgICAgcm9sZTogXCJlbnRyeVwiXG4gICAgfV1cblxuICAgIGlmIChtYXBEaXJlY3RpdmUgPT0gXCJleHRlcm5hbFwiKSB7XG4gICAgICBhcnRpZmFjdHMucHVzaCh7XG4gICAgICAgIGNvbnRlbnQ6IGAke0pTT04uc3RyaW5naWZ5KGFydGlmYWN0LnNvdXJjZU1hcCl9XFxuYCxcbiAgICAgICAgY29udGVudEtpbmQ6IFwidGV4dFwiLFxuICAgICAgICBtZWRpYVR5cGU6IFwiYXBwbGljYXRpb24vanNvblwiLFxuICAgICAgICBvd25lcnNoaXA6IFwiZ2VuZXJhdGVkXCIsXG4gICAgICAgIHBhdGg6IGFydGlmYWN0LnNvdXJjZU1hcEZpbGVuYW1lLFxuICAgICAgICBwcm92ZW5hbmNlOiB7XG4gICAgICAgICAga2luZDogXCJzeW50aGV0aWNcIixcbiAgICAgICAgICByZWFzb246IFwiU2VyaWFsaXplZCBTb3VyY2UgTWFwIHYzIHByb2plY3Rpb24gZm9yIHRoZSBnZW5lcmF0ZWQgZW50cnkgYXJ0aWZhY3QuXCIsXG4gICAgICAgICAgcmVsYXRlZE9yaWdpbnM6IFtdXG4gICAgICAgIH0sXG4gICAgICAgIHJvbGU6IFwibWFwcGluZ1wiXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBjb25zdHJ1Y3RBcnRpZmFjdFNldCh7XG4gICAgICBhcnRpZmFjdHMsXG4gICAgICB0YXJnZXQ6IGxhbmd1YWdlXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN0IHJlZ2lzdHJ5Um9sZSA9IHJvbGUgPT0gXCJiaW5hcnlcIiA/IFwiYmluYXJ5QmFja2VuZFwiIDogXCJhcHBsaWNhdGlvbkJhY2tlbmRcIlxuICBjb25zdCBiYWNrZW5kID0gbGFuZ3VhZ2VSZWdpc3RyeS5yZXNvbHZlKGxhbmd1YWdlLCByZWdpc3RyeVJvbGUsIG1vZHVsZT8ubG9jYXRpb24pXG5cbiAgcmV0dXJuIGNvbnN0cnVjdEFydGlmYWN0U2V0KGJhY2tlbmQoe2ZpbGVuYW1lLCBsYW5ndWFnZSwgbW9kdWxlLCBzb3VyY2VzfSkpXG59XG4iXX0=
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { rm } from "node:fs/promises";
|
|
1
2
|
/**
|
|
2
3
|
* Materializes one artifact set and runs ordered acceptance stages without a shell.
|
|
3
4
|
* @param {object} input - Acceptance request.
|
|
@@ -19,4 +20,13 @@ export declare function runAcceptanceStages(input: {
|
|
|
19
20
|
target: string;
|
|
20
21
|
timeoutMs?: number;
|
|
21
22
|
}): Promise<import("./semantic/types.js").AcceptanceResult>;
|
|
23
|
+
/**
|
|
24
|
+
* Creates an acceptance runner with instance-owned cleanup behavior.
|
|
25
|
+
* @param {object} dependencies - Internal runner dependencies.
|
|
26
|
+
* @param {typeof rm} dependencies.removeDirectory - Isolated-directory removal operation.
|
|
27
|
+
* @returns {typeof runAcceptanceStages} Acceptance runner.
|
|
28
|
+
*/
|
|
29
|
+
export declare function createAcceptanceRunner({ removeDirectory }: {
|
|
30
|
+
removeDirectory: typeof rm;
|
|
31
|
+
}): typeof runAcceptanceStages;
|
|
22
32
|
//# sourceMappingURL=acceptance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acceptance.d.ts","sourceRoot":"","sources":["../../src/acceptance.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"acceptance.d.ts","sourceRoot":"","sources":["../../src/acceptance.js"],"names":[],"mappings":"AAEA,OAAO,EAAiB,EAAE,EAAY,MAAM,kBAAkB,CAAA;AAiB9D;;;;;;;;;GASG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAP5C;IAAkE,SAAS,EAAnE,OAAO,qBAAqB,EAAE,oBAAoB,CAC1D;IAA6D,WAAW,AAAxE,CACA,EADQ,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CACpD;IAAsJ,MAAM,EAApJ;QAAC,SAAS,EAAE,MAAM,EAAE,CAAC;QAAC,KAAK,EAAE,OAAO,qBAAqB,EAAE,eAAe,CAAC;QAAC,IAAI,EAAE,OAAO,qBAAqB,EAAE,mBAAmB,CAAA;KAAC,EAAE,CAC9I;IAAsB,MAAM,EAApB,MAAM,CACd;IAAuB,SAAS,AAAhC,CACA,EADQ,MAAM,CACd;CAE4C,GAFlC,OAAO,CAAC,OAAO,qBAAqB,EAAE,gBAAgB,CAAC,CAInE;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,EAAC,eAAe,EAAC,EAHrD;IAAgC,eAAe,EAAvC,OAAO,EAAE,CACjB;CAEqD,GAF3C,OAAO,mBAAmB,CAItC"}
|
package/build/src/acceptance.js
CHANGED
|
@@ -12,7 +12,7 @@ const acceptanceMaxBuffer = 16 * 1024 * 1024;
|
|
|
12
12
|
const launchErrorCodes = new Set([
|
|
13
13
|
"E2BIG", "EACCES", "EAGAIN", "ELOOP", "EMFILE", "ENAMETOOLONG", "ENFILE", "ENOENT", "ENOEXEC", "ENOMEM", "ENOTDIR", "ENOTSUP", "EPERM", "ETXTBSY"
|
|
14
14
|
]);
|
|
15
|
-
const orderedStages = Object.freeze(["parse", "generate", "compile", "link", "validate", "instantiate", "execute"]);
|
|
15
|
+
const orderedStages = Object.freeze(["parse", "generate", "restore", "compile", "link", "validate", "instantiate", "execute"]);
|
|
16
16
|
const stageIndexes = new Map(orderedStages.map((stage, index) => [stage, index]));
|
|
17
17
|
/**
|
|
18
18
|
* Materializes one artifact set and runs ordered acceptance stages without a shell.
|
|
@@ -25,6 +25,24 @@ const stageIndexes = new Map(orderedStages.map((stage, index) => [stage, index])
|
|
|
25
25
|
* @returns {Promise<import("./semantic/types.js").AcceptanceResult>} Captured results after cleanup.
|
|
26
26
|
*/
|
|
27
27
|
export async function runAcceptanceStages(input) {
|
|
28
|
+
return await runAcceptanceStagesWithDependencies(input, rm);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Creates an acceptance runner with instance-owned cleanup behavior.
|
|
32
|
+
* @param {object} dependencies - Internal runner dependencies.
|
|
33
|
+
* @param {typeof rm} dependencies.removeDirectory - Isolated-directory removal operation.
|
|
34
|
+
* @returns {typeof runAcceptanceStages} Acceptance runner.
|
|
35
|
+
*/
|
|
36
|
+
export function createAcceptanceRunner({ removeDirectory }) {
|
|
37
|
+
return async (input) => await runAcceptanceStagesWithDependencies(input, removeDirectory);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Runs acceptance with exact instance-owned dependencies.
|
|
41
|
+
* @param {Parameters<typeof runAcceptanceStages>[0]} input - Acceptance request.
|
|
42
|
+
* @param {typeof rm} removeDirectory - Isolated-directory removal operation.
|
|
43
|
+
* @returns {ReturnType<typeof runAcceptanceStages>} Captured results after cleanup.
|
|
44
|
+
*/
|
|
45
|
+
async function runAcceptanceStagesWithDependencies(input, removeDirectory) {
|
|
28
46
|
if (!isPlainObject(input))
|
|
29
47
|
invalidRunner("Acceptance requires a request object.", "acceptance");
|
|
30
48
|
const artifacts = /** @type {import("./semantic/types.js").GeneratedArtifactSet} */ (input.artifacts);
|
|
@@ -76,7 +94,7 @@ export async function runAcceptanceStages(input) {
|
|
|
76
94
|
let cleanupFailure;
|
|
77
95
|
let cleanupFailed = false;
|
|
78
96
|
try {
|
|
79
|
-
await removeAcceptanceDirectory(directory, request.target);
|
|
97
|
+
await removeAcceptanceDirectory(directory, request.target, removeDirectory);
|
|
80
98
|
}
|
|
81
99
|
catch (error) {
|
|
82
100
|
cleanupFailed = true;
|
|
@@ -279,11 +297,12 @@ function isPlainObject(value) {
|
|
|
279
297
|
* Removes the isolated acceptance directory with a normalized failure.
|
|
280
298
|
* @param {string} directory - Exact temporary directory.
|
|
281
299
|
* @param {string} target - Acceptance target.
|
|
300
|
+
* @param {typeof rm} removeDirectory - Instance-owned removal operation.
|
|
282
301
|
* @returns {Promise<void>} Cleanup completion.
|
|
283
302
|
*/
|
|
284
|
-
async function removeAcceptanceDirectory(directory, target) {
|
|
303
|
+
async function removeAcceptanceDirectory(directory, target, removeDirectory) {
|
|
285
304
|
try {
|
|
286
|
-
await
|
|
305
|
+
await removeDirectory(directory, { force: true, recursive: true });
|
|
287
306
|
}
|
|
288
307
|
catch (error) {
|
|
289
308
|
throw new SemantifoldDiagnostic({
|
|
@@ -336,4 +355,4 @@ async function materializeArtifacts(artifacts, directory, target) {
|
|
|
336
355
|
}
|
|
337
356
|
}
|
|
338
357
|
}
|
|
339
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXB0YW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY2NlcHRhbmNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDOUQsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3hCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sWUFBWSxDQUFBO0FBQ3ZDLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGdCQUFnQixDQUFBO0FBQ3pELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQ3JELE9BQU8sRUFBQyxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQzlFLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUNuRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUV4RCxNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFBO0FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVM7Q0FDbEosQ0FBQyxDQUFBO0FBQ0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLFNB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SUFBSSxJQUFJO2FBQ3hFLENBQUMsQ0FBQTtRQUNKLENBQUM7SUFDSCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIEB0cy1jaGVja1xuXG5pbXBvcnQge21rZGlyLCBta2R0ZW1wLCBybSwgd3JpdGVGaWxlfSBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiXG5pbXBvcnQgb3MgZnJvbSBcIm5vZGU6b3NcIlxuaW1wb3J0IHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiXG5pbXBvcnQge2lzRGVuc2VBcnJheX0gZnJvbSBcIi4vYXJyYXkuanNcIlxuaW1wb3J0IHtjcmVhdGVHZW5lcmF0ZWRBcnRpZmFjdFNldH0gZnJvbSBcIi4vYXJ0aWZhY3RzLmpzXCJcbmltcG9ydCB7U2VtYW50aWZvbGREaWFnbm9zdGljfSBmcm9tIFwiLi9kaWFnbm9zdGljLmpzXCJcbmltcG9ydCB7ZXhjZWVkZWRPd25lZERlYWRsaW5lLCBleGVjdXRlRmlsZVdpdGhEZWFkbGluZX0gZnJvbSBcIi4vc3VicHJvY2Vzcy5qc1wiXG5pbXBvcnQge2lzU3VwcG9ydGVkVGltZW91dE1zLCBtYXhpbXVtVGltZW91dE1zfSBmcm9tIFwiLi90aW1lb3V0LmpzXCJcbmltcG9ydCB7ZGV0ZXJtaW5pc3RpY0Vudmlyb25tZW50fSBmcm9tIFwiLi90b29sY2hhaW5zLmpzXCJcblxuY29uc3QgYWNjZXB0YW5jZU1heEJ1ZmZlciA9IDE2ICogMTAyNCAqIDEwMjRcbmNvbnN0IGxhdW5jaEVycm9yQ29kZXMgPSBuZXcgU2V0KFtcbiAgXCJFMkJJR1wiLCBcIkVBQ0NFU1wiLCBcIkVBR0FJTlwiLCBcIkVMT09QXCIsIFwiRU1GSUxFXCIsIFwiRU5BTUVUT09MT05HXCIsIFwiRU5GSUxFXCIsIFwiRU5PRU5UXCIsIFwiRU5PRVhFQ1wiLCBcIkVOT01FTVwiLCBcIkVOT1RESVJcIiwgXCJFTk9UU1VQXCIsIFwiRVBFUk1cIiwgXCJFVFhUQlNZXCJcbl0pXG5jb25zdCBvcmRlcmVkU3RhZ2VzID0gT2JqZWN0LmZyZWV6ZShbXCJwYXJzZVwiLCBcImdlbmVyYXRlXCIsIFwiY29tcGlsZVwiLCBcImxpbmtcIiwgXCJ2YWxpZGF0ZVwiLCBcImluc3RhbnRpYXRlXCIsIFwiZXhlY3V0ZVwiXSlcbmNvbnN0IHN0YWdlSW5kZXhlcyA9IG5ldyBNYXAob3JkZXJlZFN0YWdlcy5tYXAoKHN0YWdlLCBpbmRleCkgPT4gW3N0YWdlLCBpbmRleF0pKVxuXG4vKipcbiAqIE1hdGVyaWFsaXplcyBvbmUgYXJ0aWZhY3Qgc2V0IGFuZCBydW5zIG9yZGVyZWQgYWNjZXB0YW5jZSBzdGFnZXMgd2l0aG91dCBhIHNoZWxsLlxuICogQHBhcmFtIHtvYmplY3R9IGlucHV0IC0gQWNjZXB0YW5jZSByZXF1ZXN0LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0fSBpbnB1dC5hcnRpZmFjdHMgLSBDb21wbGV0ZSBpbnB1dCBhcnRpZmFjdHMuXG4gKiBAcGFyYW0ge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4+fSBbaW5wdXQuZW52aXJvbm1lbnRdIC0gRXhwbGljaXQgcHJvY2VzcyBlbnZpcm9ubWVudC5cbiAqIEBwYXJhbSB7e2FyZ3VtZW50czogc3RyaW5nW10sIHN0YWdlOiBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkFjY2VwdGFuY2VTdGFnZSwgdG9vbDogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5EaXNjb3ZlcmVkVG9vbGNoYWlufVtdfSBpbnB1dC5zdGFnZXMgLSBPcmRlcmVkIHN0YWdlcy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dC50YXJnZXQgLSBUYXJnZXQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge251bWJlcn0gW2lucHV0LnRpbWVvdXRNc10gLSBQZXItc3RhZ2UgdGltZW91dC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVJlc3VsdD59IENhcHR1cmVkIHJlc3VsdHMgYWZ0ZXIgY2xlYW51cC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkFjY2VwdGFuY2VTdGFnZXMoaW5wdXQpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0KSkgaW52YWxpZFJ1bm5lcihcIkFjY2VwdGFuY2UgcmVxdWlyZXMgYSByZXF1ZXN0IG9iamVjdC5cIiwgXCJhY2NlcHRhbmNlXCIpXG4gIGNvbnN0IGFydGlmYWN0cyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRBcnRpZmFjdFNldH0gKi8gKGlucHV0LmFydGlmYWN0cylcbiAgY29uc3QgZW52aXJvbm1lbnQgPSAvKiogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4+fSAqLyAoXG4gICAgaW5wdXQuZW52aXJvbm1lbnQgPT09IHVuZGVmaW5lZCA/IHtQQVRIOiBwcm9jZXNzLmVudi5QQVRIfSA6IGlucHV0LmVudmlyb25tZW50KVxuICBjb25zdCBzdGFnZXMgPSAvKiogQHR5cGUge3thcmd1bWVudHM6IHN0cmluZ1tdLCBzdGFnZTogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlU3RhZ2UsIHRvb2w6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuRGlzY292ZXJlZFRvb2xjaGFpbn1bXX0gKi8gKGlucHV0LnN0YWdlcylcbiAgY29uc3QgdGFyZ2V0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChpbnB1dC50YXJnZXQpXG4gIGNvbnN0IHRpbWVvdXRNcyA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoaW5wdXQudGltZW91dE1zID09PSB1bmRlZmluZWQgPyAxMF8wMDAgOiBpbnB1dC50aW1lb3V0TXMpXG4gIGNvbnN0IHJlcXVlc3QgPSB2YWxpZGF0ZVJlcXVlc3Qoe2FydGlmYWN0cywgZW52aXJvbm1lbnQsIHN0YWdlcywgdGFyZ2V0LCB0aW1lb3V0TXN9KVxuICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBjcmVhdGVBY2NlcHRhbmNlRGlyZWN0b3J5KHJlcXVlc3QudGFyZ2V0KVxuICAvKiogQHR5cGUge3Vua25vd259ICovXG4gIGxldCBwcmltYXJ5RmFpbHVyZVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVJlc3VsdCB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHJlc3VsdFxuICBsZXQgcHJpbWFyeUZhaWxlZCA9IGZhbHNlXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBtYXRlcmlhbGl6ZUFydGlmYWN0cyhyZXF1ZXN0LmFydGlmYWN0cywgZGlyZWN0b3J5LCByZXF1ZXN0LnRhcmdldClcblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlU3RhZ2VSZXN1bHRbXX0gKi9cbiAgICBjb25zdCByZXN1bHRzID0gW11cblxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgcmVxdWVzdC5zdGFnZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVGaWxlV2l0aERlYWRsaW5lKHtcbiAgICAgICAgICBhcmd1bWVudHM6IHN0YWdlLmFyZ3VtZW50cyxcbiAgICAgICAgICBjd2Q6IGRpcmVjdG9yeSxcbiAgICAgICAgICBlbnZpcm9ubWVudDogcmVxdWVzdC5lbnZpcm9ubWVudCxcbiAgICAgICAgICBleGVjdXRhYmxlOiBzdGFnZS50b29sLmV4ZWN1dGFibGUsXG4gICAgICAgICAgbWF4QnVmZmVyOiBhY2NlcHRhbmNlTWF4QnVmZmVyLFxuICAgICAgICAgIHRpbWVvdXRNczogcmVxdWVzdC50aW1lb3V0TXNcbiAgICAgICAgfSlcblxuICAgICAgICByZXN1bHRzLnB1c2goT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgICAgYXJndW1lbnRzOiBPYmplY3QuZnJlZXplKFsuLi5zdGFnZS5hcmd1bWVudHNdKSxcbiAgICAgICAgICBleGVjdXRhYmxlOiBzdGFnZS50b29sLmV4ZWN1dGFibGUsXG4gICAgICAgICAgc3RhZ2U6IHN0YWdlLnN0YWdlLFxuICAgICAgICAgIHN0ZGVycjogcmVzdWx0LnN0ZGVycixcbiAgICAgICAgICBzdGRvdXQ6IHJlc3VsdC5zdGRvdXQsXG4gICAgICAgICAgdmVyc2lvbjogc3RhZ2UudG9vbC52ZXJzaW9uXG4gICAgICAgIH0pKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgcHJvY2Vzc0RpYWdub3N0aWMoZXJyb3IsIHN0YWdlLCByZXF1ZXN0LnRhcmdldCwgcmVxdWVzdC50aW1lb3V0TXMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gT2JqZWN0LmZyZWV6ZSh7ZGlyZWN0b3J5LCBzdGFnZXM6IE9iamVjdC5mcmVlemUocmVzdWx0cyksIHRhcmdldDogcmVxdWVzdC50YXJnZXR9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW1hcnlGYWlsZWQgPSB0cnVlXG4gICAgcHJpbWFyeUZhaWx1cmUgPSBlcnJvclxuICB9XG5cbiAgLyoqIEB0eXBlIHt1bmtub3dufSAqL1xuICBsZXQgY2xlYW51cEZhaWx1cmVcbiAgbGV0IGNsZWFudXBGYWlsZWQgPSBmYWxzZVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgcmVtb3ZlQWNjZXB0YW5jZURpcmVjdG9yeShkaXJlY3RvcnksIHJlcXVlc3QudGFyZ2V0KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNsZWFudXBGYWlsZWQgPSB0cnVlXG4gICAgY2xlYW51cEZhaWx1cmUgPSBlcnJvclxuICB9XG5cbiAgaWYgKHByaW1hcnlGYWlsZWQgJiYgY2xlYW51cEZhaWxlZCAmJiBwcmltYXJ5RmFpbHVyZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgdGhyb3cgcHJlc2VydmVQcmltYXJ5RmFpbHVyZShwcmltYXJ5RmFpbHVyZSwgY2xlYW51cEZhaWx1cmUsIHJlcXVlc3QudGFyZ2V0KVxuICB9XG4gIGlmIChwcmltYXJ5RmFpbGVkKSB0aHJvdyBwcmltYXJ5RmFpbHVyZVxuICBpZiAoY2xlYW51cEZhaWxlZCkgdGhyb3cgY2xlYW51cEZhaWx1cmVcblxuICByZXR1cm4gLyoqIEB0eXBlIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkFjY2VwdGFuY2VSZXN1bHR9ICovIChyZXN1bHQpXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFuZCBkZXRhY2hlcyBhIHN0YWdlZCBhY2NlcHRhbmNlIHJlcXVlc3QgYmVmb3JlIGZpbGVzeXN0ZW0gbXV0YXRpb24uXG4gKiBAcGFyYW0ge3tcbiAqICAgYXJ0aWZhY3RzOiBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0LFxuICogICBlbnZpcm9ubWVudDogUmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPj4sXG4gKiAgIHN0YWdlczoge2FyZ3VtZW50czogc3RyaW5nW10sIHN0YWdlOiBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkFjY2VwdGFuY2VTdGFnZSwgdG9vbDogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5EaXNjb3ZlcmVkVG9vbGNoYWlufVtdLFxuICogICB0YXJnZXQ6IHN0cmluZyxcbiAqICAgdGltZW91dE1zOiBudW1iZXJcbiAqIH19IGlucHV0IC0gQ2FuZGlkYXRlIHJlcXVlc3QuXG4gKiBAcmV0dXJucyB7e1xuICogICBhcnRpZmFjdHM6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3RTZXQsXG4gKiAgIGVudmlyb25tZW50OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+PixcbiAqICAgc3RhZ2VzOiB7YXJndW1lbnRzOiBzdHJpbmdbXSwgc3RhZ2U6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVN0YWdlLCB0b29sOiBSZWFkb25seTx7ZXhlY3V0YWJsZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmd9Pn1bXSxcbiAqICAgdGFyZ2V0OiBzdHJpbmcsXG4gKiAgIHRpbWVvdXRNczogbnVtYmVyXG4gKiB9fSBWYWxpZGF0ZWQgcmVxdWVzdC5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVSZXF1ZXN0KGlucHV0KSB7XG4gIHRyeSB7XG4gICAgaWYgKHR5cGVvZiBpbnB1dC50YXJnZXQgIT0gXCJzdHJpbmdcIiB8fCBpbnB1dC50YXJnZXQubGVuZ3RoID09IDAgfHwgIWlzU3VwcG9ydGVkVGltZW91dE1zKGlucHV0LnRpbWVvdXRNcykgfHxcbiAgICAgICFpc0RlbnNlQXJyYXkoaW5wdXQuc3RhZ2VzKSB8fCBpbnB1dC5zdGFnZXMubGVuZ3RoID09IDApIHtcbiAgICAgIGludmFsaWRSdW5uZXIoYEFjY2VwdGFuY2UgcmVxdWlyZXMgYSB0YXJnZXQsIHRpbWVvdXQgZnJvbSAxIHRocm91Z2ggJHttYXhpbXVtVGltZW91dE1zfW1zLCBhbmQgbm9uLWVtcHR5IG9yZGVyZWQgc3RhZ2VzLmAsIGlucHV0LnRhcmdldClcbiAgICB9XG4gICAgY29uc3QgYXJ0aWZhY3RzID0gY3JlYXRlR2VuZXJhdGVkQXJ0aWZhY3RTZXQoaW5wdXQuYXJ0aWZhY3RzKVxuXG4gICAgaWYgKGFydGlmYWN0cy50YXJnZXQgIT0gaW5wdXQudGFyZ2V0KSBpbnZhbGlkUnVubmVyKFwiQWNjZXB0YW5jZSB0YXJnZXQgbXVzdCBtYXRjaCB0aGUgZ2VuZXJhdGVkIGFydGlmYWN0LXNldCB0YXJnZXQuXCIsIGlucHV0LnRhcmdldClcbiAgICBjb25zdCBlbnZpcm9ubWVudCA9IGRldGVybWluaXN0aWNFbnZpcm9ubWVudChpbnB1dC5lbnZpcm9ubWVudClcbiAgICBsZXQgcHJldmlvdXNJbmRleCA9IC0xXG4gICAgY29uc3Qgc2VlbiA9IG5ldyBTZXQoKVxuICAgIC8qKiBAdHlwZSB7e2FyZ3VtZW50czogc3RyaW5nW10sIHN0YWdlOiBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkFjY2VwdGFuY2VTdGFnZSwgdG9vbDogUmVhZG9ubHk8e2V4ZWN1dGFibGU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT59W119ICovXG4gICAgY29uc3Qgc3RhZ2VzID0gW11cblxuICAgIGZvciAobGV0IHN0YWdlUG9zaXRpb24gPSAwOyBzdGFnZVBvc2l0aW9uIDwgaW5wdXQuc3RhZ2VzLmxlbmd0aDsgc3RhZ2VQb3NpdGlvbiArPSAxKSB7XG4gICAgICBjb25zdCBzdGFnZSA9IGlucHV0LnN0YWdlc1tzdGFnZVBvc2l0aW9uXVxuXG4gICAgICBpZiAoIWlzUGxhaW5PYmplY3Qoc3RhZ2UpKSBpbnZhbGlkUnVubmVyKFwiQWNjZXB0YW5jZSBzdGFnZXMgbXVzdCBiZSBkaXN0aW5jdCBrbm93biBzdGFnZSByZWNvcmRzLlwiLCBpbnB1dC50YXJnZXQpXG4gICAgICBjb25zdCBzdGFnZU5hbWUgPSBzdGFnZS5zdGFnZVxuXG4gICAgICBpZiAodHlwZW9mIHN0YWdlTmFtZSAhPSBcInN0cmluZ1wiIHx8ICFzdGFnZUluZGV4ZXMuaGFzKHN0YWdlTmFtZSkgfHwgc2Vlbi5oYXMoc3RhZ2VOYW1lKSkge1xuICAgICAgICBpbnZhbGlkUnVubmVyKFwiQWNjZXB0YW5jZSBzdGFnZXMgbXVzdCBiZSBkaXN0aW5jdCBrbm93biBzdGFnZSByZWNvcmRzLlwiLCBpbnB1dC50YXJnZXQpXG4gICAgICB9XG4gICAgICBjb25zdCBpbmRleCA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoc3RhZ2VJbmRleGVzLmdldChzdGFnZU5hbWUpKVxuXG4gICAgICBpZiAoaW5kZXggPCBwcmV2aW91c0luZGV4KSBpbnZhbGlkUnVubmVyKFwiQWNjZXB0YW5jZSBzdGFnZXMgbXVzdCBmb2xsb3cgcGFyc2UtdG8tZXhlY3V0ZSBvcmRlci5cIiwgaW5wdXQudGFyZ2V0KVxuICAgICAgcHJldmlvdXNJbmRleCA9IGluZGV4XG4gICAgICBzZWVuLmFkZChzdGFnZU5hbWUpXG4gICAgICBjb25zdCBhcmd1bWVudENhbmRpZGF0ZSA9IHN0YWdlLmFyZ3VtZW50c1xuICAgICAgY29uc3Qgc3RhZ2VBcmd1bWVudHMgPSBpc0RlbnNlQXJyYXkoYXJndW1lbnRDYW5kaWRhdGUpID8gWy4uLmFyZ3VtZW50Q2FuZGlkYXRlXSA6IHVuZGVmaW5lZFxuICAgICAgY29uc3QgdG9vbENhbmRpZGF0ZSA9IHN0YWdlLnRvb2xcbiAgICAgIGNvbnN0IHRvb2wgPSBpc1BsYWluT2JqZWN0KHRvb2xDYW5kaWRhdGUpID8gT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgIGV4ZWN1dGFibGU6IHRvb2xDYW5kaWRhdGUuZXhlY3V0YWJsZSxcbiAgICAgICAgaWQ6IHRvb2xDYW5kaWRhdGUuaWQsXG4gICAgICAgIHNvdXJjZTogdG9vbENhbmRpZGF0ZS5zb3VyY2UsXG4gICAgICAgIHZlcnNpb246IHRvb2xDYW5kaWRhdGUudmVyc2lvblxuICAgICAgfSkgOiB1bmRlZmluZWRcblxuICAgICAgaWYgKHN0YWdlQXJndW1lbnRzID09IHVuZGVmaW5lZCB8fCAhc3RhZ2VBcmd1bWVudHMuZXZlcnkoKGFyZ3VtZW50KSA9PiB0eXBlb2YgYXJndW1lbnQgPT0gXCJzdHJpbmdcIiAmJiAhYXJndW1lbnQuaW5jbHVkZXMoXCJcXDBcIikpIHx8XG4gICAgICAgICFpc1Rvb2wodG9vbCkpIGludmFsaWRSdW5uZXIoYEFjY2VwdGFuY2Ugc3RhZ2UgJyR7c3RhZ2VOYW1lfScgaGFzIGFuIGludmFsaWQgdG9vbCBvciBhcmd1bWVudCBhcnJheS5gLCBpbnB1dC50YXJnZXQpXG5cbiAgICAgIHN0YWdlcy5wdXNoKE9iamVjdC5mcmVlemUoe2FyZ3VtZW50czogc3RhZ2VBcmd1bWVudHMsIHN0YWdlOiBzdGFnZU5hbWUsIHRvb2x9KSlcbiAgICB9XG5cbiAgICByZXR1cm4ge2FydGlmYWN0cywgZW52aXJvbm1lbnQsIHN0YWdlcywgdGFyZ2V0OiBpbnB1dC50YXJnZXQsIHRpbWVvdXRNczogaW5wdXQudGltZW91dE1zfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlbWFudGlmb2xkRGlhZ25vc3RpYyAmJiBlcnJvci5jb2RlID09IFwiSU5WQUxJRF9BQ0NFUFRBTkNFX1JVTk5FUlwiKSB0aHJvdyBlcnJvclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIFNlbWFudGlmb2xkRGlhZ25vc3RpYykge1xuICAgICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICAgIGNhdXNlOiBlcnJvcixcbiAgICAgICAgY29kZTogXCJJTlZBTElEX0FDQ0VQVEFOQ0VfUlVOTkVSXCIsXG4gICAgICAgIGxhbmd1YWdlOiB0eXBlb2YgaW5wdXQudGFyZ2V0ID09IFwic3RyaW5nXCIgPyBpbnB1dC50YXJnZXQgOiBcImFjY2VwdGFuY2VcIixcbiAgICAgICAgbWVzc2FnZTogYEFjY2VwdGFuY2UgcnVubmVyIGlucHV0IGlzIGludmFsaWQ6ICR7ZXJyb3IuZGV0YWlsfWBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIGludmFsaWRSdW5uZXIoXCJBY2NlcHRhbmNlIHJ1bm5lciBpbnB1dCBpcyBpbnZhbGlkLlwiLCB0eXBlb2YgaW5wdXQudGFyZ2V0ID09IFwic3RyaW5nXCIgPyBpbnB1dC50YXJnZXQgOiBcImFjY2VwdGFuY2VcIiwgZXJyb3IpXG4gIH1cbn1cblxuLyoqXG4gKiBOb3JtYWxpemVzIGEgc3VicHJvY2VzcyBmYWlsdXJlIHdpdGggZXhhY3Qgc3RhZ2UgYW5kIHRvb2xjaGFpbiBjb250ZXh0LlxuICogQHBhcmFtIHt1bmtub3dufSBlcnJvciAtIFN1YnByb2Nlc3MgcmVqZWN0aW9uLlxuICogQHBhcmFtIHt7YXJndW1lbnRzOiBzdHJpbmdbXSwgc3RhZ2U6IHN0cmluZywgdG9vbDogUmVhZG9ubHk8e2V4ZWN1dGFibGU6IHN0cmluZywgdmVyc2lvbjogc3RyaW5nfT59fSBzdGFnZSAtIEZhaWxlZCBzdGFnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBY2NlcHRhbmNlIHRhcmdldC5cbiAqIEBwYXJhbSB7bnVtYmVyfSB0aW1lb3V0TXMgLSBDb25maWd1cmVkIHN0YWdlIHRpbWVvdXQuXG4gKiBAcmV0dXJucyB7U2VtYW50aWZvbGREaWFnbm9zdGljfSBOb3JtYWxpemVkIGZhaWx1cmUuXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NEaWFnbm9zdGljKGVycm9yLCBzdGFnZSwgdGFyZ2V0LCB0aW1lb3V0TXMpIHtcbiAgY29uc3QgZmllbGRzID0gcHJvY2Vzc0Vycm9yRmllbGRzKGVycm9yKVxuICBjb25zdCBvdXRwdXRMaW1pdGVkID0gZmllbGRzLm5hdGl2ZUNvZGUgPT0gXCJFUlJfQ0hJTERfUFJPQ0VTU19TVERJT19NQVhCVUZGRVJcIlxuICBjb25zdCB0aW1lZE91dCA9ICFvdXRwdXRMaW1pdGVkICYmIGV4Y2VlZGVkT3duZWREZWFkbGluZShlcnJvcilcbiAgY29uc3QgbGF1bmNoRmFpbHVyZSA9IGZpZWxkcy5uYXRpdmVDb2RlICE9IHVuZGVmaW5lZCAmJiBsYXVuY2hFcnJvckNvZGVzLmhhcyhmaWVsZHMubmF0aXZlQ29kZSlcbiAgY29uc3Qgc2lnbmFsZWQgPSAhb3V0cHV0TGltaXRlZCAmJiAhdGltZWRPdXQgJiYgZmllbGRzLnNpZ25hbCAhPSB1bmRlZmluZWRcbiAgY29uc3QgY29kZSA9IG91dHB1dExpbWl0ZWQgPyBcIkFDQ0VQVEFOQ0VfT1VUUFVUX0xJTUlUXCIgOiB0aW1lZE91dCA/IFwiQUNDRVBUQU5DRV9USU1FT1VUXCIgOiBsYXVuY2hGYWlsdXJlID8gXCJBQ0NFUFRBTkNFX0xBVU5DSF9GQUlMVVJFXCIgOiBzaWduYWxlZFxuICAgID8gXCJBQ0NFUFRBTkNFX1NJR05BTFwiXG4gICAgOiBcIkFDQ0VQVEFOQ0VfTk9OWkVST19FWElUXCJcbiAgY29uc3QgcmVhc29uID0gb3V0cHV0TGltaXRlZCA/IGBleGNlZWRlZCB0aGUgJHthY2NlcHRhbmNlTWF4QnVmZmVyfS1ieXRlIG91dHB1dCBjYXB0dXJlIGxpbWl0ICgke2ZpZWxkcy5uYXRpdmVDb2RlfSlgIDogdGltZWRPdXRcbiAgICA/IGB0aW1lZCBvdXQgYWZ0ZXIgJHt0aW1lb3V0TXN9bXNgIDogbGF1bmNoRmFpbHVyZVxuICAgID8gYGNvdWxkIG5vdCBsYXVuY2ggKCR7ZmllbGRzLm5hdGl2ZUNvZGV9KWBcbiAgICA6IHNpZ25hbGVkID8gYHRlcm1pbmF0ZWQgYnkgc2lnbmFsICR7ZmllbGRzLnNpZ25hbH1gXG4gICAgOiBmaWVsZHMuZXhpdENvZGUgIT0gdW5kZWZpbmVkID8gYGV4aXRlZCBub256ZXJvICgke2ZpZWxkcy5leGl0Q29kZX0pYFxuICAgIDogYGZhaWxlZCBhZnRlciBsYXVuY2ggKCR7ZmllbGRzLm5hdGl2ZUNvZGUgPz8gXCJ1bmtub3duXCJ9KWBcblxuICByZXR1cm4gbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgY2F1c2U6IG91dHB1dExpbWl0ZWQgPyB1bmRlZmluZWQgOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgY29kZSxcbiAgICBleGVjdXRhYmxlOiBzdGFnZS50b29sLmV4ZWN1dGFibGUsXG4gICAgZXhpdENvZGU6IGZpZWxkcy5leGl0Q29kZSxcbiAgICBsYW5ndWFnZTogdGFyZ2V0LFxuICAgIG1lc3NhZ2U6IGBBY2NlcHRhbmNlIHN0YWdlICcke3N0YWdlLnN0YWdlfScgJHtyZWFzb259IHVzaW5nICcke3N0YWdlLnRvb2wuZXhlY3V0YWJsZX0nICgke3N0YWdlLnRvb2wudmVyc2lvbn0pLmAsXG4gICAgc2lnbmFsOiBmaWVsZHMuc2lnbmFsLFxuICAgIHN0YWdlOiBzdGFnZS5zdGFnZSxcbiAgICBzdGRlcnI6IGZpZWxkcy5zdGRlcnIsXG4gICAgc3Rkb3V0OiBmaWVsZHMuc3Rkb3V0LFxuICAgIHZlcnNpb246IHN0YWdlLnRvb2wudmVyc2lvblxuICB9KVxufVxuXG4vKipcbiAqIE5hcnJvd3MgdGhlIHN0YWJsZSBmaWVsZHMgb2YgYW4gb3BhcXVlIGNoaWxkLXByb2Nlc3MgZmFpbHVyZS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gZXJyb3IgLSBQcm9jZXNzIHJlamVjdGlvbi5cbiAqIEByZXR1cm5zIHt7ZXhpdENvZGU6IG51bWJlciB8IHVuZGVmaW5lZCwgbmF0aXZlQ29kZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBzaWduYWw6IHN0cmluZyB8IHVuZGVmaW5lZCwgc3RkZXJyOiBzdHJpbmcsIHN0ZG91dDogc3RyaW5nfX0gU3RhYmxlIGZpZWxkcy5cbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0Vycm9yRmllbGRzKGVycm9yKSB7XG4gIGlmICghZXJyb3IgfHwgdHlwZW9mIGVycm9yICE9IFwib2JqZWN0XCIpIHJldHVybiB7ZXhpdENvZGU6IHVuZGVmaW5lZCwgbmF0aXZlQ29kZTogdW5kZWZpbmVkLCBzaWduYWw6IHVuZGVmaW5lZCwgc3RkZXJyOiBcIlwiLCBzdGRvdXQ6IFwiXCJ9XG4gIGNvbnN0IHZhbHVlID0gLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8gKGVycm9yKVxuICBjb25zdCBuYXRpdmVDb2RlID0gdHlwZW9mIHZhbHVlLmNvZGUgPT0gXCJzdHJpbmdcIiA/IHZhbHVlLmNvZGUgOiB1bmRlZmluZWRcbiAgY29uc3Qgb3V0cHV0TGltaXRlZCA9IG5hdGl2ZUNvZGUgPT0gXCJFUlJfQ0hJTERfUFJPQ0VTU19TVERJT19NQVhCVUZGRVJcIlxuXG4gIHJldHVybiB7XG4gICAgZXhpdENvZGU6IHR5cGVvZiB2YWx1ZS5jb2RlID09IFwibnVtYmVyXCIgPyB2YWx1ZS5jb2RlIDogdW5kZWZpbmVkLFxuICAgIG5hdGl2ZUNvZGUsXG4gICAgc2lnbmFsOiB0eXBlb2YgdmFsdWUuc2lnbmFsID09IFwic3RyaW5nXCIgPyB2YWx1ZS5zaWduYWwgOiB1bmRlZmluZWQsXG4gICAgc3RkZXJyOiAhb3V0cHV0TGltaXRlZCAmJiB0eXBlb2YgdmFsdWUuc3RkZXJyID09IFwic3RyaW5nXCIgPyB2YWx1ZS5zdGRlcnIgOiBcIlwiLFxuICAgIHN0ZG91dDogIW91dHB1dExpbWl0ZWQgJiYgdHlwZW9mIHZhbHVlLnN0ZG91dCA9PSBcInN0cmluZ1wiID8gdmFsdWUuc3Rkb3V0IDogXCJcIlxuICB9XG59XG5cbi8qKlxuICogQ2hlY2tzIHRoZSBkaXNjb3ZlcmVkLXRvb2wgZmllbGRzIGNvbnN1bWVkIGJ5IHRoZSBydW5uZXIuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHRvb2wuXG4gKiBAcmV0dXJucyB7dmFsdWUgaXMgaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5EaXNjb3ZlcmVkVG9vbGNoYWlufSBXaGV0aGVyIHRoZSB0b29sIGNvbnRyYWN0IGlzIHByZXNlbnQuXG4gKi9cbmZ1bmN0aW9uIGlzVG9vbCh2YWx1ZSkge1xuICByZXR1cm4gaXNQbGFpbk9iamVjdCh2YWx1ZSkgJiYgdHlwZW9mIHZhbHVlLmlkID09IFwic3RyaW5nXCIgJiYgdHlwZW9mIHZhbHVlLmV4ZWN1dGFibGUgPT0gXCJzdHJpbmdcIiAmJiBwYXRoLmlzQWJzb2x1dGUodmFsdWUuZXhlY3V0YWJsZSkgJiZcbiAgICAhdmFsdWUuZXhlY3V0YWJsZS5pbmNsdWRlcyhcIlxcMFwiKSAmJiB0eXBlb2YgdmFsdWUudmVyc2lvbiA9PSBcInN0cmluZ1wiICYmIHZhbHVlLnZlcnNpb24ubGVuZ3RoID4gMCAmJlxuICAgICh2YWx1ZS5zb3VyY2UgPT0gXCJjYW5vbmljYWxcIiB8fCB2YWx1ZS5zb3VyY2UgPT0gXCJvdmVycmlkZVwiKVxufVxuXG4vKipcbiAqIEtlZXBzIHRoZSBwcmltYXJ5IGFjY2VwdGFuY2UgZXJyb3Igd2hpbGUgcmVjb3JkaW5nIGJvdW5kZWQgY2xlYW51cCBldmlkZW5jZSBpbiBpdHMgY2F1c2UgY2hhaW4uXG4gKiBAcGFyYW0ge0Vycm9yfSBwcmltYXJ5RmFpbHVyZSAtIE9yaWdpbmFsIG1hdGVyaWFsaXphdGlvbiBvciBzdGFnZSBmYWlsdXJlLlxuICogQHBhcmFtIHt1bmtub3dufSBjbGVhbnVwRmFpbHVyZSAtIENsZWFudXAgcmVqZWN0aW9uLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFjY2VwdGFuY2UgdGFyZ2V0LlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgb3JpZ2luYWwgcHJpbWFyeSBlcnJvciB3aXRoIHN0cnVjdHVyZWQgY2xlYW51cCBldmlkZW5jZS5cbiAqL1xuZnVuY3Rpb24gcHJlc2VydmVQcmltYXJ5RmFpbHVyZShwcmltYXJ5RmFpbHVyZSwgY2xlYW51cEZhaWx1cmUsIHRhcmdldCkge1xuICBjb25zdCBjbGVhbnVwRXZpZGVuY2UgPSBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjb2RlOiBcIkFDQ0VQVEFOQ0VfQ0xFQU5VUF9GQUlMVVJFXCIsXG4gICAgbGFuZ3VhZ2U6IGNsZWFudXBGYWlsdXJlIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljID8gY2xlYW51cEZhaWx1cmUubGFuZ3VhZ2UgOiB0YXJnZXQsXG4gICAgbWVzc2FnZTogXCJJc29sYXRlZCBhY2NlcHRhbmNlLWRpcmVjdG9yeSBjbGVhbnVwIGZhaWxlZCBhZnRlciB0aGUgcHJpbWFyeSBhY2NlcHRhbmNlIGZhaWx1cmUuXCJcbiAgfSlcbiAgY29uc3QgY2F1c2VzID0gcHJpbWFyeUZhaWx1cmUuY2F1c2UgaW5zdGFuY2VvZiBFcnJvciA/IFtwcmltYXJ5RmFpbHVyZS5jYXVzZSwgY2xlYW51cEV2aWRlbmNlXSA6IFtjbGVhbnVwRXZpZGVuY2VdXG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHByaW1hcnlGYWlsdXJlLCBcImNhdXNlXCIsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgdmFsdWU6IG5ldyBBZ2dyZWdhdGVFcnJvcihjYXVzZXMsIFwiQWNjZXB0YW5jZSBmYWlsZWQgYW5kIGlzb2xhdGVkLWRpcmVjdG9yeSBjbGVhbnVwIGFsc28gZmFpbGVkLlwiKSxcbiAgICB3cml0YWJsZTogdHJ1ZVxuICB9KVxuXG4gIHJldHVybiBwcmltYXJ5RmFpbHVyZVxufVxuXG4vKipcbiAqIFRocm93cyBhIG5vcm1hbGl6ZWQgcnVubmVyLWNvbmZpZ3VyYXRpb24gZGlhZ25vc3RpYy5cbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gRmFpbHVyZSBkZXRhaWwuXG4gKiBAcGFyYW0ge3Vua25vd259IHRhcmdldCAtIENhbmRpZGF0ZSB0YXJnZXQgaWRlbnRpdHkuXG4gKiBAcGFyYW0ge3Vua25vd259IFtlcnJvcl0gLSBQcmVzZXJ2ZWQgY2F1c2UuXG4gKiBAcmV0dXJucyB7bmV2ZXJ9IEFsd2F5cyB0aHJvd3MuXG4gKi9cbmZ1bmN0aW9uIGludmFsaWRSdW5uZXIobWVzc2FnZSwgdGFyZ2V0LCBlcnJvcikge1xuICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjYXVzZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgIGNvZGU6IFwiSU5WQUxJRF9BQ0NFUFRBTkNFX1JVTk5FUlwiLFxuICAgIGxhbmd1YWdlOiB0eXBlb2YgdGFyZ2V0ID09IFwic3RyaW5nXCIgJiYgdGFyZ2V0Lmxlbmd0aCA+IDAgPyB0YXJnZXQgOiBcImFjY2VwdGFuY2VcIixcbiAgICBtZXNzYWdlXG4gIH0pXG59XG5cbi8qKlxuICogQ2hlY2tzIGZvciBhbiBvcmRpbmFyeSBzdHJpbmcta2V5ZWQgb2JqZWN0LlxuICogQHBhcmFtIHt1bmtub3dufSB2YWx1ZSAtIENhbmRpZGF0ZSB2YWx1ZS5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gV2hldGhlciB0aGUgdmFsdWUgaXMgYSBwbGFpbiBvYmplY3QuXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PSBcIm9iamVjdFwiICYmIHZhbHVlICE9IG51bGwgJiYgIUFycmF5LmlzQXJyYXkodmFsdWUpICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSkgPT0gT2JqZWN0LnByb3RvdHlwZVxufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIGlzb2xhdGVkIGFjY2VwdGFuY2UgZGlyZWN0b3J5IHdpdGggYSBub3JtYWxpemVkIGZhaWx1cmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0b3J5IC0gRXhhY3QgdGVtcG9yYXJ5IGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBY2NlcHRhbmNlIHRhcmdldC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBDbGVhbnVwIGNvbXBsZXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlbW92ZUFjY2VwdGFuY2VEaXJlY3RvcnkoZGlyZWN0b3J5LCB0YXJnZXQpIHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBybShkaXJlY3RvcnksIHtmb3JjZTogdHJ1ZSwgcmVjdXJzaXZlOiB0cnVlfSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNhdXNlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICBjb2RlOiBcIkFDQ0VQVEFOQ0VfQ0xFQU5VUF9GQUlMVVJFXCIsXG4gICAgICBsYW5ndWFnZTogdGFyZ2V0LFxuICAgICAgbWVzc2FnZTogYEZhaWxlZCB0byByZW1vdmUgaXNvbGF0ZWQgYWNjZXB0YW5jZSBkaXJlY3RvcnkgJyR7ZGlyZWN0b3J5fScuYFxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBDcmVhdGVzIG9uZSBpc29sYXRlZCBhY2NlcHRhbmNlIGRpcmVjdG9yeSB3aXRoIGEgbm9ybWFsaXplZCBzZXR1cCBmYWlsdXJlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFjY2VwdGFuY2UgdGFyZ2V0LlxuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nPn0gRXhhY3QgdGVtcG9yYXJ5IGRpcmVjdG9yeS5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gY3JlYXRlQWNjZXB0YW5jZURpcmVjdG9yeSh0YXJnZXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gYXdhaXQgbWtkdGVtcChwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwic2VtYW50aWZvbGQtYWNjZXB0YW5jZS1cIikpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICBjYXVzZTogZXJyb3IgaW5zdGFuY2VvZiBFcnJvciA/IGVycm9yIDogdW5kZWZpbmVkLFxuICAgICAgY29kZTogXCJBQ0NFUFRBTkNFX1NFVFVQX0ZBSUxVUkVcIixcbiAgICAgIGxhbmd1YWdlOiB0YXJnZXQsXG4gICAgICBtZXNzYWdlOiBcIkZhaWxlZCB0byBjcmVhdGUgYW4gaXNvbGF0ZWQgYWNjZXB0YW5jZSBkaXJlY3RvcnkuXCJcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogV3JpdGVzIG9ubHkgdGhlIGFscmVhZHktdmFsaWRhdGVkIGdlbmVyYXRlZCBhcnRpZmFjdHMgaW50byB0aGUgaXNvbGF0ZWQgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkdlbmVyYXRlZEFydGlmYWN0U2V0fSBhcnRpZmFjdHMgLSBDb21wbGV0ZSB2YWxpZGF0ZWQgc2V0LlxuICogQHBhcmFtIHtzdHJpbmd9IGRpcmVjdG9yeSAtIEV4YWN0IHRlbXBvcmFyeSBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQWNjZXB0YW5jZSB0YXJnZXQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gTWF0ZXJpYWxpemF0aW9uIGNvbXBsZXRpb24uXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIG1hdGVyaWFsaXplQXJ0aWZhY3RzKGFydGlmYWN0cywgZGlyZWN0b3J5LCB0YXJnZXQpIHtcbiAgZm9yIChjb25zdCBhcnRpZmFjdCBvZiBhcnRpZmFjdHMuYXJ0aWZhY3RzKSB7XG4gICAgY29uc3QgZmlsZW5hbWUgPSBwYXRoLmpvaW4oZGlyZWN0b3J5LCAuLi5hcnRpZmFjdC5wYXRoLnNwbGl0KFwiL1wiKSlcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBta2RpcihwYXRoLmRpcm5hbWUoZmlsZW5hbWUpLCB7cmVjdXJzaXZlOiB0cnVlfSlcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlbmFtZSwgYXJ0aWZhY3QuY29udGVudClcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgbmV3IFNlbWFudGlmb2xkRGlhZ25vc3RpYyh7XG4gICAgICAgIGNhdXNlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICAgIGNvZGU6IFwiQUNDRVBUQU5DRV9NQVRFUklBTElaQVRJT05fRkFJTFVSRVwiLFxuICAgICAgICBsYW5ndWFnZTogdGFyZ2V0LFxuICAgICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIG1hdGVyaWFsaXplIGdlbmVyYXRlZCBhcnRpZmFjdCAnJHthcnRpZmFjdC5wYXRofScuYFxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWNjZXB0YW5jZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hY2NlcHRhbmNlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLFlBQVk7QUFFWixPQUFPLEVBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFDLE1BQU0sa0JBQWtCLENBQUE7QUFDOUQsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3hCLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUM1QixPQUFPLEVBQUMsWUFBWSxFQUFDLE1BQU0sWUFBWSxDQUFBO0FBQ3ZDLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGdCQUFnQixDQUFBO0FBQ3pELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQ3JELE9BQU8sRUFBQyxxQkFBcUIsRUFBRSx1QkFBdUIsRUFBQyxNQUFNLGlCQUFpQixDQUFBO0FBQzlFLE9BQU8sRUFBQyxvQkFBb0IsRUFBRSxnQkFBZ0IsRUFBQyxNQUFNLGNBQWMsQ0FBQTtBQUNuRSxPQUFPLEVBQUMsd0JBQXdCLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQTtBQUV4RCxNQUFNLG1CQUFtQixHQUFHLEVBQUUsR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFBO0FBQzVDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDL0IsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVM7Q0FDbEosQ0FBQyxDQUFBO0FBQ0YsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGFB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U0FBUyxFQUFFLElBQUksRUFBQyxDQUFDLENBQUE7WUFDdEQsTUFBTSxTQUFTLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUM3QyxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE1BQU0sSUFBSSxxQkFBcUIsQ0FBQztnQkFDOUIsS0FBSyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsU0FBUztnQkFDakQsSUFBSSxFQUFFLG9DQUFvQztnQkFDMUMsUUFBUSxFQUFFLE1BQU07Z0JBQ2hCLE9BQU8sRUFBRSw2Q0FBNkMsUUFBUSxDQUFDLElBQUksSUFBSTthQUN4RSxDQUFDLENBQUE7UUFDSixDQUFDO0lBQ0gsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHtta2RpciwgbWtkdGVtcCwgcm0sIHdyaXRlRmlsZX0gZnJvbSBcIm5vZGU6ZnMvcHJvbWlzZXNcIlxuaW1wb3J0IG9zIGZyb20gXCJub2RlOm9zXCJcbmltcG9ydCBwYXRoIGZyb20gXCJub2RlOnBhdGhcIlxuaW1wb3J0IHtpc0RlbnNlQXJyYXl9IGZyb20gXCIuL2FycmF5LmpzXCJcbmltcG9ydCB7Y3JlYXRlR2VuZXJhdGVkQXJ0aWZhY3RTZXR9IGZyb20gXCIuL2FydGlmYWN0cy5qc1wiXG5pbXBvcnQge1NlbWFudGlmb2xkRGlhZ25vc3RpY30gZnJvbSBcIi4vZGlhZ25vc3RpYy5qc1wiXG5pbXBvcnQge2V4Y2VlZGVkT3duZWREZWFkbGluZSwgZXhlY3V0ZUZpbGVXaXRoRGVhZGxpbmV9IGZyb20gXCIuL3N1YnByb2Nlc3MuanNcIlxuaW1wb3J0IHtpc1N1cHBvcnRlZFRpbWVvdXRNcywgbWF4aW11bVRpbWVvdXRNc30gZnJvbSBcIi4vdGltZW91dC5qc1wiXG5pbXBvcnQge2RldGVybWluaXN0aWNFbnZpcm9ubWVudH0gZnJvbSBcIi4vdG9vbGNoYWlucy5qc1wiXG5cbmNvbnN0IGFjY2VwdGFuY2VNYXhCdWZmZXIgPSAxNiAqIDEwMjQgKiAxMDI0XG5jb25zdCBsYXVuY2hFcnJvckNvZGVzID0gbmV3IFNldChbXG4gIFwiRTJCSUdcIiwgXCJFQUNDRVNcIiwgXCJFQUdBSU5cIiwgXCJFTE9PUFwiLCBcIkVNRklMRVwiLCBcIkVOQU1FVE9PTE9OR1wiLCBcIkVORklMRVwiLCBcIkVOT0VOVFwiLCBcIkVOT0VYRUNcIiwgXCJFTk9NRU1cIiwgXCJFTk9URElSXCIsIFwiRU5PVFNVUFwiLCBcIkVQRVJNXCIsIFwiRVRYVEJTWVwiXG5dKVxuY29uc3Qgb3JkZXJlZFN0YWdlcyA9IE9iamVjdC5mcmVlemUoW1wicGFyc2VcIiwgXCJnZW5lcmF0ZVwiLCBcInJlc3RvcmVcIiwgXCJjb21waWxlXCIsIFwibGlua1wiLCBcInZhbGlkYXRlXCIsIFwiaW5zdGFudGlhdGVcIiwgXCJleGVjdXRlXCJdKVxuY29uc3Qgc3RhZ2VJbmRleGVzID0gbmV3IE1hcChvcmRlcmVkU3RhZ2VzLm1hcCgoc3RhZ2UsIGluZGV4KSA9PiBbc3RhZ2UsIGluZGV4XSkpXG5cbi8qKlxuICogTWF0ZXJpYWxpemVzIG9uZSBhcnRpZmFjdCBzZXQgYW5kIHJ1bnMgb3JkZXJlZCBhY2NlcHRhbmNlIHN0YWdlcyB3aXRob3V0IGEgc2hlbGwuXG4gKiBAcGFyYW0ge29iamVjdH0gaW5wdXQgLSBBY2NlcHRhbmNlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3RTZXR9IGlucHV0LmFydGlmYWN0cyAtIENvbXBsZXRlIGlucHV0IGFydGlmYWN0cy5cbiAqIEBwYXJhbSB7UmVhZG9ubHk8UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPj59IFtpbnB1dC5lbnZpcm9ubWVudF0gLSBFeHBsaWNpdCBwcm9jZXNzIGVudmlyb25tZW50LlxuICogQHBhcmFtIHt7YXJndW1lbnRzOiBzdHJpbmdbXSwgc3RhZ2U6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVN0YWdlLCB0b29sOiBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkRpc2NvdmVyZWRUb29sY2hhaW59W119IGlucHV0LnN0YWdlcyAtIE9yZGVyZWQgc3RhZ2VzLlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0LnRhcmdldCAtIFRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbaW5wdXQudGltZW91dE1zXSAtIFBlci1zdGFnZSB0aW1lb3V0LlxuICogQHJldHVybnMge1Byb21pc2U8aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlUmVzdWx0Pn0gQ2FwdHVyZWQgcmVzdWx0cyBhZnRlciBjbGVhbnVwLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQWNjZXB0YW5jZVN0YWdlcyhpbnB1dCkge1xuICByZXR1cm4gYXdhaXQgcnVuQWNjZXB0YW5jZVN0YWdlc1dpdGhEZXBlbmRlbmNpZXMoaW5wdXQsIHJtKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gYWNjZXB0YW5jZSBydW5uZXIgd2l0aCBpbnN0YW5jZS1vd25lZCBjbGVhbnVwIGJlaGF2aW9yLlxuICogQHBhcmFtIHtvYmplY3R9IGRlcGVuZGVuY2llcyAtIEludGVybmFsIHJ1bm5lciBkZXBlbmRlbmNpZXMuXG4gKiBAcGFyYW0ge3R5cGVvZiBybX0gZGVwZW5kZW5jaWVzLnJlbW92ZURpcmVjdG9yeSAtIElzb2xhdGVkLWRpcmVjdG9yeSByZW1vdmFsIG9wZXJhdGlvbi5cbiAqIEByZXR1cm5zIHt0eXBlb2YgcnVuQWNjZXB0YW5jZVN0YWdlc30gQWNjZXB0YW5jZSBydW5uZXIuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBY2NlcHRhbmNlUnVubmVyKHtyZW1vdmVEaXJlY3Rvcnl9KSB7XG4gIHJldHVybiBhc3luYyAoaW5wdXQpID0+IGF3YWl0IHJ1bkFjY2VwdGFuY2VTdGFnZXNXaXRoRGVwZW5kZW5jaWVzKGlucHV0LCByZW1vdmVEaXJlY3RvcnkpXG59XG5cbi8qKlxuICogUnVucyBhY2NlcHRhbmNlIHdpdGggZXhhY3QgaW5zdGFuY2Utb3duZWQgZGVwZW5kZW5jaWVzLlxuICogQHBhcmFtIHtQYXJhbWV0ZXJzPHR5cGVvZiBydW5BY2NlcHRhbmNlU3RhZ2VzPlswXX0gaW5wdXQgLSBBY2NlcHRhbmNlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge3R5cGVvZiBybX0gcmVtb3ZlRGlyZWN0b3J5IC0gSXNvbGF0ZWQtZGlyZWN0b3J5IHJlbW92YWwgb3BlcmF0aW9uLlxuICogQHJldHVybnMge1JldHVyblR5cGU8dHlwZW9mIHJ1bkFjY2VwdGFuY2VTdGFnZXM+fSBDYXB0dXJlZCByZXN1bHRzIGFmdGVyIGNsZWFudXAuXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJ1bkFjY2VwdGFuY2VTdGFnZXNXaXRoRGVwZW5kZW5jaWVzKGlucHV0LCByZW1vdmVEaXJlY3RvcnkpIHtcbiAgaWYgKCFpc1BsYWluT2JqZWN0KGlucHV0KSkgaW52YWxpZFJ1bm5lcihcIkFjY2VwdGFuY2UgcmVxdWlyZXMgYSByZXF1ZXN0IG9iamVjdC5cIiwgXCJhY2NlcHRhbmNlXCIpXG4gIGNvbnN0IGFydGlmYWN0cyA9IC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRBcnRpZmFjdFNldH0gKi8gKGlucHV0LmFydGlmYWN0cylcbiAgY29uc3QgZW52aXJvbm1lbnQgPSAvKiogQHR5cGUge1JlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4+fSAqLyAoXG4gICAgaW5wdXQuZW52aXJvbm1lbnQgPT09IHVuZGVmaW5lZCA/IHtQQVRIOiBwcm9jZXNzLmVudi5QQVRIfSA6IGlucHV0LmVudmlyb25tZW50KVxuICBjb25zdCBzdGFnZXMgPSAvKiogQHR5cGUge3thcmd1bWVudHM6IHN0cmluZ1tdLCBzdGFnZTogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlU3RhZ2UsIHRvb2w6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuRGlzY292ZXJlZFRvb2xjaGFpbn1bXX0gKi8gKGlucHV0LnN0YWdlcylcbiAgY29uc3QgdGFyZ2V0ID0gLyoqIEB0eXBlIHtzdHJpbmd9ICovIChpbnB1dC50YXJnZXQpXG4gIGNvbnN0IHRpbWVvdXRNcyA9IC8qKiBAdHlwZSB7bnVtYmVyfSAqLyAoaW5wdXQudGltZW91dE1zID09PSB1bmRlZmluZWQgPyAxMF8wMDAgOiBpbnB1dC50aW1lb3V0TXMpXG4gIGNvbnN0IHJlcXVlc3QgPSB2YWxpZGF0ZVJlcXVlc3Qoe2FydGlmYWN0cywgZW52aXJvbm1lbnQsIHN0YWdlcywgdGFyZ2V0LCB0aW1lb3V0TXN9KVxuICBjb25zdCBkaXJlY3RvcnkgPSBhd2FpdCBjcmVhdGVBY2NlcHRhbmNlRGlyZWN0b3J5KHJlcXVlc3QudGFyZ2V0KVxuICAvKiogQHR5cGUge3Vua25vd259ICovXG4gIGxldCBwcmltYXJ5RmFpbHVyZVxuICAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVJlc3VsdCB8IHVuZGVmaW5lZH0gKi9cbiAgbGV0IHJlc3VsdFxuICBsZXQgcHJpbWFyeUZhaWxlZCA9IGZhbHNlXG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBtYXRlcmlhbGl6ZUFydGlmYWN0cyhyZXF1ZXN0LmFydGlmYWN0cywgZGlyZWN0b3J5LCByZXF1ZXN0LnRhcmdldClcblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlU3RhZ2VSZXN1bHRbXX0gKi9cbiAgICBjb25zdCByZXN1bHRzID0gW11cblxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgcmVxdWVzdC5zdGFnZXMpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGV4ZWN1dGVGaWxlV2l0aERlYWRsaW5lKHtcbiAgICAgICAgICBhcmd1bWVudHM6IHN0YWdlLmFyZ3VtZW50cyxcbiAgICAgICAgICBjd2Q6IGRpcmVjdG9yeSxcbiAgICAgICAgICBlbnZpcm9ubWVudDogcmVxdWVzdC5lbnZpcm9ubWVudCxcbiAgICAgICAgICBleGVjdXRhYmxlOiBzdGFnZS50b29sLmV4ZWN1dGFibGUsXG4gICAgICAgICAgbWF4QnVmZmVyOiBhY2NlcHRhbmNlTWF4QnVmZmVyLFxuICAgICAgICAgIHRpbWVvdXRNczogcmVxdWVzdC50aW1lb3V0TXNcbiAgICAgICAgfSlcblxuICAgICAgICByZXN1bHRzLnB1c2goT2JqZWN0LmZyZWV6ZSh7XG4gICAgICAgICAgYXJndW1lbnRzOiBPYmplY3QuZnJlZXplKFsuLi5zdGFnZS5hcmd1bWVudHNdKSxcbiAgICAgICAgICBleGVjdXRhYmxlOiBzdGFnZS50b29sLmV4ZWN1dGFibGUsXG4gICAgICAgICAgc3RhZ2U6IHN0YWdlLnN0YWdlLFxuICAgICAgICAgIHN0ZGVycjogcmVzdWx0LnN0ZGVycixcbiAgICAgICAgICBzdGRvdXQ6IHJlc3VsdC5zdGRvdXQsXG4gICAgICAgICAgdmVyc2lvbjogc3RhZ2UudG9vbC52ZXJzaW9uXG4gICAgICAgIH0pKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhyb3cgcHJvY2Vzc0RpYWdub3N0aWMoZXJyb3IsIHN0YWdlLCByZXF1ZXN0LnRhcmdldCwgcmVxdWVzdC50aW1lb3V0TXMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdWx0ID0gT2JqZWN0LmZyZWV6ZSh7ZGlyZWN0b3J5LCBzdGFnZXM6IE9iamVjdC5mcmVlemUocmVzdWx0cyksIHRhcmdldDogcmVxdWVzdC50YXJnZXR9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHByaW1hcnlGYWlsZWQgPSB0cnVlXG4gICAgcHJpbWFyeUZhaWx1cmUgPSBlcnJvclxuICB9XG5cbiAgLyoqIEB0eXBlIHt1bmtub3dufSAqL1xuICBsZXQgY2xlYW51cEZhaWx1cmVcbiAgbGV0IGNsZWFudXBGYWlsZWQgPSBmYWxzZVxuXG4gIHRyeSB7XG4gICAgYXdhaXQgcmVtb3ZlQWNjZXB0YW5jZURpcmVjdG9yeShkaXJlY3RvcnksIHJlcXVlc3QudGFyZ2V0LCByZW1vdmVEaXJlY3RvcnkpXG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY2xlYW51cEZhaWxlZCA9IHRydWVcbiAgICBjbGVhbnVwRmFpbHVyZSA9IGVycm9yXG4gIH1cblxuICBpZiAocHJpbWFyeUZhaWxlZCAmJiBjbGVhbnVwRmFpbGVkICYmIHByaW1hcnlGYWlsdXJlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICB0aHJvdyBwcmVzZXJ2ZVByaW1hcnlGYWlsdXJlKHByaW1hcnlGYWlsdXJlLCBjbGVhbnVwRmFpbHVyZSwgcmVxdWVzdC50YXJnZXQpXG4gIH1cbiAgaWYgKHByaW1hcnlGYWlsZWQpIHRocm93IHByaW1hcnlGYWlsdXJlXG4gIGlmIChjbGVhbnVwRmFpbGVkKSB0aHJvdyBjbGVhbnVwRmFpbHVyZVxuXG4gIHJldHVybiAvKiogQHR5cGUge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVJlc3VsdH0gKi8gKHJlc3VsdClcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZXMgYW5kIGRldGFjaGVzIGEgc3RhZ2VkIGFjY2VwdGFuY2UgcmVxdWVzdCBiZWZvcmUgZmlsZXN5c3RlbSBtdXRhdGlvbi5cbiAqIEBwYXJhbSB7e1xuICogICBhcnRpZmFjdHM6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3RTZXQsXG4gKiAgIGVudmlyb25tZW50OiBSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+PixcbiAqICAgc3RhZ2VzOiB7YXJndW1lbnRzOiBzdHJpbmdbXSwgc3RhZ2U6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVN0YWdlLCB0b29sOiBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkRpc2NvdmVyZWRUb29sY2hhaW59W10sXG4gKiAgIHRhcmdldDogc3RyaW5nLFxuICogICB0aW1lb3V0TXM6IG51bWJlclxuICogfX0gaW5wdXQgLSBDYW5kaWRhdGUgcmVxdWVzdC5cbiAqIEByZXR1cm5zIHt7XG4gKiAgIGFydGlmYWN0czogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5HZW5lcmF0ZWRBcnRpZmFjdFNldCxcbiAqICAgZW52aXJvbm1lbnQ6IFJlYWRvbmx5PFJlY29yZDxzdHJpbmcsIHN0cmluZz4+LFxuICogICBzdGFnZXM6IHthcmd1bWVudHM6IHN0cmluZ1tdLCBzdGFnZTogaW1wb3J0KFwiLi9zZW1hbnRpYy90eXBlcy5qc1wiKS5BY2NlcHRhbmNlU3RhZ2UsIHRvb2w6IFJlYWRvbmx5PHtleGVjdXRhYmxlOiBzdHJpbmcsIHZlcnNpb246IHN0cmluZ30+fVtdLFxuICogICB0YXJnZXQ6IHN0cmluZyxcbiAqICAgdGltZW91dE1zOiBudW1iZXJcbiAqIH19IFZhbGlkYXRlZCByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZVJlcXVlc3QoaW5wdXQpIHtcbiAgdHJ5IHtcbiAgICBpZiAodHlwZW9mIGlucHV0LnRhcmdldCAhPSBcInN0cmluZ1wiIHx8IGlucHV0LnRhcmdldC5sZW5ndGggPT0gMCB8fCAhaXNTdXBwb3J0ZWRUaW1lb3V0TXMoaW5wdXQudGltZW91dE1zKSB8fFxuICAgICAgIWlzRGVuc2VBcnJheShpbnB1dC5zdGFnZXMpIHx8IGlucHV0LnN0YWdlcy5sZW5ndGggPT0gMCkge1xuICAgICAgaW52YWxpZFJ1bm5lcihgQWNjZXB0YW5jZSByZXF1aXJlcyBhIHRhcmdldCwgdGltZW91dCBmcm9tIDEgdGhyb3VnaCAke21heGltdW1UaW1lb3V0TXN9bXMsIGFuZCBub24tZW1wdHkgb3JkZXJlZCBzdGFnZXMuYCwgaW5wdXQudGFyZ2V0KVxuICAgIH1cbiAgICBjb25zdCBhcnRpZmFjdHMgPSBjcmVhdGVHZW5lcmF0ZWRBcnRpZmFjdFNldChpbnB1dC5hcnRpZmFjdHMpXG5cbiAgICBpZiAoYXJ0aWZhY3RzLnRhcmdldCAhPSBpbnB1dC50YXJnZXQpIGludmFsaWRSdW5uZXIoXCJBY2NlcHRhbmNlIHRhcmdldCBtdXN0IG1hdGNoIHRoZSBnZW5lcmF0ZWQgYXJ0aWZhY3Qtc2V0IHRhcmdldC5cIiwgaW5wdXQudGFyZ2V0KVxuICAgIGNvbnN0IGVudmlyb25tZW50ID0gZGV0ZXJtaW5pc3RpY0Vudmlyb25tZW50KGlucHV0LmVudmlyb25tZW50KVxuICAgIGxldCBwcmV2aW91c0luZGV4ID0gLTFcbiAgICBjb25zdCBzZWVuID0gbmV3IFNldCgpXG4gICAgLyoqIEB0eXBlIHt7YXJndW1lbnRzOiBzdHJpbmdbXSwgc3RhZ2U6IGltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuQWNjZXB0YW5jZVN0YWdlLCB0b29sOiBSZWFkb25seTx7ZXhlY3V0YWJsZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmd9Pn1bXX0gKi9cbiAgICBjb25zdCBzdGFnZXMgPSBbXVxuXG4gICAgZm9yIChsZXQgc3RhZ2VQb3NpdGlvbiA9IDA7IHN0YWdlUG9zaXRpb24gPCBpbnB1dC5zdGFnZXMubGVuZ3RoOyBzdGFnZVBvc2l0aW9uICs9IDEpIHtcbiAgICAgIGNvbnN0IHN0YWdlID0gaW5wdXQuc3RhZ2VzW3N0YWdlUG9zaXRpb25dXG5cbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChzdGFnZSkpIGludmFsaWRSdW5uZXIoXCJBY2NlcHRhbmNlIHN0YWdlcyBtdXN0IGJlIGRpc3RpbmN0IGtub3duIHN0YWdlIHJlY29yZHMuXCIsIGlucHV0LnRhcmdldClcbiAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHN0YWdlLnN0YWdlXG5cbiAgICAgIGlmICh0eXBlb2Ygc3RhZ2VOYW1lICE9IFwic3RyaW5nXCIgfHwgIXN0YWdlSW5kZXhlcy5oYXMoc3RhZ2VOYW1lKSB8fCBzZWVuLmhhcyhzdGFnZU5hbWUpKSB7XG4gICAgICAgIGludmFsaWRSdW5uZXIoXCJBY2NlcHRhbmNlIHN0YWdlcyBtdXN0IGJlIGRpc3RpbmN0IGtub3duIHN0YWdlIHJlY29yZHMuXCIsIGlucHV0LnRhcmdldClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGluZGV4ID0gLyoqIEB0eXBlIHtudW1iZXJ9ICovIChzdGFnZUluZGV4ZXMuZ2V0KHN0YWdlTmFtZSkpXG5cbiAgICAgIGlmIChpbmRleCA8IHByZXZpb3VzSW5kZXgpIGludmFsaWRSdW5uZXIoXCJBY2NlcHRhbmNlIHN0YWdlcyBtdXN0IGZvbGxvdyBwYXJzZS10by1leGVjdXRlIG9yZGVyLlwiLCBpbnB1dC50YXJnZXQpXG4gICAgICBwcmV2aW91c0luZGV4ID0gaW5kZXhcbiAgICAgIHNlZW4uYWRkKHN0YWdlTmFtZSlcbiAgICAgIGNvbnN0IGFyZ3VtZW50Q2FuZGlkYXRlID0gc3RhZ2UuYXJndW1lbnRzXG4gICAgICBjb25zdCBzdGFnZUFyZ3VtZW50cyA9IGlzRGVuc2VBcnJheShhcmd1bWVudENhbmRpZGF0ZSkgPyBbLi4uYXJndW1lbnRDYW5kaWRhdGVdIDogdW5kZWZpbmVkXG4gICAgICBjb25zdCB0b29sQ2FuZGlkYXRlID0gc3RhZ2UudG9vbFxuICAgICAgY29uc3QgdG9vbCA9IGlzUGxhaW5PYmplY3QodG9vbENhbmRpZGF0ZSkgPyBPYmplY3QuZnJlZXplKHtcbiAgICAgICAgZXhlY3V0YWJsZTogdG9vbENhbmRpZGF0ZS5leGVjdXRhYmxlLFxuICAgICAgICBpZDogdG9vbENhbmRpZGF0ZS5pZCxcbiAgICAgICAgc291cmNlOiB0b29sQ2FuZGlkYXRlLnNvdXJjZSxcbiAgICAgICAgdmVyc2lvbjogdG9vbENhbmRpZGF0ZS52ZXJzaW9uXG4gICAgICB9KSA6IHVuZGVmaW5lZFxuXG4gICAgICBpZiAoc3RhZ2VBcmd1bWVudHMgPT0gdW5kZWZpbmVkIHx8ICFzdGFnZUFyZ3VtZW50cy5ldmVyeSgoYXJndW1lbnQpID0+IHR5cGVvZiBhcmd1bWVudCA9PSBcInN0cmluZ1wiICYmICFhcmd1bWVudC5pbmNsdWRlcyhcIlxcMFwiKSkgfHxcbiAgICAgICAgIWlzVG9vbCh0b29sKSkgaW52YWxpZFJ1bm5lcihgQWNjZXB0YW5jZSBzdGFnZSAnJHtzdGFnZU5hbWV9JyBoYXMgYW4gaW52YWxpZCB0b29sIG9yIGFyZ3VtZW50IGFycmF5LmAsIGlucHV0LnRhcmdldClcblxuICAgICAgc3RhZ2VzLnB1c2goT2JqZWN0LmZyZWV6ZSh7YXJndW1lbnRzOiBzdGFnZUFyZ3VtZW50cywgc3RhZ2U6IHN0YWdlTmFtZSwgdG9vbH0pKVxuICAgIH1cblxuICAgIHJldHVybiB7YXJ0aWZhY3RzLCBlbnZpcm9ubWVudCwgc3RhZ2VzLCB0YXJnZXQ6IGlucHV0LnRhcmdldCwgdGltZW91dE1zOiBpbnB1dC50aW1lb3V0TXN9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljICYmIGVycm9yLmNvZGUgPT0gXCJJTlZBTElEX0FDQ0VQVEFOQ0VfUlVOTkVSXCIpIHRocm93IGVycm9yXG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgU2VtYW50aWZvbGREaWFnbm9zdGljKSB7XG4gICAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgICAgY2F1c2U6IGVycm9yLFxuICAgICAgICBjb2RlOiBcIklOVkFMSURfQUNDRVBUQU5DRV9SVU5ORVJcIixcbiAgICAgICAgbGFuZ3VhZ2U6IHR5cGVvZiBpbnB1dC50YXJnZXQgPT0gXCJzdHJpbmdcIiA/IGlucHV0LnRhcmdldCA6IFwiYWNjZXB0YW5jZVwiLFxuICAgICAgICBtZXNzYWdlOiBgQWNjZXB0YW5jZSBydW5uZXIgaW5wdXQgaXMgaW52YWxpZDogJHtlcnJvci5kZXRhaWx9YFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gaW52YWxpZFJ1bm5lcihcIkFjY2VwdGFuY2UgcnVubmVyIGlucHV0IGlzIGludmFsaWQuXCIsIHR5cGVvZiBpbnB1dC50YXJnZXQgPT0gXCJzdHJpbmdcIiA/IGlucHV0LnRhcmdldCA6IFwiYWNjZXB0YW5jZVwiLCBlcnJvcilcbiAgfVxufVxuXG4vKipcbiAqIE5vcm1hbGl6ZXMgYSBzdWJwcm9jZXNzIGZhaWx1cmUgd2l0aCBleGFjdCBzdGFnZSBhbmQgdG9vbGNoYWluIGNvbnRleHQuXG4gKiBAcGFyYW0ge3Vua25vd259IGVycm9yIC0gU3VicHJvY2VzcyByZWplY3Rpb24uXG4gKiBAcGFyYW0ge3thcmd1bWVudHM6IHN0cmluZ1tdLCBzdGFnZTogc3RyaW5nLCB0b29sOiBSZWFkb25seTx7ZXhlY3V0YWJsZTogc3RyaW5nLCB2ZXJzaW9uOiBzdHJpbmd9Pn19IHN0YWdlIC0gRmFpbGVkIHN0YWdlLlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFjY2VwdGFuY2UgdGFyZ2V0LlxuICogQHBhcmFtIHtudW1iZXJ9IHRpbWVvdXRNcyAtIENvbmZpZ3VyZWQgc3RhZ2UgdGltZW91dC5cbiAqIEByZXR1cm5zIHtTZW1hbnRpZm9sZERpYWdub3N0aWN9IE5vcm1hbGl6ZWQgZmFpbHVyZS5cbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0RpYWdub3N0aWMoZXJyb3IsIHN0YWdlLCB0YXJnZXQsIHRpbWVvdXRNcykge1xuICBjb25zdCBmaWVsZHMgPSBwcm9jZXNzRXJyb3JGaWVsZHMoZXJyb3IpXG4gIGNvbnN0IG91dHB1dExpbWl0ZWQgPSBmaWVsZHMubmF0aXZlQ29kZSA9PSBcIkVSUl9DSElMRF9QUk9DRVNTX1NURElPX01BWEJVRkZFUlwiXG4gIGNvbnN0IHRpbWVkT3V0ID0gIW91dHB1dExpbWl0ZWQgJiYgZXhjZWVkZWRPd25lZERlYWRsaW5lKGVycm9yKVxuICBjb25zdCBsYXVuY2hGYWlsdXJlID0gZmllbGRzLm5hdGl2ZUNvZGUgIT0gdW5kZWZpbmVkICYmIGxhdW5jaEVycm9yQ29kZXMuaGFzKGZpZWxkcy5uYXRpdmVDb2RlKVxuICBjb25zdCBzaWduYWxlZCA9ICFvdXRwdXRMaW1pdGVkICYmICF0aW1lZE91dCAmJiBmaWVsZHMuc2lnbmFsICE9IHVuZGVmaW5lZFxuICBjb25zdCBjb2RlID0gb3V0cHV0TGltaXRlZCA/IFwiQUNDRVBUQU5DRV9PVVRQVVRfTElNSVRcIiA6IHRpbWVkT3V0ID8gXCJBQ0NFUFRBTkNFX1RJTUVPVVRcIiA6IGxhdW5jaEZhaWx1cmUgPyBcIkFDQ0VQVEFOQ0VfTEFVTkNIX0ZBSUxVUkVcIiA6IHNpZ25hbGVkXG4gICAgPyBcIkFDQ0VQVEFOQ0VfU0lHTkFMXCJcbiAgICA6IFwiQUNDRVBUQU5DRV9OT05aRVJPX0VYSVRcIlxuICBjb25zdCByZWFzb24gPSBvdXRwdXRMaW1pdGVkID8gYGV4Y2VlZGVkIHRoZSAke2FjY2VwdGFuY2VNYXhCdWZmZXJ9LWJ5dGUgb3V0cHV0IGNhcHR1cmUgbGltaXQgKCR7ZmllbGRzLm5hdGl2ZUNvZGV9KWAgOiB0aW1lZE91dFxuICAgID8gYHRpbWVkIG91dCBhZnRlciAke3RpbWVvdXRNc31tc2AgOiBsYXVuY2hGYWlsdXJlXG4gICAgPyBgY291bGQgbm90IGxhdW5jaCAoJHtmaWVsZHMubmF0aXZlQ29kZX0pYFxuICAgIDogc2lnbmFsZWQgPyBgdGVybWluYXRlZCBieSBzaWduYWwgJHtmaWVsZHMuc2lnbmFsfWBcbiAgICA6IGZpZWxkcy5leGl0Q29kZSAhPSB1bmRlZmluZWQgPyBgZXhpdGVkIG5vbnplcm8gKCR7ZmllbGRzLmV4aXRDb2RlfSlgXG4gICAgOiBgZmFpbGVkIGFmdGVyIGxhdW5jaCAoJHtmaWVsZHMubmF0aXZlQ29kZSA/PyBcInVua25vd25cIn0pYFxuXG4gIHJldHVybiBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICBjYXVzZTogb3V0cHV0TGltaXRlZCA/IHVuZGVmaW5lZCA6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICBjb2RlLFxuICAgIGV4ZWN1dGFibGU6IHN0YWdlLnRvb2wuZXhlY3V0YWJsZSxcbiAgICBleGl0Q29kZTogZmllbGRzLmV4aXRDb2RlLFxuICAgIGxhbmd1YWdlOiB0YXJnZXQsXG4gICAgbWVzc2FnZTogYEFjY2VwdGFuY2Ugc3RhZ2UgJyR7c3RhZ2Uuc3RhZ2V9JyAke3JlYXNvbn0gdXNpbmcgJyR7c3RhZ2UudG9vbC5leGVjdXRhYmxlfScgKCR7c3RhZ2UudG9vbC52ZXJzaW9ufSkuYCxcbiAgICBzaWduYWw6IGZpZWxkcy5zaWduYWwsXG4gICAgc3RhZ2U6IHN0YWdlLnN0YWdlLFxuICAgIHN0ZGVycjogZmllbGRzLnN0ZGVycixcbiAgICBzdGRvdXQ6IGZpZWxkcy5zdGRvdXQsXG4gICAgdmVyc2lvbjogc3RhZ2UudG9vbC52ZXJzaW9uXG4gIH0pXG59XG5cbi8qKlxuICogTmFycm93cyB0aGUgc3RhYmxlIGZpZWxkcyBvZiBhbiBvcGFxdWUgY2hpbGQtcHJvY2VzcyBmYWlsdXJlLlxuICogQHBhcmFtIHt1bmtub3dufSBlcnJvciAtIFByb2Nlc3MgcmVqZWN0aW9uLlxuICogQHJldHVybnMge3tleGl0Q29kZTogbnVtYmVyIHwgdW5kZWZpbmVkLCBuYXRpdmVDb2RlOiBzdHJpbmcgfCB1bmRlZmluZWQsIHNpZ25hbDogc3RyaW5nIHwgdW5kZWZpbmVkLCBzdGRlcnI6IHN0cmluZywgc3Rkb3V0OiBzdHJpbmd9fSBTdGFibGUgZmllbGRzLlxuICovXG5mdW5jdGlvbiBwcm9jZXNzRXJyb3JGaWVsZHMoZXJyb3IpIHtcbiAgaWYgKCFlcnJvciB8fCB0eXBlb2YgZXJyb3IgIT0gXCJvYmplY3RcIikgcmV0dXJuIHtleGl0Q29kZTogdW5kZWZpbmVkLCBuYXRpdmVDb2RlOiB1bmRlZmluZWQsIHNpZ25hbDogdW5kZWZpbmVkLCBzdGRlcnI6IFwiXCIsIHN0ZG91dDogXCJcIn1cbiAgY29uc3QgdmFsdWUgPSAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHVua25vd24+fSAqLyAoZXJyb3IpXG4gIGNvbnN0IG5hdGl2ZUNvZGUgPSB0eXBlb2YgdmFsdWUuY29kZSA9PSBcInN0cmluZ1wiID8gdmFsdWUuY29kZSA6IHVuZGVmaW5lZFxuICBjb25zdCBvdXRwdXRMaW1pdGVkID0gbmF0aXZlQ29kZSA9PSBcIkVSUl9DSElMRF9QUk9DRVNTX1NURElPX01BWEJVRkZFUlwiXG5cbiAgcmV0dXJuIHtcbiAgICBleGl0Q29kZTogdHlwZW9mIHZhbHVlLmNvZGUgPT0gXCJudW1iZXJcIiA/IHZhbHVlLmNvZGUgOiB1bmRlZmluZWQsXG4gICAgbmF0aXZlQ29kZSxcbiAgICBzaWduYWw6IHR5cGVvZiB2YWx1ZS5zaWduYWwgPT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNpZ25hbCA6IHVuZGVmaW5lZCxcbiAgICBzdGRlcnI6ICFvdXRwdXRMaW1pdGVkICYmIHR5cGVvZiB2YWx1ZS5zdGRlcnIgPT0gXCJzdHJpbmdcIiA/IHZhbHVlLnN0ZGVyciA6IFwiXCIsXG4gICAgc3Rkb3V0OiAhb3V0cHV0TGltaXRlZCAmJiB0eXBlb2YgdmFsdWUuc3Rkb3V0ID09IFwic3RyaW5nXCIgPyB2YWx1ZS5zdGRvdXQgOiBcIlwiXG4gIH1cbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIGRpc2NvdmVyZWQtdG9vbCBmaWVsZHMgY29uc3VtZWQgYnkgdGhlIHJ1bm5lci5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdmFsdWUgLSBDYW5kaWRhdGUgdG9vbC5cbiAqIEByZXR1cm5zIHt2YWx1ZSBpcyBpbXBvcnQoXCIuL3NlbWFudGljL3R5cGVzLmpzXCIpLkRpc2NvdmVyZWRUb29sY2hhaW59IFdoZXRoZXIgdGhlIHRvb2wgY29udHJhY3QgaXMgcHJlc2VudC5cbiAqL1xuZnVuY3Rpb24gaXNUb29sKHZhbHVlKSB7XG4gIHJldHVybiBpc1BsYWluT2JqZWN0KHZhbHVlKSAmJiB0eXBlb2YgdmFsdWUuaWQgPT0gXCJzdHJpbmdcIiAmJiB0eXBlb2YgdmFsdWUuZXhlY3V0YWJsZSA9PSBcInN0cmluZ1wiICYmIHBhdGguaXNBYnNvbHV0ZSh2YWx1ZS5leGVjdXRhYmxlKSAmJlxuICAgICF2YWx1ZS5leGVjdXRhYmxlLmluY2x1ZGVzKFwiXFwwXCIpICYmIHR5cGVvZiB2YWx1ZS52ZXJzaW9uID09IFwic3RyaW5nXCIgJiYgdmFsdWUudmVyc2lvbi5sZW5ndGggPiAwICYmXG4gICAgKHZhbHVlLnNvdXJjZSA9PSBcImNhbm9uaWNhbFwiIHx8IHZhbHVlLnNvdXJjZSA9PSBcIm92ZXJyaWRlXCIpXG59XG5cbi8qKlxuICogS2VlcHMgdGhlIHByaW1hcnkgYWNjZXB0YW5jZSBlcnJvciB3aGlsZSByZWNvcmRpbmcgYm91bmRlZCBjbGVhbnVwIGV2aWRlbmNlIGluIGl0cyBjYXVzZSBjaGFpbi5cbiAqIEBwYXJhbSB7RXJyb3J9IHByaW1hcnlGYWlsdXJlIC0gT3JpZ2luYWwgbWF0ZXJpYWxpemF0aW9uIG9yIHN0YWdlIGZhaWx1cmUuXG4gKiBAcGFyYW0ge3Vua25vd259IGNsZWFudXBGYWlsdXJlIC0gQ2xlYW51cCByZWplY3Rpb24uXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQWNjZXB0YW5jZSB0YXJnZXQuXG4gKiBAcmV0dXJucyB7RXJyb3J9IFRoZSBvcmlnaW5hbCBwcmltYXJ5IGVycm9yIHdpdGggc3RydWN0dXJlZCBjbGVhbnVwIGV2aWRlbmNlLlxuICovXG5mdW5jdGlvbiBwcmVzZXJ2ZVByaW1hcnlGYWlsdXJlKHByaW1hcnlGYWlsdXJlLCBjbGVhbnVwRmFpbHVyZSwgdGFyZ2V0KSB7XG4gIGNvbnN0IGNsZWFudXBFdmlkZW5jZSA9IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNvZGU6IFwiQUNDRVBUQU5DRV9DTEVBTlVQX0ZBSUxVUkVcIixcbiAgICBsYW5ndWFnZTogY2xlYW51cEZhaWx1cmUgaW5zdGFuY2VvZiBTZW1hbnRpZm9sZERpYWdub3N0aWMgPyBjbGVhbnVwRmFpbHVyZS5sYW5ndWFnZSA6IHRhcmdldCxcbiAgICBtZXNzYWdlOiBcIklzb2xhdGVkIGFjY2VwdGFuY2UtZGlyZWN0b3J5IGNsZWFudXAgZmFpbGVkIGFmdGVyIHRoZSBwcmltYXJ5IGFjY2VwdGFuY2UgZmFpbHVyZS5cIlxuICB9KVxuICBjb25zdCBjYXVzZXMgPSBwcmltYXJ5RmFpbHVyZS5jYXVzZSBpbnN0YW5jZW9mIEVycm9yID8gW3ByaW1hcnlGYWlsdXJlLmNhdXNlLCBjbGVhbnVwRXZpZGVuY2VdIDogW2NsZWFudXBFdmlkZW5jZV1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkocHJpbWFyeUZhaWx1cmUsIFwiY2F1c2VcIiwge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogbmV3IEFnZ3JlZ2F0ZUVycm9yKGNhdXNlcywgXCJBY2NlcHRhbmNlIGZhaWxlZCBhbmQgaXNvbGF0ZWQtZGlyZWN0b3J5IGNsZWFudXAgYWxzbyBmYWlsZWQuXCIpLFxuICAgIHdyaXRhYmxlOiB0cnVlXG4gIH0pXG5cbiAgcmV0dXJuIHByaW1hcnlGYWlsdXJlXG59XG5cbi8qKlxuICogVGhyb3dzIGEgbm9ybWFsaXplZCBydW5uZXItY29uZmlndXJhdGlvbiBkaWFnbm9zdGljLlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgLSBGYWlsdXJlIGRldGFpbC5cbiAqIEBwYXJhbSB7dW5rbm93bn0gdGFyZ2V0IC0gQ2FuZGlkYXRlIHRhcmdldCBpZGVudGl0eS5cbiAqIEBwYXJhbSB7dW5rbm93bn0gW2Vycm9yXSAtIFByZXNlcnZlZCBjYXVzZS5cbiAqIEByZXR1cm5zIHtuZXZlcn0gQWx3YXlzIHRocm93cy5cbiAqL1xuZnVuY3Rpb24gaW52YWxpZFJ1bm5lcihtZXNzYWdlLCB0YXJnZXQsIGVycm9yKSB7XG4gIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgIGNhdXNlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgY29kZTogXCJJTlZBTElEX0FDQ0VQVEFOQ0VfUlVOTkVSXCIsXG4gICAgbGFuZ3VhZ2U6IHR5cGVvZiB0YXJnZXQgPT0gXCJzdHJpbmdcIiAmJiB0YXJnZXQubGVuZ3RoID4gMCA/IHRhcmdldCA6IFwiYWNjZXB0YW5jZVwiLFxuICAgIG1lc3NhZ2VcbiAgfSlcbn1cblxuLyoqXG4gKiBDaGVja3MgZm9yIGFuIG9yZGluYXJ5IHN0cmluZy1rZXllZCBvYmplY3QuXG4gKiBAcGFyYW0ge3Vua25vd259IHZhbHVlIC0gQ2FuZGlkYXRlIHZhbHVlLlxuICogQHJldHVybnMge3ZhbHVlIGlzIFJlY29yZDxzdHJpbmcsIHVua25vd24+fSBXaGV0aGVyIHRoZSB2YWx1ZSBpcyBhIHBsYWluIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09IFwib2JqZWN0XCIgJiYgdmFsdWUgIT0gbnVsbCAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSkgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKSA9PSBPYmplY3QucHJvdG90eXBlXG59XG5cbi8qKlxuICogUmVtb3ZlcyB0aGUgaXNvbGF0ZWQgYWNjZXB0YW5jZSBkaXJlY3Rvcnkgd2l0aCBhIG5vcm1hbGl6ZWQgZmFpbHVyZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBkaXJlY3RvcnkgLSBFeGFjdCB0ZW1wb3JhcnkgZGlyZWN0b3J5LlxuICogQHBhcmFtIHtzdHJpbmd9IHRhcmdldCAtIEFjY2VwdGFuY2UgdGFyZ2V0LlxuICogQHBhcmFtIHt0eXBlb2Ygcm19IHJlbW92ZURpcmVjdG9yeSAtIEluc3RhbmNlLW93bmVkIHJlbW92YWwgb3BlcmF0aW9uLlxuICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IENsZWFudXAgY29tcGxldGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVtb3ZlQWNjZXB0YW5jZURpcmVjdG9yeShkaXJlY3RvcnksIHRhcmdldCwgcmVtb3ZlRGlyZWN0b3J5KSB7XG4gIHRyeSB7XG4gICAgYXdhaXQgcmVtb3ZlRGlyZWN0b3J5KGRpcmVjdG9yeSwge2ZvcmNlOiB0cnVlLCByZWN1cnNpdmU6IHRydWV9KVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHRocm93IG5ldyBTZW1hbnRpZm9sZERpYWdub3N0aWMoe1xuICAgICAgY2F1c2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgIGNvZGU6IFwiQUNDRVBUQU5DRV9DTEVBTlVQX0ZBSUxVUkVcIixcbiAgICAgIGxhbmd1YWdlOiB0YXJnZXQsXG4gICAgICBtZXNzYWdlOiBgRmFpbGVkIHRvIHJlbW92ZSBpc29sYXRlZCBhY2NlcHRhbmNlIGRpcmVjdG9yeSAnJHtkaXJlY3Rvcnl9Jy5gXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIENyZWF0ZXMgb25lIGlzb2xhdGVkIGFjY2VwdGFuY2UgZGlyZWN0b3J5IHdpdGggYSBub3JtYWxpemVkIHNldHVwIGZhaWx1cmUuXG4gKiBAcGFyYW0ge3N0cmluZ30gdGFyZ2V0IC0gQWNjZXB0YW5jZSB0YXJnZXQuXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSBFeGFjdCB0ZW1wb3JhcnkgZGlyZWN0b3J5LlxuICovXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVBY2NlcHRhbmNlRGlyZWN0b3J5KHRhcmdldCkge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJzZW1hbnRpZm9sZC1hY2NlcHRhbmNlLVwiKSlcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgIGNhdXNlOiBlcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZXJyb3IgOiB1bmRlZmluZWQsXG4gICAgICBjb2RlOiBcIkFDQ0VQVEFOQ0VfU0VUVVBfRkFJTFVSRVwiLFxuICAgICAgbGFuZ3VhZ2U6IHRhcmdldCxcbiAgICAgIG1lc3NhZ2U6IFwiRmFpbGVkIHRvIGNyZWF0ZSBhbiBpc29sYXRlZCBhY2NlcHRhbmNlIGRpcmVjdG9yeS5cIlxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBXcml0ZXMgb25seSB0aGUgYWxyZWFkeS12YWxpZGF0ZWQgZ2VuZXJhdGVkIGFydGlmYWN0cyBpbnRvIHRoZSBpc29sYXRlZCBkaXJlY3RvcnkuXG4gKiBAcGFyYW0ge2ltcG9ydChcIi4vc2VtYW50aWMvdHlwZXMuanNcIikuR2VuZXJhdGVkQXJ0aWZhY3RTZXR9IGFydGlmYWN0cyAtIENvbXBsZXRlIHZhbGlkYXRlZCBzZXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gZGlyZWN0b3J5IC0gRXhhY3QgdGVtcG9yYXJ5IGRpcmVjdG9yeS5cbiAqIEBwYXJhbSB7c3RyaW5nfSB0YXJnZXQgLSBBY2NlcHRhbmNlIHRhcmdldC5cbiAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fSBNYXRlcmlhbGl6YXRpb24gY29tcGxldGlvbi5cbiAqL1xuYXN5bmMgZnVuY3Rpb24gbWF0ZXJpYWxpemVBcnRpZmFjdHMoYXJ0aWZhY3RzLCBkaXJlY3RvcnksIHRhcmdldCkge1xuICBmb3IgKGNvbnN0IGFydGlmYWN0IG9mIGFydGlmYWN0cy5hcnRpZmFjdHMpIHtcbiAgICBjb25zdCBmaWxlbmFtZSA9IHBhdGguam9pbihkaXJlY3RvcnksIC4uLmFydGlmYWN0LnBhdGguc3BsaXQoXCIvXCIpKVxuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG1rZGlyKHBhdGguZGlybmFtZShmaWxlbmFtZSksIHtyZWN1cnNpdmU6IHRydWV9KVxuICAgICAgYXdhaXQgd3JpdGVGaWxlKGZpbGVuYW1lLCBhcnRpZmFjdC5jb250ZW50KVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aHJvdyBuZXcgU2VtYW50aWZvbGREaWFnbm9zdGljKHtcbiAgICAgICAgY2F1c2U6IGVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBlcnJvciA6IHVuZGVmaW5lZCxcbiAgICAgICAgY29kZTogXCJBQ0NFUFRBTkNFX01BVEVSSUFMSVpBVElPTl9GQUlMVVJFXCIsXG4gICAgICAgIGxhbmd1YWdlOiB0YXJnZXQsXG4gICAgICAgIG1lc3NhZ2U6IGBGYWlsZWQgdG8gbWF0ZXJpYWxpemUgZ2VuZXJhdGVkIGFydGlmYWN0ICcke2FydGlmYWN0LnBhdGh9Jy5gXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
/** Canonical C17 support header; native ownership never enters semantic IR. */
|
|
2
|
+
export declare const cRuntimeHeader = "#ifndef SEMANTIFOLD_RUNTIME_H\n#define SEMANTIFOLD_RUNTIME_H\n\n#include <stdbool.h>\n#include <stddef.h>\n#include <stdint.h>\n#include <limits.h>\n#include <stdio.h>\n#include <stdlib.h>\n#include <string.h>\n\n_Static_assert(CHAR_BIT == 8, \"Semantifold requires eight-bit bytes\");\n_Static_assert(sizeof(int64_t) == 8, \"Semantifold requires exact int64_t\");\n_Static_assert(sizeof(size_t) == 8 && PTRDIFF_MAX == INT64_MAX, \"Semantifold requires the qualified 64-bit ABI\");\n\ntypedef struct {\n const unsigned char *data;\n size_t length;\n} SemantifoldString;\n\n#define SEMANTIFOLD_STRING(literal) ((SemantifoldString){(const unsigned char *)(literal), sizeof(literal) - 1})\n\ntypedef struct SemantifoldAllocation {\n struct SemantifoldAllocation *next;\n unsigned char data[];\n} SemantifoldAllocation;\n\n_Static_assert(sizeof(SemantifoldAllocation) == 8, \"Semantifold requires the qualified arena metadata size\");\n\nstatic SemantifoldAllocation *semantifold_arena = NULL;\nstatic size_t semantifold_arena_bytes = 0;\n\nstatic inline void semantifold_cleanup(void) {\n while (semantifold_arena != NULL) {\n SemantifoldAllocation *allocation = semantifold_arena;\n semantifold_arena = allocation->next;\n free(allocation);\n }\n semantifold_arena_bytes = 0;\n}\n\n_Noreturn static inline void semantifold_fatal(const char *message, size_t length) {\n semantifold_cleanup();\n (void)fwrite(message, 1, length, stderr);\n exit(70);\n}\n\nstatic inline int64_t semantifold_integer_add(int64_t left, int64_t right) {\n int64_t result;\n if (__builtin_add_overflow(left, right, &result)) {\n semantifold_fatal(\"semantifold: integer overflow\\n\", sizeof(\"semantifold: integer overflow\\n\") - 1);\n }\n return result;\n}\n\nstatic inline int64_t semantifold_integer_subtract(int64_t left, int64_t right) {\n int64_t result;\n if (__builtin_sub_overflow(left, right, &result)) {\n semantifold_fatal(\"semantifold: integer overflow\\n\", sizeof(\"semantifold: integer overflow\\n\") - 1);\n }\n return result;\n}\n\nstatic inline int64_t semantifold_integer_multiply(int64_t left, int64_t right) {\n int64_t result;\n if (__builtin_mul_overflow(left, right, &result)) {\n semantifold_fatal(\"semantifold: integer overflow\\n\", sizeof(\"semantifold: integer overflow\\n\") - 1);\n }\n return result;\n}\n\nstatic inline int64_t semantifold_integer_negate(int64_t value) {\n return semantifold_integer_subtract(INT64_C(0), value);\n}\n\nstatic inline size_t semantifold_allocation_size(size_t left, size_t right) {\n const size_t maximum = (size_t)PTRDIFF_MAX;\n if (left > maximum || right > maximum - left ||\n left + right > maximum - sizeof(SemantifoldAllocation)) {\n semantifold_fatal(\"semantifold: allocation size\\n\", sizeof(\"semantifold: allocation size\\n\") - 1);\n }\n const size_t size = sizeof(SemantifoldAllocation) + left + right;\n if (semantifold_arena_bytes > maximum - size) {\n semantifold_fatal(\"semantifold: allocation size\\n\", sizeof(\"semantifold: allocation size\\n\") - 1);\n }\n return size;\n}\n\nstatic inline SemantifoldString semantifold_string_concat(SemantifoldString left, SemantifoldString right) {\n const size_t size = semantifold_allocation_size(left.length, right.length);\n SemantifoldAllocation *allocation = malloc(size);\n if (allocation == NULL) {\n semantifold_fatal(\"semantifold: allocation failure\\n\", sizeof(\"semantifold: allocation failure\\n\") - 1);\n }\n allocation->next = semantifold_arena;\n semantifold_arena = allocation;\n semantifold_arena_bytes += size;\n if (left.length != 0) (void)memcpy(allocation->data, left.data, left.length);\n if (right.length != 0) (void)memcpy(allocation->data + left.length, right.data, right.length);\n return (SemantifoldString){allocation->data, left.length + right.length};\n}\n\nstatic inline bool semantifold_string_equal(SemantifoldString left, SemantifoldString right) {\n return left.length == right.length && (left.length == 0 || memcmp(left.data, right.data, left.length) == 0);\n}\n\nstatic inline bool semantifold_string_not_equal(SemantifoldString left, SemantifoldString right) {\n return !semantifold_string_equal(left, right);\n}\n\nstatic inline void semantifold_write(const unsigned char *data, size_t length) {\n if (length != 0 && fwrite(data, 1, length, stdout) != length) {\n semantifold_fatal(\"semantifold: output failure\\n\", sizeof(\"semantifold: output failure\\n\") - 1);\n }\n}\n\nstatic inline void semantifold_newline(void) {\n semantifold_write((const unsigned char *)\"\\n\", 1);\n if (fflush(stdout) != 0) semantifold_fatal(\"semantifold: output failure\\n\", sizeof(\"semantifold: output failure\\n\") - 1);\n}\n\nstatic inline void semantifold_print_string(SemantifoldString value) {\n semantifold_write(value.data, value.length);\n semantifold_newline();\n}\n\nstatic inline void semantifold_print_boolean(bool value) {\n if (value) semantifold_write((const unsigned char *)\"true\", 4);\n else semantifold_write((const unsigned char *)\"false\", 5);\n semantifold_newline();\n}\n\nstatic inline void semantifold_print_integer(int64_t value) {\n unsigned char digits[20];\n size_t position = sizeof(digits);\n uint64_t magnitude = (uint64_t)value;\n if (value < 0) magnitude = UINT64_C(0) - magnitude;\n do {\n digits[--position] = (unsigned char)(UINT64_C(48) + magnitude % UINT64_C(10));\n magnitude /= UINT64_C(10);\n } while (magnitude != 0);\n if (value < 0) digits[--position] = (unsigned char)45;\n semantifold_write(digits + position, sizeof(digits) - position);\n semantifold_newline();\n}\n\n#endif\n";
|
|
3
|
+
//# sourceMappingURL=c-runtime.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"c-runtime.d.ts","sourceRoot":"","sources":["../../../src/backends/c-runtime.js"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,eAAO,MAAM,cAAc,2sLAmJ1B,CAAA"}
|