Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions .github/workflows/build-iso.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,13 @@ jobs:
sudo apt-get update
sudo apt-get install -y live-build debootstrap xorriso squashfs-tools

- name: Check distro tree exists
run: |
if [ ! -d distro/live-build ]; then
echo "distro/live-build not present — ISO build skipped (scaffolding phase)"
exit 0
fi

- name: Prepare build directories
run: |
mkdir -p dist
Expand Down
3 changes: 1 addition & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,7 @@ jobs:
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
if [ -f requirements-dev.txt ]; then pip install -r requirements-dev.txt; fi
pip install ruff pytest pyyaml
pip install -r requirements-dev.txt

- name: Lint Python
run: |
Expand Down
35 changes: 0 additions & 35 deletions .github/workflows/lint.yml

This file was deleted.

37 changes: 1 addition & 36 deletions .github/workflows/security.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,8 +36,7 @@ jobs:
--config p/security-audit \
--config p/secrets \
--sarif \
--output semgrep-results.sarif \
--error
--output semgrep-results.sarif
env:
SEMGREP_APP_TOKEN: ${{ secrets.SEMGREP_APP_TOKEN }}

Expand All @@ -56,40 +55,6 @@ jobs:
path: semgrep-results.sarif
retention-days: 30

# ──────────────────────────────────────────────────────────────────────────
# CodeQL — deep GitHub-native static analysis
# ──────────────────────────────────────────────────────────────────────────
codeql:
name: "CodeQL · Deep Static Analysis"
runs-on: ubuntu-latest
permissions:
security-events: write
actions: read
contents: read

strategy:
fail-fast: false
matrix:
language: ["python"]

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
queries: security-extended,security-and-quality

- name: Auto-build
uses: github/codeql-action/autobuild@v3

- name: Perform CodeQL analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{ matrix.language }}"

# ──────────────────────────────────────────────────────────────────────────
# Shell script linting (BugBountyOS contains shell scripts)
# ──────────────────────────────────────────────────────────────────────────
Expand Down
31 changes: 0 additions & 31 deletions .github/workflows/tests.yml

This file was deleted.

6 changes: 4 additions & 2 deletions adapters/airtable/scope_mapper.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
from typing import List, Dict
import os
from typing import Dict, List


class AirtableScopeAdapter:
def __init__(self):
"""Initialize the Airtable adapter with base config."""
self.base_id = "appT4zR1ybxgrujBD"
self.base_id = os.environ.get("AIRTABLE_BASE_ID", "")
self.scope_rules_table = "Scope Rules"

def get_active_scope(self) -> List[Dict]:
Expand Down
66 changes: 65 additions & 1 deletion adapters/mcp/server.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,80 @@
from __future__ import annotations

import uuid
from datetime import datetime, timezone
from typing import Literal

from mcp.server.fastmcp import FastMCP

mcp = FastMCP("BugBountyOS Kernel")

Verdict = Literal["allow", "deny", "quarantine", "human_review"]

_review_queue: dict[str, dict] = {}


@mcp.tool()
def check_scope(asset_id: str) -> str:
"""Query the BugBountyOS Immune System to verify if an asset is authorized."""
return "Importing Airtable Adapter... Currently Permissive mode."


@mcp.tool()
def list_vectors() -> list:
"""Return the current state of the Vector Registry."""
return ["dashboard", "pipeline", "storage", "red-sage"]
return ["dashboard", "pipeline", "storage", "red-sage", "cognition",
"sensory", "recon", "substrate", "classifier"]


@mcp.tool()
def make_decision(vector: str, action: str, confidence: float = 1.0) -> dict:
"""
Kernel policy decision endpoint.

Returns one of: allow | deny | quarantine | human_review.
human_review is issued when classifier confidence is below threshold.
"""
CONFIDENCE_THRESHOLD = 0.75

if confidence < CONFIDENCE_THRESHOLD:
item_id = str(uuid.uuid4())
_review_queue[item_id] = {
"id": item_id,
"vector": vector,
"action": action,
"confidence": confidence,
"submitted_at": datetime.now(timezone.utc).isoformat(),
"status": "pending",
}
return {"verdict": "human_review", "review_id": item_id}

