{
  "id": "mobile-camera",
  "revision": "90903c09d808b0d844575eca374673893ee42048ed9bcbf4517d71788f8cae26",
  "regions": [
    {
      "id": "device",
      "label": "Mobile device"
    },
    {
      "id": "edge",
      "label": "Edge services"
    }
  ],
  "nodes": [
    {
      "id": "surface",
      "label": "Capture Surface",
      "kind": "N11",
      "region": "device",
      "ports": [
        {
          "id": "preview",
          "profile": "P08",
          "contract": "PreviewStateV1",
          "polarity": "Require"
        },
        {
          "id": "result",
          "profile": "P01",
          "contract": "DetectionV1",
          "polarity": "Require"
        },
        {
          "id": "upload",
          "profile": "P02",
          "contract": "MediaUploadV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "permission",
      "label": "Camera permission",
      "kind": "N33",
      "region": "device",
      "ports": [
        {
          "id": "grant",
          "profile": "P20",
          "contract": "DeviceGrantV1",
          "polarity": "Offer"
        }
      ]
    },
    {
      "id": "camera",
      "label": "Camera adapter",
      "kind": "N15",
      "region": "device",
      "ports": [
        {
          "id": "permission",
          "profile": "P20",
          "contract": "DeviceGrantV1",
          "polarity": "Require"
        },
        {
          "id": "preview",
          "profile": "P08",
          "contract": "PreviewStateV1",
          "polarity": "Offer"
        },
        {
          "id": "frame",
          "profile": "P16",
          "contract": "OwnedFrameV1",
          "polarity": "Offer"
        },
        {
          "id": "release",
          "profile": "P24",
          "contract": "ReleaseRefV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "pool",
      "label": "Owned frame pool",
      "kind": "N26",
      "region": "device",
      "ports": [
        {
          "id": "frame",
          "profile": "P16",
          "contract": "OwnedFrameV1",
          "polarity": "Require"
        },
        {
          "id": "borrow",
          "profile": "P17",
          "contract": "FrameLeaseV1",
          "polarity": "Offer"
        },
        {
          "id": "owner",
          "profile": "P24",
          "contract": "ResourceOwnerV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "native",
      "label": "Native inference kernel",
      "kind": "N16",
      "region": "device",
      "ports": [
        {
          "id": "input",
          "profile": "P17",
          "contract": "FrameLeaseV1",
          "polarity": "Require"
        },
        {
          "id": "result",
          "profile": "P01",
          "contract": "DetectionV1",
          "polarity": "Offer"
        },
        {
          "id": "borrower",
          "profile": "P24",
          "contract": "BorrowScopeV1",
          "polarity": "Neutral"
        }
      ]
    },
    {
      "id": "upload",
      "label": "Upload service",
      "kind": "N19",
      "region": "edge",
      "ports": [
        {
          "id": "put",
          "profile": "P02",
          "contract": "MediaUploadV1",
          "polarity": "Offer"
        },
        {
          "id": "store",
          "profile": "P02",
          "contract": "ObjectPutV1",
          "polarity": "Require"
        }
      ]
    },
    {
      "id": "blob",
      "label": "Object store",
      "kind": "N26",
      "region": "edge",
      "ports": [
        {
          "id": "put",
          "profile": "P02",
          "contract": "ObjectPutV1",
          "polarity": "Offer"
        }
      ]
    }
  ],
  "relations": [
    {
      "id": "permission",
      "kind": "H23",
      "incidences": [
        {
          "node": "permission",
          "port": "grant",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "camera",
          "port": "permission",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "preview",
      "kind": "H02",
      "incidences": [
        {
          "node": "camera",
          "port": "preview",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "surface",
          "port": "preview",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "frame",
      "kind": "H02",
      "incidences": [
        {
          "node": "camera",
          "port": "frame",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "pool",
          "port": "frame",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "borrow",
      "kind": "H01",
      "incidences": [
        {
          "node": "pool",
          "port": "borrow",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "native",
          "port": "input",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "result",
      "kind": "H02",
      "incidences": [
        {
          "node": "native",
          "port": "result",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "surface",
          "port": "result",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "upload",
      "kind": "H05",
      "incidences": [
        {
          "node": "upload",
          "port": "put",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "surface",
          "port": "upload",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "storage",
      "kind": "H05",
      "incidences": [
        {
          "node": "blob",
          "port": "put",
          "role": "provider",
          "ordinal": 0
        },
        {
          "node": "upload",
          "port": "store",
          "role": "consumer",
          "ordinal": 0
        }
      ]
    },
    {
      "id": "lifetime",
      "kind": "H19",
      "incidences": [
        {
          "node": "pool",
          "port": "owner",
          "role": "owner",
          "ordinal": 0
        },
        {
          "node": "native",
          "port": "borrower",
          "role": "borrower",
          "ordinal": 1
        },
        {
          "node": "camera",
          "port": "release",
          "role": "release",
          "ordinal": 2
        }
      ]
    }
  ]
}
