diff --git a/skills/cuopt-numerical-optimization-formulation/BENCHMARK.md b/skills/cuopt-numerical-optimization-formulation/BENCHMARK.md index f66d437a2f..16133c9a36 100644 --- a/skills/cuopt-numerical-optimization-formulation/BENCHMARK.md +++ b/skills/cuopt-numerical-optimization-formulation/BENCHMARK.md @@ -7,11 +7,11 @@ This benchmark summarizes 3-Tier Evaluation from NVSkills-Eval results for the s ## Evaluation Summary - Skill: `cuopt-numerical-optimization-formulation` -- Evaluation date: 2026-05-29 +- Evaluation date: 2026-06-10 - NVSkills-Eval profile: `external` -- Environment: `local` -- Dataset: 1 evaluation tasks -- Attempts per task: 2 +- Environment: `astra-sandbox` +- Dataset: 3 evaluation tasks +- Attempts per task: 1 - Pass threshold: 50% - Overall verdict: PASS @@ -42,9 +42,9 @@ Underlying evaluation signals used in this run: ## Test Tasks -The benchmark dataset contained 1 evaluation tasks: +The benchmark dataset contained 3 evaluation tasks: -- Positive tasks: 1 tasks where the skill was expected to activate. +- Positive tasks: 3 tasks where the skill was expected to activate. - Negative tasks: 0 tasks where no skill was expected. - Unlabeled tasks: 0 tasks where positive/negative intent could not be inferred. @@ -54,11 +54,11 @@ Task composition is derived from the evaluation dataset when possible. Entries w | Dimension | Num | `claude-code` | `codex` | |---|---:|---:|---:| -| Security | 2 | 100% (+0%) | 100% (+0%) | -| Correctness | 2 | 100% (+0%) | 97% (+28%) | -| Discoverability | 2 | 100% (+0%) | 97% (+66%) | -| Effectiveness | 2 | 96% (+0%) | 90% (-5%) | -| Efficiency | 2 | 93% (-0%) | 96% (+51%) | +| Security | 3 | 100% (+0%) | 100% (+0%) | +| Correctness | 3 | 60% (+17%) | 47% (+13%) | +| Discoverability | 3 | 33% (+33%) | 0% (+0%) | +| Effectiveness | 3 | 79% (-0%) | 77% (+14%) | +| Efficiency | 3 | 49% (+22%) | 28% (-0%) | Score values show skill-assisted performance. Values in parentheses show uplift versus the no-skill baseline when baseline data is available. diff --git a/skills/cuopt-numerical-optimization-formulation/SKILL.md b/skills/cuopt-numerical-optimization-formulation/SKILL.md index 1b54e53efb..82058eb2e5 100644 --- a/skills/cuopt-numerical-optimization-formulation/SKILL.md +++ b/skills/cuopt-numerical-optimization-formulation/SKILL.md @@ -13,7 +13,6 @@ metadata: - concepts --- - # Numerical Optimization Formulation Concepts and workflow for going from a problem description to a clear formulation across LP, MILP, and QP. No API code here. diff --git a/skills/cuopt-numerical-optimization-formulation/evals/evals.json b/skills/cuopt-numerical-optimization-formulation/evals/evals.json index c3f403a0dd..95899fca47 100644 --- a/skills/cuopt-numerical-optimization-formulation/evals/evals.json +++ b/skills/cuopt-numerical-optimization-formulation/evals/evals.json @@ -4,11 +4,39 @@ "question": "A factory operates 3 production lines and employs 50 workers. It plans to produce products A, B, and C next month. Each product has a known per-unit cost and revenue. Determine the monthly production plan. Classify each sentence as parameter, constraint, decision, or objective, and state the (possibly implicit) objective.", "expected_skill": "cuopt-numerical-optimization-formulation", "expected_script": null, - "ground_truth": "The agent classifies each sentence with the four-label framework (parameter / constraint / decision / objective), treats the fixed facts (3 production lines, 50 workers, known cost and revenue) as parameters and the production plan as the decision, and identifies the implicit objective as maximize profit (since both costs and revenues are given) — not minimize cost. Does not produce code.", + "ground_truth": "The agent classifies each sentence with the four-label framework (parameter / constraint / decision / objective), treats the fixed facts (3 production lines, 50 workers, known cost and revenue) as parameters and the production plan as the decision, and identifies the implicit objective as maximize profit (since both costs and revenues are given) \u2014 not minimize cost. Does not produce code.", "expected_behavior": [ "Classifies each sentence using the four labels (parameter / constraint / decision / objective)", - "Identifies the implicit objective as maximize profit (revenue − cost), not minimize cost, since both costs and revenues are given", - "Does not produce code or an API call sequence — this skill is concepts only" + "Identifies the implicit objective as maximize profit (revenue \u2212 cost), not minimize cost, since both costs and revenues are given", + "Does not produce code or an API call sequence \u2014 this skill is concepts only" + ] + }, + { + "id": "numopt-form-eval-002-cutting-stock-objective", + "question": "I am modeling a cutting stock problem. I have several cutting patterns, each with a different waste width. To minimize material waste, I plan to use this objective: minimize sum_j (waste_width_j * x_j), where x_j is the length cut using pattern j. Is this the correct objective? If not, what is wrong and what should I use instead?", + "expected_skill": "cuopt-numerical-optimization-formulation", + "expected_script": null, + "ground_truth": "The proposed objective is incorrect. Using sum_j (waste_width_j * x_j) only captures trim loss \u2014 the unused strip width within each cutting pattern. It ignores over-production: excess strips produced beyond actual demand are also waste material, but are not penalized by this objective. The solver will over-produce narrow orders to fill patterns efficiently and appear to minimize waste while actually consuming more total material. The correct objective is to minimize total material area consumed: minimize sum_j (roll_width_j * x_j). Since the total useful area demanded is a fixed constant, minimizing total material area is equivalent to minimizing all waste (trim loss plus over-production). The waste can then be computed as: waste = total_material_area_consumed \u2212 required_useful_area, where required_useful_area = sum_i (order_width_i * order_length_i). The agent does not produce code.", + "expected_behavior": [ + "Identifies the proposed objective as incorrect", + "Explains that sum_j(waste_width_j * x_j) only captures trim loss and ignores over-production", + "States that the correct objective is minimize sum_j(roll_width_j * x_j) \u2014 total material area consumed", + "Explains that waste = total_material_area_consumed minus required_useful_area", + "Does not produce code \u2014 this skill is formulation concepts only" + ] + }, + { + "id": "numopt-form-eval-003-goal-programming-integer-decisions", + "question": "I am using goal programming to optimize worker scheduling across two priority levels: first minimize overtime hours, then minimize idle time. I introduced deviation variables d_minus and d_plus for each goal. A colleague says all variables in goal programming are continuous because the deviation variables are continuous. Should the worker count variables also be continuous?", + "expected_skill": "cuopt-numerical-optimization-formulation", + "expected_script": null, + "ground_truth": "The colleague is wrong. Deviation variables (d_minus, d_plus) are always continuous \u2014 they measure how much a goal is under- or over-achieved, which can be fractional. However, decision variables that represent discrete or countable quantities must remain INTEGER regardless of the goal programming structure. Worker counts are a discrete quantity (you cannot hire 2.7 workers), so those variables must be declared as INTEGER. Making them continuous because of the deviation variables is a formulation error: the LP relaxation may yield fractional worker counts that are infeasible in practice and produce a different (lower) objective than the true integer optimum. The agent also describes the standard goal programming pattern: write each goal as an equality with deviation variables (expression + d_minus - d_plus = target), then solve sequentially per priority, fixing higher-priority deviations before optimizing lower ones. Does not produce code.", + "expected_behavior": [ + "States the colleague is wrong \u2014 deviation variables being continuous does not make all variables continuous", + "Explains that decision variables representing discrete/countable quantities (like worker counts) must be INTEGER", + "States that making worker counts continuous is a formulation error that can yield fractional (infeasible) solutions", + "Describes the goal programming pattern: deviation variables in equality constraints, solved sequentially by priority", + "Does not produce code \u2014 this skill is formulation concepts only" ] } ] diff --git a/skills/cuopt-numerical-optimization-formulation/skill-card.md b/skills/cuopt-numerical-optimization-formulation/skill-card.md index 63b848efbc..05950a6bfc 100644 --- a/skills/cuopt-numerical-optimization-formulation/skill-card.md +++ b/skills/cuopt-numerical-optimization-formulation/skill-card.md @@ -9,7 +9,7 @@ NVIDIA
### License/Terms of Use:
Apache 2.0
## Use Case:
-Developers and engineers who need to formulate linear, mixed-integer linear, or quadratic optimization problems using cuOpt, translating natural-language problem descriptions into structured mathematical formulations.
+Developers and engineers formulating linear programming (LP), mixed-integer linear programming (MILP), and quadratic programming (QP) optimization problems for the NVIDIA cuOpt solver.
### Deployment Geography for Use:
Global
@@ -19,8 +19,8 @@ Risk: Review before execution as proposals could introduce incorrect or misleadi Mitigation: Review and scan skill before deployment.
## Reference(s):
-- [cuOpt User Guide](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html)
-- [cuopt-examples](https://github.com/NVIDIA/cuopt-examples)
+- [NVIDIA cuOpt User Guide](https://docs.nvidia.com/cuopt/user-guide/latest/introduction.html)
+- [cuOpt Examples](https://github.com/NVIDIA/cuopt-examples)
## Skill Output:
@@ -36,7 +36,7 @@ Mitigation: Review and scan skill before deployment.
## Evaluation Tasks:
-Evaluated against 1 internal evaluation task with 2 attempts per task via NVSkills-Eval (external profile).
+Evaluated against 3 evaluation tasks (3 positive skill-activation cases) using NVSkills-Eval external profile in astra-sandbox environment.
## Evaluation Metrics Used:
Reported benchmark dimensions:
@@ -60,11 +60,11 @@ Underlying evaluation signals used in this run:
## Evaluation Results:
| Dimension | Num | `claude-code` | `codex` | |---|---:|---:|---:| -| Security | 2 | 100% (+0%) | 100% (+0%) | -| Correctness | 2 | 100% (+0%) | 97% (+28%) | -| Discoverability | 2 | 100% (+0%) | 97% (+66%) | -| Effectiveness | 2 | 96% (+0%) | 90% (-5%) | -| Efficiency | 2 | 93% (-0%) | 96% (+51%) | +| Security | 3 | 100% (+0%) | 100% (+0%) | +| Correctness | 3 | 60% (+17%) | 47% (+13%) | +| Discoverability | 3 | 33% (+33%) | 0% (+0%) | +| Effectiveness | 3 | 79% (-0%) | 77% (+14%) | +| Efficiency | 3 | 49% (+22%) | 28% (-0%) | ## Skill Version(s):
26.08.00 (source: frontmatter)
diff --git a/skills/cuopt-numerical-optimization-formulation/skill.oms.sig b/skills/cuopt-numerical-optimization-formulation/skill.oms.sig index 6d09445220..b4cf210689 100644 --- a/skills/cuopt-numerical-optimization-formulation/skill.oms.sig +++ b/skills/cuopt-numerical-optimization-formulation/skill.oms.sig @@ -1 +1 @@ -{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1mb3JtdWxhdGlvbiIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICI1YzE5OTI3YmE2YjliYzZiY2FhNjM4ODUzOWEyZGQzZGMzZjhlYTM5NGQ0MTA4YTU2NjcwYzMwZTZjZjBiMjVjIgogICAgICB9CiAgICB9CiAgXSwKICAicHJlZGljYXRlVHlwZSI6ICJodHRwczovL21vZGVsX3NpZ25pbmcvc2lnbmF0dXJlL3YxLjAiLAogICJwcmVkaWNhdGUiOiB7CiAgICAic2VyaWFsaXphdGlvbiI6IHsKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdGlnbm9yZSIsCiAgICAgICAgIi5naXRodWIiLAogICAgICAgICIuZ2l0YXR0cmlidXRlcyIsCiAgICAgICAgIi5naXQiCiAgICAgIF0sCiAgICAgICJhbGxvd19zeW1saW5rcyI6IGZhbHNlLAogICAgICAibWV0aG9kIjogImZpbGVzIiwKICAgICAgImhhc2hfdHlwZSI6ICJzaGEyNTYiCiAgICB9LAogICAgInJlc291cmNlcyI6IFsKICAgICAgewogICAgICAgICJuYW1lIjogIkJFTkNITUFSSy5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiODViZjU4YTM0NGQyYWNhNzUwMmQwNjM4Y2QwMmJkMzBlZTAwMWZjM2M5ZDlkNGRkOWRlZWZkZTE2OTQwNTU4NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogIlNLSUxMLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIsCiAgICAgICAgImRpZ2VzdCI6ICI3YzJmZDA3M2NiYzAzYmNjZTRmZjIwYjA0ZjJkMTc0MGMwYzJmOTFiYTlmMTNlN2RmZGI2NWNkNTg1YWY5ZWQwIgogICAgICB9LAogICAgICB7CiAgICAgICAgIm5hbWUiOiAiZXZhbHMvZXZhbHMuanNvbiIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiLAogICAgICAgICJkaWdlc3QiOiAiNzZkY2Q2OThhYTEzZDNmYjAxZGIwMWJiM2EzYjdkOWFhYmZkMDcxNmNjZjNmZjYzNzU0MzI5ZDU4ZjllZmFmNSIKICAgICAgfSwKICAgICAgewogICAgICAgICJuYW1lIjogInNraWxsLWNhcmQubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IiwKICAgICAgICAiZGlnZXN0IjogImMzNTA3NWRiZjIzZDIzZWU0NTlkZGY2YTVhY2MxNjVlZTAwY2JiNTBmMDA0YTBiMmIzZWIxZTkyZDdhMDU5MzIiCiAgICAgIH0KICAgIF0KICB9Cn0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMEwBabbbP9oCmv+AH3JGrABPDLs1LLZBDMHUyWD6gXK3MZBrQWfwgL7e/AnAQeXL/AIxAPkjDIFc7/7hrGtGoL1pci0hiLZyQT9RqScdj+uE5iqGDovjyBD9BZHFWbk4k0Q7cw==","keyid":""}]}} \ No newline at end of file +{"mediaType":"application/vnd.dev.sigstore.bundle.v0.3+json","verificationMaterial":{"x509CertificateChain":{"certificates":[{"rawBytes":"MIICgzCCAgmgAwIBAgIUKIyS7SxNteQIiWzK1dWj85E6520wCgYIKoZIzj0EAwMwVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwHhcNMjYwNDAxMDAwMDAwWhcNMjgwNDIyMTUzMzA5WjBUMQswCQYDVQQGEwJVUzEbMBkGA1UECgwSTlZJRElBIENvcnBvcmF0aW9uMSgwJgYDVQQDDB9OVklESUEgQWdlbnQgU2tpbGxzIFNpZ25pbmcgMDAxMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEYoRM9bQl/dGlwSRNi6bTpIJUXH8Nv9GciP6LSflJYYMLCc296kpyuTSsk5ddbAWiDcFX3C/ydX3jwc+qCLYP6uHy9XphyLjOQ27Yb2J6rBLVtRBS1mgGco/Gr7fL6ODco4GaMIGXMB0GA1UdDgQWBBRQ/5ZW3nJ6lmo9SVk7I15o7UGmpTAfBgNVHSMEGDAWgBRPGpILxMBBleJSsBGjrMKsby1CgjAMBgNVHRMBAf8EAjAAMA4GA1UdDwEB/wQEAwIHgDA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9vY3NwLm5kaXMubnZpZGlhLmNvbTAKBggqhkjOPQQDAwNoADBlAjAUygu/GiOCIXrgGr4SmLgeEVDcEitfFUv7ALbvLVGVyMysB3mxmO/uInZfXzWcJZsCMQDxuoxj4ZmO30jhkPIcCxGFCOvnUsnfU3TfGcouYm4M6iRpbKvtVnHPiy4bi6pcKf0="},{"rawBytes":"MIICiDCCAg6gAwIBAgIUZsIuSv9NkpJCNqtYEfCouVv5BzowCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowVTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjEpMCcGA1UEAwwgTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBJQ0EgMDEwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASI72cR3ctKGg4VWnB3bNja6g1Z2PnOmFEopkPof+QeIcPk9rT+g9MjJnq51EQXL93a7C2GJ9J985G4o2V85VD7wJ1RaXhluHW2rf3y8bQGeAYaKMr5s/hUgn+M3/9WlWejgaAwgZ0wHQYDVR0OBBYEFE8akgvEwEGV4lKwEaOswqxvLUKCMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMBIGA1UdEwEB/wQIMAYBAf8CAQAwDgYDVR0PAQH/BAQDAgEGMDcGCCsGAQUFBwEBBCswKTAnBggrBgEFBQcwAYYbaHR0cDovL29jc3AubmRpcy5udmlkaWEuY29tMAoGCCqGSM49BAMDA2gAMGUCMQCeIMMfAbyzPDacw2MxG+Yt1cikrJX/DVxiGfXuHmkkXn6VgSzE79+lkqDErpVO2gYCMCNEColOyvUvkzZGUEI1hQ3PfMgi3FIo9tHoBKMw4/wGBLFpu/0ubtmbBXM6/UMOEw=="},{"rawBytes":"MIICRTCCAcygAwIBAgIUeJdY3rV86EdvFmG7L8LJBsyQFYkwCgYIKoZIzj0EAwMwUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTAgFw0yNjA0MDEwMDAwMDBaGA85OTk5MTIzMTIzNTk1OVowUTELMAkGA1UEBhMCVVMxGzAZBgNVBAoMEk5WSURJQSBDb3Jwb3JhdGlvbjElMCMGA1UEAwwcTlZJRElBIEFnZW50IENhcGFiaWxpdGllcyBDQTB2MBAGByqGSM49AgEGBSuBBAAiA2IABAYpiXCDjJ9NT2eSDhyHJVSw1Tbze18cGG2F/578oWvHxg23eQAhNRYdq88i1iOshZSO6C29doKui5Xpmo/7Ctw9Sx4PP2RzOmIuOLCuTdNtKcTRwi4GEsd5BAFvWj42M6NjMGEwHQYDVR0OBBYEFItnoAjjfuCEUvzyvWyI2vOGvwPjMB8GA1UdIwQYMBaAFItnoAjjfuCEUvzyvWyI2vOGvwPjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2cAMGQCMCwtAjWLaNwgGWNCgdyNoTyvNhqWRECRJV2r3+7w8g0PL6NHLOsbkgE09BH95h8XlgIwTaQmbbUh2ChAJ5TA1wRiVDnCcvbzHlZl2jM2FcwQQZlk19LOAbyGMRixbu2Ww/rj"}]},"tlogEntries":[]},"dsseEnvelope":{"payload":"ewogICJfdHlwZSI6ICJodHRwczovL2luLXRvdG8uaW8vU3RhdGVtZW50L3YxIiwKICAic3ViamVjdCI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiY3VvcHQtbnVtZXJpY2FsLW9wdGltaXphdGlvbi1mb3JtdWxhdGlvbiIsCiAgICAgICJkaWdlc3QiOiB7CiAgICAgICAgInNoYTI1NiI6ICIyZmVhZjE4M2EzMjBjZDYxM2UzNjgwYzVkODY4YzVhZTk0OTlkYTViZDUwZWE5NWNhYjk2NWY2NGM3NjRjY2YzIgogICAgICB9CiAgICB9CiAgXSwKICAicHJlZGljYXRlVHlwZSI6ICJodHRwczovL21vZGVsX3NpZ25pbmcvc2lnbmF0dXJlL3YxLjAiLAogICJwcmVkaWNhdGUiOiB7CiAgICAic2VyaWFsaXphdGlvbiI6IHsKICAgICAgImhhc2hfdHlwZSI6ICJzaGEyNTYiLAogICAgICAiYWxsb3dfc3ltbGlua3MiOiBmYWxzZSwKICAgICAgImlnbm9yZV9wYXRocyI6IFsKICAgICAgICAiLmdpdCIsCiAgICAgICAgIi5naXRodWIiLAogICAgICAgICIuZ2l0YXR0cmlidXRlcyIsCiAgICAgICAgIi5naXRpZ25vcmUiCiAgICAgIF0sCiAgICAgICJtZXRob2QiOiAiZmlsZXMiCiAgICB9LAogICAgInJlc291cmNlcyI6IFsKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMWM5N2ViZDgxNzVjMmYxNjMxOWNlMWMyMjg2YzNkZDdjNmI5ODI4ZmMxNTg5YjJkNmFkYjQzZmQ4ZGEwZDRiMCIsCiAgICAgICAgIm5hbWUiOiAiQkVOQ0hNQVJLLm1kIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiNTM0NTE3YzE5NjdjN2I1Y2U4ZGM4ZGQ2MzdhNDAxMzNlNTQyNTZhNWZmZWI2NTFjYTZmZWUzZDliNzg4M2U2MCIsCiAgICAgICAgIm5hbWUiOiAiU0tJTEwubWQiLAogICAgICAgICJhbGdvcml0aG0iOiAic2hhMjU2IgogICAgICB9LAogICAgICB7CiAgICAgICAgImRpZ2VzdCI6ICJmMjA3NjUxNjlmYWZiMTVlNmQ4YzFjNDRjMjZhMGM3MTRmOGRlYWVlZTNmOTU3YjkwZWNkMmJkMjA2NmJkZmM1IiwKICAgICAgICAibmFtZSI6ICJldmFscy9ldmFscy5qc29uIiwKICAgICAgICAiYWxnb3JpdGhtIjogInNoYTI1NiIKICAgICAgfSwKICAgICAgewogICAgICAgICJkaWdlc3QiOiAiMzQ0MWQwN2ZmZTI3YmJjNWYxNjQ1Mzc0NWQ4OWU2NTYwNmYyNDY1ZGUwZjU2NTAyNjc1NzU1YzgyOTUwNThmYiIsCiAgICAgICAgIm5hbWUiOiAic2tpbGwtY2FyZC5tZCIsCiAgICAgICAgImFsZ29yaXRobSI6ICJzaGEyNTYiCiAgICAgIH0KICAgIF0KICB9Cn0=","payloadType":"application/vnd.in-toto+json","signatures":[{"sig":"MGUCMQDTZrr2aRc+WXa8fl4CVNBy46wdEiQkslCS5DkSofum0rns0ohzbo7/YlHvC2Gt3CUCMA6kF8eU3Pygidj1N0YbTzQ7ELJXtNvq8erdiO9fH/2UZ4FkvPq8ptb8SPQqVoiHjg==","keyid":""}]}} \ No newline at end of file