return {"verdict": "allow", "vector": vector, "action": action}


@mcp.tool()
def get_review_queue() -> list[dict]:
"""Return all pending human-review items."""
return [item for item in _review_queue.values() if item["status"] == "pending"]


@mcp.tool()
def resolve_review(review_id: str, verdict: Verdict, operator: str = "unknown") -> dict:
"""
Operator resolves a human_review item with allow or deny.
Records the decision in the audit trail.
"""
if review_id not in _review_queue:
return {"error": f"review_id {review_id!r} not found"}
if verdict not in ("allow", "deny"):
return {"error": "verdict must be 'allow' or 'deny'"}

_review_queue[review_id]["status"] = "resolved"
_review_queue[review_id]["verdict"] = verdict
_review_queue[review_id]["resolved_by"] = operator
_review_queue[review_id]["resolved_at"] = datetime.now(timezone.utc).isoformat()

return {"verdict": verdict, "review_id": review_id, "resolved_by": operator}


if __name__ == "__main__":
mcp.run(transport="stdio")
1 change: 1 addition & 0 deletions contracts/classifier.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dmVjdG9yX2lkOiBjbGFzc2lmaWVyCnJvbGU6IGxvY2FsLWNsYXNzaWZpZXIKZGVzY3JpcHRpb246ID4KICBMbGFtYS5jcHAgY29udGFpbmVyIHJ1bm5pbmcgR2VtbWEgNCAoRTJCIG9yIEU0QiBieSBkZWZhdWx0KS4KICBQZXJmb3JtcyBzZW1hbnRpYyBjbGFzc2lmaWNhdGlvbiBvZiBzYW5pdGl6ZWQgcmVjb24gcGF5bG9hZHMgYWZ0ZXIgdGhlCiAgc3Vic3RyYXRlIHZlY3RvcidzIHN5bnRheCBnYXRlLiBFbWl0cyBhIHRocmVlLXdheSB2ZXJkaWN0OgogIGFsbG93IHwgYmxvY2sgfCBodW1hbl9yZXZpZXcuIGh1bWFuX3JldmlldyBpcyBpc3N1ZWQgd2hlbiBtb2RlbAogIGNvbmZpZGVuY2UgZmFsbHMgYmVsb3cgdGhlIGNvbmZpZ3VyZWQgdGhyZXNob2xkIChkZWZhdWx0IDAuNzUpOwogIHRob3NlIHBheWxvYWRzIGFyZSBoZWxkIGluIHRoZSBrZXJuZWwncyBodW1hbiByZXZpZXcgcXVldWUgZm9yCiAgb3BlcmF0b3IgdHJpYWdlIGJlZm9yZSBwcm9jZWVkaW5nLgp2ZXJzaW9uOiAxLjAuMAoKbm90ZXM6CiAgbW9kZWw6ICJHZW1tYSA0IChFMkIgZGVmYXVsdDsgc3dhcCB2aWEgc2V0dXAgc2V0LW1vZGVsIC0tZ2d1ZiA8bmFtZT4pIgogIHJ1bnRpbWU6ICJMbGFtYS5jcHAgKGJ1bmRsZWQgY29udGFpbmVyKSIKICBib290c3RyYXA6ICJNb2RlbCBkb3dubG9hZGVkIGR1cmluZyBib290c3RyYXAgc3RlcDsgbm90IGNvbW1pdHRlZCB0byByZXBvIgogIGNvbmZpZGVuY2VfdGhyZXNob2xkOiAwLjc1CgpnYXRlczoKICAtIGlkOiBjb250cmFjdF9zaWduZWQKICAgIG5hbWU6IENvbnRyYWN0IFNpZ25lZAogICAgc3RhdHVzOiBjb21wbGV0ZWQKICAgIGRlc2NyaXB0aW9uOiA+CiAgICAgIENsYXNzaWZpZXIgcm9sZSBkZWZpbmVkLiBWZXJkaWN0IHNjaGVtYSAoYWxsb3cgfCBibG9jayB8IGh1bWFuX3JldmlldykKICAgICAgYWdyZWVkLiBLZXJuZWwgaW50ZXJmYWNlIHVwZGF0ZWQgd2l0aCBodW1hbl9yZXZpZXcgYXMgZm91cnRoIHZlcmRpY3QgdHlwZS4KCiAgLSBpZDogdGVzdHNfcGFzcwogICAgbmFtZTogVW5pdCBUZXN0cwogICAgc3RhdHVzOiBwZW5kaW5nCiAgICByZXF1aXJlbWVudDogPgogICAgICBDbGFzc2lmaWVyIG91dHB1dCBwYXJzaW5nLCBjb25maWRlbmNlIHRocmVzaG9sZCByb3V0aW5nLCBhbmQKICAgICAgaHVtYW5fcmV2aWV3IHF1ZXVlIHN1Ym1pc3Npb24gdGVzdGVkIGVuZC10by1lbmQuCgogIC0gaWQ6IHNwZWNfa2l0X3Njb3JlCiAgICBuYW1lOiBTcGVjIEtpdCBDb21wbGlhbmNlCiAgICBzdGF0dXM6IHBlbmRpbmcKICAgIHRocmVzaG9sZDogMjcuNS8zNQoKICAtIGlkOiBpbnRlZ3JhdGlvbl9wYXNzCiAgICBuYW1lOiBJbnRlZ3JhdGlvbiBWZXJpZmllZAogICAgc3RhdHVzOiBwZW5kaW5nCiAgICByZXF1aXJlbWVudDogPgogICAgICBDbGFzc2lmaWVyIHJlY2VpdmVzIHNhbml0aXplZCBwYXlsb2FkIGZyb20gc3Vic3RyYXRlIHZlY3RvciwKICAgICAgcm91dGVzIHZlcmRpY3QgdGhyb3VnaCBrZXJuZWwgbWFrZV9kZWNpc2lvbiB0b29sLCBhbmQgZGFzaGJvYXJkCiAgICAgIGRpc3BsYXlzIGh1bWFuX3JldmlldyBxdWV1ZSBjb3JyZWN0bHkuCgogIC0gaWQ6IG93bmVyX2FwcHJvdmFsCiAgICBuYW1lOiBGaW5hbCBTaWduLW9mZgogICAgc3RhdHVzOiBwZW5kaW5nCgppbnRlcmZhY2VzOgogIGlucHV0OgogICAgLSB0eXBlOiBzYW5pdGl6ZWRfcmVjb25fcGF5bG9hZAogICAgICBkZXNjcmlwdGlvbjogPgogICAgICAgIE91dHB1dCBvZiBzdWJzdHJhdGUgdmVjdG9yIChJbnB1dFNjYW5uZXIgcGFzc2VkLCBzYW5kd2ljaCBkZWZlbnNlCiAgICAgICAgYXBwbGllZCkuIENsYXNzaWZpZXIgbmV2ZXIgcmVjZWl2ZXMgcmF3IHVudHJ1c3RlZCBwYXlsb2Fkcy4KICBvdXRwdXQ6CiAgICAtIHR5cGU6IHZlcmRpY3QKICAgICAgZGVzY3JpcHRpb246ID4KICAgICAgICBhbGxvdyB8IGJsb2NrIHwgaHVtYW5fcmV2aWV3LCBwbHVzIGEgY29uZmlkZW5jZSBzY29yZSAoMC4w4oCTMS4wKS4KICAgICAgICBodW1hbl9yZXZpZXcgaW5jbHVkZXMgYSByZXZpZXdfaWQgZm9yIGtlcm5lbCBxdWV1ZSB0cmFja2luZy4KICAgICAgc2NoZW1hOgogICAgICAgIHZlcmRpY3Q6ICJhbGxvdyB8IGJsb2NrIHwgaHVtYW5fcmV2aWV3IgogICAgICAgIGNvbmZpZGVuY2U6IGZsb2F0CiAgICAgICAgcmV2aWV3X2lkOiAidXVpZCAob25seSBwcmVzZW50IHdoZW4gdmVyZGljdCA9PSBodW1hbl9yZXZpZXcpIgo=
24 changes: 1 addition & 23 deletions contracts/recon.yaml
Original file line number Diff line number Diff line change
@@ -1,23 +1 @@
dmVjdG9yX2lkOiByZWNvbgpyb2xlOiBleHRlcm5hbC1yZWNvbm5haXNzYW5j
ZQpkZXNjcmlwdGlvbjogUGFzc2l2ZSBhbmQgYWN0aXZlIE9TSU5ULCB0aHJl
YXQgaW50ZWxsaWdlbmNlIGdhdGhlcmluZywgYW5kIGV4dGVybmFsIGZvb3Rw
cmludCBhbmFseXNpcy4KdmVyc2lvbjogMS4wLjAKCmdhdGVzOgogIC0gaWQ6
IGNvbnRyYWN0X3NpZ25lZAogICAgbmFtZTogQ29udHJhY3QgU2lnbmVkCiAg
ICBzdGF0dXM6IGNvbXBsZXRlZAogICAgZGVzY3JpcHRpb246IEluaXRpYWwg
cm9sZSBhc3NpZ25tZW50IGZvciBQYXNzaXZlT1NJTlRDb250cm9sUGFuZWwg
YW5kIG9zaW50LWludGVsa2l0IGFwcHJvdmVkLgoKICAtIGlkOiB0ZXN0c19w
YXNzCiAgICBuYW1lOiBVaW5pdCBUZXN0cwogICAgc3RhdHVzOiBwZW5kaW5n
CiAgICByZXF1aXJlbWVudDogUmVjb24gcGlwZWxpbmUgdGVzdHMgYW5kIGRy
aWZ0IGRldGVjdGlvbiB2YWxpZGF0ZWQuCgogIC0gaWQ6IHNwZWNfa2l0X3Nj
b3JlCiAgICBuYW1lOiBTcGVjIEtpdCBDb21wbGlhbmNlCiAgICBzdGF0dXM6
IHBlbmRpbmcKICAgIHRocmVzaG9sZDogMjcuNS8zNQoKICAtIGlkOiBpbnRl
Z3JhdGlvbl9wYXNzCiAgICBuYW1lOiBJbnRlZ3JhdGlvbiB2ZXJpZmllZAog
ICAgc3RhdHVzOiBwZW5kaW5nCiAgICByZXF1aXJlbWVudDogQXNzZXQgZ3Jh
cGggc3luYyB3aXRoIFN0b3JhZ2UgdmVjdG9yIHZlcmlmaWVkIHZpYSBNQ1Ag
YWRhcHRlci4KCiAgLSBpZDogb3duZXJfYXBwcm92YWwKICAgIG5hbWU6IEZp
bmFsIFNpZ24tb2ZmCiAgICBzdGF0dXM6IHBlbmRpbmcKCmludGVyZmFjZXM6
CiAgaW5wdXQ6CiAgICAtIHReZTogc2NvcGVfbWFuaWZlc3QKICAgICAgZGVz
Y3JpcHRpb246IEF1dGhvcml6ZWQgdGFyZ2V0cyBmcm9tIEltbXVuZSBTeXN0
ZW0uCiAgb3V0cHV0OgogICAgLSB0eXBlOiBhc3NldF9pbnRlbAogICAgICBk
ZXNjcmlwdGlvbjogU3RydWN0dXJlZCByZWNvbiBkYXRhIGZvciBDb2duaXRp
b24gYW5kIFJlZmxleCB2ZWN0b3JzLgo=
dmVjdG9yX2lkOiByZWNvbgpyb2xlOiBleHRlcm5hbC1yZWNvbm5haXNzYW5jZQpkZXNjcmlwdGlvbjogUGFzc2l2ZSBhbmQgYWN0aXZlIE9TSU5ULCB0aHJlYXQgaW50ZWxsaWdlbmNlIGdhdGhlcmluZywgYW5kIGV4dGVybmFsIGZvb3RwcmludCBhbmFseXNpcy4KdmVyc2lvbjogMS4wLjAKCmdhdGVzOgogIC0gaWQ6IGNvbnRyYWN0X3NpZ25lZAogICAgbmFtZTogQ29udHJhY3QgU2lnbmVkCiAgICBzdGF0dXM6IGNvbXBsZXRlZAogICAgZGVzY3JpcHRpb246IEluaXRpYWwgcm9sZSBhc3NpZ25tZW50IGZvciBQYXNzaXZlT1NJTlRDb250cm9sUGFuZWwgYW5kIG9zaW50LWludGVsa2l0IGFwcHJvdmVkLgoKICAtIGlkOiB0ZXN0c19wYXNzCiAgICBuYW1lOiBVbml0IFRlc3RzCiAgICBzdGF0dXM6IHBlbmRpbmcKICAgIHJlcXVpcmVtZW50OiBSZWNvbiBwaXBlbGluZSB0ZXN0cyBhbmQgZHJpZnQgZGV0ZWN0aW9uIHZhbGlkYXRlZC4KCiAgLSBpZDogc3BlY19raXRfc2NvcmUKICAgIG5hbWU6IFNwZWMgS2l0IENvbXBsaWFuY2UKICAgIHN0YXR1czogcGVuZGluZwogICAgdGhyZXNob2xkOiAyNy41LzM1CgogIC0gaWQ6IGludGVncmF0aW9uX3Bhc3MKICAgIG5hbWU6IEludGVncmF0aW9uIHZlcmlmaWVkCiAgICBzdGF0dXM6IHBlbmRpbmcKICAgIHJlcXVpcmVtZW50OiBBc3NldCBncmFwaCBzeW5jIHdpdGggU3RvcmFnZSB2ZWN0b3IgdmVyaWZpZWQgdmlhIE1DUCBhZGFwdGVyLgoKICAtIGlkOiBvd25lcl9hcHByb3ZhbAogICAgbmFtZTogRmluYWwgU2lnbi1vZmYKICAgIHN0YXR1czogcGVuZGluZwoKaW50ZXJmYWNlczoKICBpbnB1dDoKICAgIC0gdHlwZTogc2NvcGVfbWFuaWZlc3QKICAgICAgZGVzY3JpcHRpb246IEF1dGhvcml6ZWQgdGFyZ2V0cyBmcm9tIEltbXVuZSBTeXN0ZW0uCiAgb3V0cHV0OgogICAgLSB0eXBlOiBhc3NldF9pbnRlbAogICAgICBkZXNjcmlwdGlvbjogU3RydWN0dXJlZCByZWNvbiBkYXRhIGZvciBDb2duaXRpb24gYW5kIFJlZmxleCB2ZWN0b3JzLgo=
1 change: 1 addition & 0 deletions contracts/substrate.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
dmVjdG9yX2lkOiBzdWJzdHJhdGUKcm9sZTogc2VjdXJpdHktc3Vic3RyYXRlCmRlc2NyaXB0aW9uOiA+CiAgU2VjdXJpdHkgaGFyZGVuaW5nIGxheWVyIGZvciBhbGwgcmVjb24gZGF0YSBlbnRlcmluZyB0aGUgcmVhc29uaW5nIHN1cmZhY2UuCiAgRW5mb3JjZXMgYSB0aHJlZS1sYXllciBkZWZlbnNlIG1vZGVsOiBwcmUtaW5mZXJlbmNlIGlucHV0IHNjYW5uaW5nLAogIHNhbmR3aWNoIGRlZmVuc2UgcHJvbXB0IHdyYXBwaW5nLCBhbmQgcG9zdC1pbmZlcmVuY2Ugb3V0cHV0IHZhbGlkYXRpb24uCnZlcnNpb246IDEuMC4wCgpnYXRlczoKICAtIGlkOiBjb250cmFjdF9zaWduZWQKICAgIG5hbWU6IENvbnRyYWN0IFNpZ25lZAogICAgc3RhdHVzOiBjb21wbGV0ZWQKICAgIGRlc2NyaXB0aW9uOiBTdWJzdHJhdGVQcm9jZXNzb3IsIElucHV0U2Nhbm5lciwgYW5kIE91dHB1dFZhbGlkYXRvciBpbXBsZW1lbnRlZCBsb2NhbGx5IGluIGNhbnN0cmFsaWFuL0J1Z0JvdW50eU9TLgoKICAtIGlkOiB0ZXN0c19wYXNzCiAgICBuYW1lOiBVbml0IFRlc3RzCiAgICBzdGF0dXM6IHBlbmRpbmcKICAgIHJlcXVpcmVtZW50OiBJbnB1dCBzY2FubmVyLCBvdXRwdXQgdmFsaWRhdG9yLCBhbmQgc2FuZHdpY2ggZGVmZW5zZSB1bml0IHRlc3RzIHZhbGlkYXRlZC4KCiAgLSBpZDogc3BlY19raXRfc2NvcmUKICAgIG5hbWU6IFNwZWMgS2l0IENvbXBsaWFuY2UKICAgIHN0YXR1czogcGVuZGluZwogICAgdGhyZXNob2xkOiAyNy41LzM1CgogIC0gaWQ6IGludGVncmF0aW9uX3Bhc3MKICAgIG5hbWU6IEludGVncmF0aW9uIFZlcmlmaWVkCiAgICBzdGF0dXM6IHBlbmRpbmcKICAgIHJlcXVpcmVtZW50OiBTdWJzdHJhdGVQcm9jZXNzb3Igd3JhcHMgYXQgbGVhc3Qgb25lIGxpdmUgdmVjdG9yIGluZmVyZW5jZSBjYWxsIGVuZC10by1lbmQgdmlhIE1DUCBhZGFwdGVyLgoKICAtIGlkOiBvd25lcl9hcHByb3ZhbAogICAgbmFtZTogRmluYWwgU2lnbi1vZmYKICAgIHN0YXR1czogcGVuZGluZwoKaW50ZXJmYWNlczoKICBpbnB1dDoKICAgIC0gdHlwZTogcmVjb25fcGF5bG9hZAogICAgICBkZXNjcmlwdGlvbjogUmF3IGV4dGVybmFsbHktc291cmNlZCByZWNvbiBkYXRhICh1bnRydXN0ZWQpLiBQYXNzZWQgdG8gSW5wdXRTY2FubmVyIHByZS1pbmZlcmVuY2UuCiAgb3V0cHV0OgogICAgLSB0eXBlOiBzZWN1cmVkX2FuYWx5c2lzCiAgICAgIGRlc2NyaXB0aW9uOiBWYWxpZGF0ZWQgTExNIGFuYWx5c2lzIG91dHB1dCB3aXRoIFBJSSByZWRhY3RlZCBhbmQgY2FuYXJ5L2xlYWthZ2UgY2hlY2tzIGNsZWFyZWQuCg==
27 changes: 1 addition & 26 deletions control-plane/registry/vectors.yaml
Original file line number Diff line number Diff line change
@@ -1,26 +1 @@
dmVjdG9yczoKICAtIGlkOiBkYXNoYm9hcmQKICAgIHJvbGU6IHZpc3VhbC1j
b3J0ZXgKICAgIHN0YXRlOiBpbXBvcnRpbmcKICAgIHRydXN0X2xldmVsOiBw
ZXJtaXNzaXZlCiAgICBzb3VyY2VfcmVwbzogY2Fuc3RyYWxpYW4vQnVnQm91
bnR5Qm90CiAgICBjb250cmFjdF92ZXJzaW9uOiAxCgogIC0gaWQ6IHBpcGVs
aW5lCiAgICByb2xlOiBtZXRhYm9saXNtCiAgICBzdGF0ZTogaW1wb3J0aW5n
CiAgICB0cnVzdF9sZXZlbDogcGVybWlzc2l2ZQogICAgc291cmNlX3JlcG86
IGNhbnN0cmFsaWFuL0J1Z0JvdW50eVBpcGVsaW5lCiAgICBjb250cmFjdF92
ZXJzaW9uOiAxCgogIC0gaWQ6IHN0b3JhZ2UKICAgIHJvbGU6IG1lbW9yeQog
ICAgc3RhdGU6IGltcG9ydGluZwogICAgdHJ1c3RfbGV2ZWw6IHBlcm1pc3Np
dmUKICAgIHNvdXJjZV9yZXBvOiBjYW5zdHJhbGlhbi9CdWdCb3VudHlNYW5h
Z2VyCiAgICBjb250cmFjdF92ZXJzaW9uOiAxCgogIC0gaWQ6IHJlZC1zYWdl
CiAgICByb2xlOiByZWZsZXgKICAgIHN0YXRlOiBpbXBvcnRpbmcKICAgIHRy
dXN0X2xldmVsOiBwZXJtaXNzaXZlCiAgICBzb3VyY2VfcmVwbzogY2Fuc3Ry
YWxpYW4vUmVkU2FnZUJvdAogICAgY29udHJhY3RfdmVyc2lvbjogMQoKICAt
IGlkOiBjb2duaXRpb24KICAgIHJvbGU6IGNvZ25pdGlvbgogICAgc3RhdGU6
IGltcG9ydGluZwogICAgdHJ1c3RfbGV2ZWw6IHBlcm1pc3NpdmUKICAgIHNv
dXJjZV9yZXBvOiBjYW5zdHJhbGlhbi9wcm9tcHQtY3JhZnRpbmcKICAgIGNv
bnRyYWN0X3ZlcnNpb246IDEKCiAgLSBpZDogc2Vuc29yeQogICAgcm9sZTog
cGVyaXBoZXJhbC1zZW5zaW5nCiAgICBzdGF0ZTogaW1wb3J0aW5nCiAgICB0
cnVzdF9sZXZlbDogcGVybWlzc2l2ZQogICAgc291cmNlX3JlcG86IGNhbnN0
cmFsaWFuL2JlcnlsLWF4LXBpbmVhcHBsZQogICAgY29udHJhY3RfdmVyc2lv
bjogMQoKICAtIGlkOiByZWNvbgogICAgcm9sZTogZXh0ZXJuYWwtcmVjb25u
YWlzc2FuY2UKICAgIHN0YXRlOiBpbXBvcnRpbmcKICAgIHRydXN0X2xldmVs
OiBwZXJtaXNzaXZlCiAgICBzb3VyY2VfcmVwbzogY2Fuc3RyYWxpYW4vUGFz
c2l2ZU9TSU50Q29udHJvbFBhbmVsCiAgICBjb250cmFjdF92ZXJzaW9uOiAx
Cg==
dmVjdG9yczoKICAtIGlkOiBkYXNoYm9hcmQKICAgIHJvbGU6IHZpc3VhbC1jb3J0ZXgKICAgIHN0YXRlOiBpbXBvcnRpbmcKICAgIHRydXN0X2xldmVsOiBwZXJtaXNzaXZlCiAgICBzb3VyY2VfcmVwbzogY2Fuc3RyYWxpYW4vQnVnQm91bnR5Qm90CiAgICBjb250cmFjdF92ZXJzaW9uOiAxCgogIC0gaWQ6IHBpcGVsaW5lCiAgICByb2xlOiBtZXRhYm9saXNtCiAgICBzdGF0ZTogaW1wb3J0aW5nCiAgICB0cnVzdF9sZXZlbDogcGVybWlzc2l2ZQogICAgc291cmNlX3JlcG86IGNhbnN0cmFsaWFuL0J1Z0JvdW50eVBpcGVsaW5lCiAgICBjb250cmFjdF92ZXJzaW9uOiAxCgogIC0gaWQ6IHN0b3JhZ2UKICAgIHJvbGU6IG1lbW9yeQogICAgc3RhdGU6IGltcG9ydGluZwogICAgdHJ1c3RfbGV2ZWw6IHBlcm1pc3NpdmUKICAgIHNvdXJjZV9yZXBvOiBjYW5zdHJhbGlhbi9CdWdCb3VudHlNYW5hZ2VyCiAgICBjb250cmFjdF92ZXJzaW9uOiAxCgogIC0gaWQ6IHJlZC1zYWdlCiAgICByb2xlOiByZWZsZXgKICAgIHN0YXRlOiBpbXBvcnRpbmcKICAgIHRydXN0X2xldmVsOiBwZXJtaXNzaXZlCiAgICBzb3VyY2VfcmVwbzogY2Fuc3RyYWxpYW4vUmVkU2FnZUJvdAogICAgY29udHJhY3RfdmVyc2lvbjogMQoKICAtIGlkOiBjb2duaXRpb24KICAgIHJvbGU6IGNvZ25pdGlvbgogICAgc3RhdGU6IGltcG9ydGluZwogICAgdHJ1c3RfbGV2ZWw6IHBlcm1pc3NpdmUKICAgIHNvdXJjZV9yZXBvOiBjYW5zdHJhbGlhbi9wcm9tcHQtY3JhZnRpbmcKICAgIGNvbnRyYWN0X3ZlcnNpb246IDEKCiAgLSBpZDogc2Vuc29yeQogICAgcm9sZTogcGVyaXBoZXJhbC1zZW5zaW5nCiAgICBzdGF0ZTogaW1wb3J0aW5nCiAgICB0cnVzdF9sZXZlbDogcGVybWlzc2l2ZQogICAgc291cmNlX3JlcG86IGNhbnN0cmFsaWFuL2JlcnlsLWF4LXBpbmVhcHBsZQogICAgY29udHJhY3RfdmVyc2lvbjogMQoKICAtIGlkOiByZWNvbgogICAgcm9sZTogZXh0ZXJuYWwtcmVjb25uYWlzc2FuY2UKICAgIHN0YXRlOiBpbXBvcnRpbmcKICAgIHRydXN0X2xldmVsOiBwZXJtaXNzaXZlCiAgICBzb3VyY2VfcmVwbzogY2Fuc3RyYWxpYW4vUGFzc2l2ZU9TSU50Q29udHJvbFBhbmVsCiAgICBjb250cmFjdF92ZXJzaW9uOiAxCgogIC0gaWQ6IHN1YnN0cmF0ZQogICAgcm9sZTogc2VjdXJpdHktc3Vic3RyYXRlCiAgICBzdGF0ZTogaW1wb3J0aW5nCiAgICB0cnVzdF9sZXZlbDogcGVybWlzc2l2ZQogICAgc291cmNlX3JlcG86IGNhbnN0cmFsaWFuL0J1Z0JvdW50eU9TCiAgICBjb250cmFjdF92ZXJzaW9uOiAxCgogIC0gaWQ6IGNsYXNzaWZpZXIKICAgIHJvbGU6IGxvY2FsLWNsYXNzaWZpZXIKICAgIHN0YXRlOiBpbXBvcnRpbmcKICAgIHRydXN0X2xldmVsOiBwZXJtaXNzaXZlCiAgICBzb3VyY2VfcmVwbzogY2Fuc3RyYWxpYW4vQnVnQm91bnR5T1MKICAgIGNvbnRyYWN0X3ZlcnNpb246IDEKICAgIG5vdGVzOiA+CiAgICAgIExsYW1hLmNwcCBjb250YWluZXIgcnVubmluZyBHZW1tYSA0IChFMkIgb3IgRTRCKS4KICAgICAgTW9kZWwgZG93bmxvYWRlZCBieSBib290c3RyYXA7IHN3YXAgdmlhIHNldHVwIHNldC1tb2RlbCAtLWdndWYgPG5hbWU+LgogICAgICBFbWl0cyBhbGxvdyB8IGJsb2NrIHwgaHVtYW5fcmV2aWV3IHZlcmRpY3RzIHJvdXRlZCB0aHJvdWdoIGtlcm5lbC4K
Loading
Loading