<mxfile host="65bd71144e" compressed="false">
    <diagram id="saas-physical" name="01 SaaSモード・AWS物理構成">
        <mxGraphModel adaptiveColors="auto" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="0" page="1" pageScale="1" pageWidth="5330" pageHeight="1840" math="0" shadow="0">
            <root>
                <mxCell id="0" />
                <mxCell id="1" parent="0" />
                <mxCell id="aws-tenkacloud" value="AWS Cloud" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#232F3E;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontColor=#232F3E;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="1"><mxGeometry x="20" y="130" width="4410" height="1610" as="geometry" /></mxCell>
                <mxCell id="region-tenkacloud" value="AWS Region — account / environment boundary" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#147EBA;strokeWidth=2;dashed=1;fontSize=17;fontStyle=1;fontColor=#147EBA;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="aws-tenkacloud"><mxGeometry x="20" y="170" width="4370" height="1420" as="geometry" /></mxCell>
                <mxCell id="stack-runtime-config" value="AdminConsoleRuntimeConfigStack" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FAFBFC;strokeColor=#405A78;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#405A78;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-tenkacloud"><mxGeometry x="20" y="60" width="290" height="186" as="geometry" /></mxCell>
                <mxCell id="stack-admin-hosting" value="AdminConsoleHostingStack" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FAFBFC;strokeColor=#405A78;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#405A78;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-tenkacloud"><mxGeometry x="335" y="60" width="370" height="346" as="geometry" /></mxCell>
                <mxCell id="stack-control-plane" value="ControlPlaneStack（SBT）" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FAFBFC;strokeColor=#405A78;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#405A78;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-tenkacloud"><mxGeometry x="720" y="60" width="640" height="516" as="geometry" /></mxCell>
                <mxCell id="stack-bootstrap" value="BootstrapTemplateStack" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#F7FAFD;strokeColor=#147EBA;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#147EBA;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-tenkacloud"><mxGeometry x="720" y="610" width="640" height="526" as="geometry" /></mxCell>
                <mxCell id="stack-insight" value="AdminConsoleInsightStack" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FAFBFC;strokeColor=#405A78;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#405A78;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-tenkacloud"><mxGeometry x="1390" y="60" width="420" height="516" as="geometry" /></mxCell>
                <mxCell id="stack-observability" value="ObservabilityStack" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#64748B;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#64748B;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-tenkacloud"><mxGeometry x="1390" y="610" width="420" height="186" as="geometry" /></mxCell>
                <mxCell id="stack-pipeline" value="ServerlessSaaSPipeline" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#64748B;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#64748B;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-tenkacloud"><mxGeometry x="1610" y="950" width="670" height="356" as="geometry" /></mxCell>
                <mxCell id="stack-tenant-template" value="TenantTemplateStack（pooled・silo）" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#F7FCF9;strokeColor=#2E7B50;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#2E7B50;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-tenkacloud"><mxGeometry x="1840" y="60" width="880" height="346" as="geometry" /></mxCell>
                <mxCell id="stack-problem-deploy" value="ProblemDeployBackendStack" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF9F7;strokeColor=#B54736;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#B54736;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-tenkacloud"><mxGeometry x="2750" y="60" width="1200" height="1246" as="geometry" /></mxCell>
                <mxCell id="stack-challenge-payload" value="ChallengePayloadStack（任意）" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFDF8;strokeColor=#B7791F;strokeWidth=2;dashed=1;fontSize=15;fontStyle=1;fontColor=#B7791F;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-tenkacloud"><mxGeometry x="3980" y="60" width="370" height="346" as="geometry" /></mxCell>
                <mxCell id="external" value="External trust boundaries" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FBF9FF;strokeColor=#7652B6;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontColor=#7652B6;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="1"><mxGeometry x="4530" y="130" width="600" height="1610" as="geometry" /></mxCell>
                <mxCell id="competitor-account" value="Competitor AWS account" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF9F7;strokeColor=#B54736;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#B54736;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="external"><mxGeometry x="40" y="950" width="520" height="526" as="geometry" /></mxCell>
                <mxCell id="user-system-admin" value="システム管理者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="1060" y="30" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="user-operator" value="運用担当者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="1835" y="30" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="user-organizer" value="開催者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="2420" y="30" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="user-participants" value="参加者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.users" vertex="1" parent="1"><mxGeometry x="3470" y="30" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="user-author" value="問題作成者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="5270" y="30" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-runtime-config" value="AWS Lambda&#xa;BucketDeployment" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-runtime-config"><mxGeometry x="160" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cloudfront-admin" value="Amazon CloudFront&#xa;システム管理コンソール" style="fontColor=#16191F;fillColor=#8C4FFF;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudfront" vertex="1" parent="stack-admin-hosting"><mxGeometry x="225" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-admin" value="Amazon S3&#xa;管理コンソール" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-admin-hosting"><mxGeometry x="225" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="apigw-control-plane" value="Amazon API Gateway&#xa;コントロールプレーン API" style="fontColor=#16191F;fillColor=#8C4FFF;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway" vertex="1" parent="stack-control-plane"><mxGeometry x="300" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cognito-system-admin" value="Amazon Cognito&#xa;システム管理者（MFA・SAML 任意）" style="fontColor=#16191F;fillColor=#DD344C;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cognito" vertex="1" parent="stack-control-plane"><mxGeometry x="520" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="dynamodb-tenant-details" value="Amazon DynamoDB&#xa;テナント情報・登録・SAML IdP" style="fontColor=#16191F;fillColor=#C925D1;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb" vertex="1" parent="stack-control-plane"><mxGeometry x="80" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-sbt" value="AWS Lambda&#xa;テナント・IdP の管理" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-control-plane"><mxGeometry x="300" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="eventbridge-sbt" value="Amazon EventBridge&#xa;SBT のイベントバス" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.eventbridge" vertex="1" parent="stack-control-plane"><mxGeometry x="520" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="sfn-lifecycle" value="AWS Step Functions&#xa;テナントの配置・撤去" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.step_functions" vertex="1" parent="stack-bootstrap"><mxGeometry x="300" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="eventbridge-bootstrap" value="Amazon EventBridge&#xa;SBT バスのルール" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.eventbridge" vertex="1" parent="stack-bootstrap"><mxGeometry x="520" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="dynamodb-tenant-mapping" value="Amazon DynamoDB&#xa;テナントとスタックの対応表" style="fontColor=#16191F;fillColor=#C925D1;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb" vertex="1" parent="stack-bootstrap"><mxGeometry x="80" y="240" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="codebuild-lifecycle" value="AWS CodeBuild&#xa;テナント配置スクリプト" style="fontColor=#16191F;fillColor=#C925D1;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codebuild" vertex="1" parent="stack-bootstrap"><mxGeometry x="300" y="240" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-reconciler" value="AWS Lambda&#xa;状態の突き合わせ" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-bootstrap"><mxGeometry x="80" y="410" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="ssm-tier-api-keys" value="AWS Systems Manager&#xa;階層別 API キーの ID（4 種）" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.systems_manager" vertex="1" parent="stack-bootstrap"><mxGeometry x="300" y="410" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-sign-in-audit" value="AWS Lambda&#xa;サインイン監査（CloudTrail）" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-insight"><mxGeometry x="80" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="apigw-insight" value="Amazon API Gateway&#xa;閲覧・復旧 API" style="fontColor=#16191F;fillColor=#8C4FFF;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway" vertex="1" parent="stack-insight"><mxGeometry x="300" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-insight" value="AWS Lambda&#xa;閲覧・復旧" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-insight"><mxGeometry x="300" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="budgets" value="AWS Budgets&#xa;費用の通知（任意）" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.budgets" vertex="1" parent="stack-observability"><mxGeometry x="80" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cloudwatch-dashboard" value="Amazon CloudWatch&#xa;ダッシュボード" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudwatch_2" vertex="1" parent="stack-observability"><mxGeometry x="300" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-source" value="Amazon S3&#xa;ソースバケット（stack の外で作成）" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="region-tenkacloud"><mxGeometry x="1470" y="1020" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="codepipeline" value="AWS CodePipeline&#xa;プラットフォーム更新" style="fontColor=#16191F;fillColor=#C925D1;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codepipeline" vertex="1" parent="stack-pipeline"><mxGeometry x="80" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-prep-deploy" value="AWS Lambda&#xa;配置の準備" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-pipeline"><mxGeometry x="80" y="240" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="sfn-wave" value="AWS Step Functions&#xa;ウェーブ単位の更新" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.step_functions" vertex="1" parent="stack-pipeline"><mxGeometry x="320" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="codebuild-update-tenant" value="AWS CodeBuild&#xa;テナントの更新" style="fontColor=#16191F;fillColor=#C925D1;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codebuild" vertex="1" parent="stack-pipeline"><mxGeometry x="550" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-tenant-mapping" value="AWS Lambda&#xa;対応表の登録（カスタムリソース）" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-tenant-template"><mxGeometry x="80" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cloudfront-organizer" value="Amazon CloudFront&#xa;開催管理コンソール" style="fontColor=#16191F;fillColor=#8C4FFF;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudfront" vertex="1" parent="stack-tenant-template"><mxGeometry x="320" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-organizer" value="Amazon S3&#xa;開催管理コンソール" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-tenant-template"><mxGeometry x="320" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="apigw-tenant" value="Amazon API Gateway&#xa;テナント REST API" style="fontColor=#16191F;fillColor=#8C4FFF;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway" vertex="1" parent="stack-tenant-template"><mxGeometry x="540" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cognito-tenant" value="Amazon Cognito&#xa;開催者（MFA・silo は SAML 任意）" style="fontColor=#16191F;fillColor=#DD344C;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cognito" vertex="1" parent="stack-tenant-template"><mxGeometry x="760" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cloudfront-portal" value="Amazon CloudFront&#xa;参加者ポータル" style="fontColor=#16191F;fillColor=#8C4FFF;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudfront" vertex="1" parent="stack-problem-deploy"><mxGeometry x="480" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-portal" value="Amazon S3&#xa;参加者ポータル" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-problem-deploy"><mxGeometry x="480" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-portal" value="AWS Lambda&#xa;参加者 API（関数 URL）" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="680" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-coordination" value="AWS Lambda&#xa;独自競技の中継（関数 URL）" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="880" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-coordination" value="Amazon S3&#xa;独自競技のプラグイン" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-problem-deploy"><mxGeometry x="1080" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-api" value="AWS Lambda&#xa;配置・大会・アカウント API" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="280" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="dynamodb-control" value="Amazon DynamoDB&#xa;制御データ（大会・チーム・配置・監査）" style="fontColor=#16191F;fillColor=#C925D1;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb" vertex="1" parent="stack-problem-deploy"><mxGeometry x="680" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-audit" value="AWS Lambda&#xa;監査の記録・ExternalId の点検" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="1080" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="eventbridge-problem-deploy" value="Amazon EventBridge&#xa;SBT バスのルール・スケジュール" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.eventbridge" vertex="1" parent="stack-problem-deploy"><mxGeometry x="280" y="620" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-scoring" value="AWS Lambda&#xa;定期採点（GenericScoring）" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="680" y="620" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-describe-stack" value="AWS Lambda&#xa;スタックの状態確認" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="80" y="790" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="sfn-deploy" value="AWS Step Functions&#xa;配置・削除・一括配置" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.step_functions" vertex="1" parent="stack-problem-deploy"><mxGeometry x="280" y="790" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="codebuild-rollback" value="AWS CodeBuild&#xa;旧来の配置経路" style="fontColor=#16191F;fillColor=#C925D1;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codebuild" vertex="1" parent="stack-problem-deploy"><mxGeometry x="480" y="790" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cloudwatch-ops-alarms" value="Amazon CloudWatch&#xa;運用アラーム・SNS（任意）" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudwatch_2" vertex="1" parent="stack-problem-deploy"><mxGeometry x="880" y="790" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-competitor-bootstrap" value="Amazon S3&#xa;競技用アカウントの初期設定" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-problem-deploy"><mxGeometry x="1080" y="790" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="ssm-external-id" value="AWS Systems Manager&#xa;Parameter Store（ExternalId）" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.systems_manager" vertex="1" parent="stack-problem-deploy"><mxGeometry x="80" y="960" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-cfn-deploy" value="AWS Lambda&#xa;スタック操作（CfnDeploy）" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="280" y="960" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-bulk-plan" value="Amazon S3&#xa;一括配置の計画" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-problem-deploy"><mxGeometry x="80" y="1130" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cloudwatch-deploy-logs" value="Amazon CloudWatch&#xa;配置ジョブのログ（参加者 API が読む）" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudwatch_2" vertex="1" parent="stack-problem-deploy"><mxGeometry x="480" y="1130" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="iam-github-oidc" value="AWS IAM&#xa;GitHub OIDC 用ロール" style="fontColor=#16191F;fillColor=#DD344C;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.identity_and_access_management" vertex="1" parent="stack-challenge-payload"><mxGeometry x="250" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-challenge-payload" value="Amazon S3&#xa;非公開の問題データ" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-challenge-payload"><mxGeometry x="250" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="idp" value="社内・テナントの IdP&#xa;（SAML 2.0、任意）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.corporate_data_center" vertex="1" parent="external"><mxGeometry x="120" y="300" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="turso" value="Turso（libSQL）&#xa;制御データの代替（任意）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.traditional_server" vertex="1" parent="external"><mxGeometry x="120" y="470" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="non-aws-providers" value="AWS 以外のクラウド&#xa;Azure・GCP・さくら（画面は既定で非表示）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.traditional_server" vertex="1" parent="external"><mxGeometry x="120" y="640" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="github-actions" value="GitHub Actions&#xa;（該当ワークフローは今なし）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.traditional_server" vertex="1" parent="external"><mxGeometry x="360" y="810" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="iam-competitor" value="AWS IAM&#xa;TenkaCloud-CompetitorDeploy-Role" style="fontColor=#16191F;fillColor=#DD344C;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.identity_and_access_management" vertex="1" parent="competitor-account"><mxGeometry x="100" y="240" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cfn-problem" value="AWS CloudFormation&#xa;問題のスタック（チーム×問題）" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudformation" vertex="1" parent="competitor-account"><mxGeometry x="340" y="240" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="problem-resources" value="問題のリソース&#xa;（テンプレートで定義）" style="fontColor=#16191F;fillColor=#232F3E;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.general" vertex="1" parent="competitor-account"><mxGeometry x="340" y="410" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="edge-user-system-admin-to-cloudfront-admin" value="画面（HTTPS）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-system-admin" target="cloudfront-admin"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="630" y="60" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-user-system-admin-to-apigw-control-plane" value="API（JWT）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=24;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-system-admin" target="apigw-control-plane"><mxGeometry x="0.454" relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-user-system-admin-to-apigw-insight" value="閲覧・復旧 API（JWT）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-system-admin" target="apigw-insight"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1760" y="60" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-user-operator-to-cloudwatch-dashboard" value="監視・復旧" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=24;exitPerimeter=0;entryX=1;entryY=0.5;" edge="1" parent="1" source="user-operator" target="cloudwatch-dashboard"><mxGeometry x="0.7422" relative="1" as="geometry"><Array as="points"><mxPoint x="1865" y="1010" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-user-organizer-to-cloudfront-organizer" value="画面（HTTPS）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-organizer" target="cloudfront-organizer"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="2230" y="60" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-user-organizer-to-apigw-tenant" value="API（JWT）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=24;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-organizer" target="apigw-tenant"><mxGeometry x="0.454" relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-user-participants-to-cloudfront-portal" value="画面（HTTPS）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-participants" target="cloudfront-portal"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="3300" y="60" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-user-participants-to-lambda-portal" value="API（チームのキー）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=24;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-participants" target="lambda-portal"><mxGeometry x="0.454" relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-user-participants-to-lambda-coordination" value="独自競技の操作" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=1;exitY=0.75;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-participants" target="lambda-coordination"><mxGeometry x="0.6211" relative="1" as="geometry"><Array as="points"><mxPoint x="3700" y="75" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-user-participants-to-problem-resources" value="問題への解答操作" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.25;entryX=1;entryY=0.5;" edge="1" parent="1" source="user-participants" target="problem-resources"><mxGeometry x="-0.7" relative="1" as="geometry"><Array as="points"><mxPoint x="5190" y="45" /><mxPoint x="5190" y="1520" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-user-author-to-github-actions" value="公開" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=24;exitPerimeter=0;entryX=1;entryY=0.5;" edge="1" parent="1" source="user-author" target="github-actions"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="5300" y="970" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-cloudfront-admin-to-s3-admin" value="静的ファイル（OAI）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="cloudfront-admin" target="s3-admin"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-runtime-config-to-cloudfront-admin" value="キャッシュを無効化" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-runtime-config" target="cloudfront-admin"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-runtime-config-to-s3-admin" value="runtime-config.json を配置" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-runtime-config" target="s3-admin"><mxGeometry x="0.3665" relative="1" as="geometry"><Array as="points"><mxPoint x="250" y="620" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-apigw-control-plane-to-cognito-system-admin" value="JWT を検証" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="apigw-control-plane" target="cognito-system-admin"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-apigw-control-plane-to-lambda-sbt" value="テナントの操作" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="apigw-control-plane" target="lambda-sbt"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-sbt-to-dynamodb-tenant-details" value="読み書き" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="lambda-sbt" target="dynamodb-tenant-details"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-sbt-to-eventbridge-sbt" value="オンボーディング" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-sbt" target="eventbridge-sbt"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-eventbridge-sbt-to-eventbridge-bootstrap" value="同じバス" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="eventbridge-sbt" target="eventbridge-bootstrap"><mxGeometry x="-0.8" relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-eventbridge-bootstrap-to-sfn-lifecycle" value="ルールの宛先" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="eventbridge-bootstrap" target="sfn-lifecycle"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-sfn-lifecycle-to-codebuild-lifecycle" value="RUN_JOB・完了待ち" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="sfn-lifecycle" target="codebuild-lifecycle"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-codebuild-lifecycle-to-dynamodb-tenant-mapping" value="対応表を読む（撤去時）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="codebuild-lifecycle" target="dynamodb-tenant-mapping"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-codebuild-lifecycle-to-stack-tenant-template" value="silo は作成・pooled は再利用" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0.2500;entryY=1;entryPerimeter=0;" edge="1" parent="1" source="codebuild-lifecycle" target="stack-tenant-template"><mxGeometry x="-0.4" relative="1" as="geometry"><Array as="points"><mxPoint x="2100" y="1180" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-reconciler-to-dynamodb-tenant-mapping" value="2 分ごとに突き合わせ" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=0;entryX=0.5;entryY=1;entryDy=42;entryPerimeter=0;" edge="1" parent="1" source="lambda-reconciler" target="dynamodb-tenant-mapping"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-tenant-mapping-to-dynamodb-tenant-mapping" value="対応表に登録" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-tenant-mapping" target="dynamodb-tenant-mapping"><mxGeometry x="-0.8664" relative="1" as="geometry"><Array as="points"><mxPoint x="1990" y="893" /><mxPoint x="740" y="893" /><mxPoint x="740" y="1180" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-apigw-insight-to-lambda-insight" value="呼び出し" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="apigw-insight" target="lambda-insight"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-s3-source-to-codepipeline" value="ソース" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="s3-source" target="codepipeline"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-codepipeline-to-lambda-prep-deploy" value="配置の準備" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="codepipeline" target="lambda-prep-deploy"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-codepipeline-to-sfn-wave" value="ウェーブを実行" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="codepipeline" target="sfn-wave"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-sfn-wave-to-codebuild-update-tenant" value="テナントごとに更新" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="sfn-wave" target="codebuild-update-tenant"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-codebuild-update-tenant-to-stack-tenant-template" value="スタックを更新" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=0;entryX=0.3977;entryY=1;entryPerimeter=0;" edge="1" parent="1" source="codebuild-update-tenant" target="stack-tenant-template"><mxGeometry x="0.4" relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-cloudfront-organizer-to-s3-organizer" value="静的ファイル（OAI）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="cloudfront-organizer" target="s3-organizer"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-apigw-tenant-to-cognito-tenant" value="JWT を検証" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="apigw-tenant" target="cognito-tenant"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-apigw-tenant-to-lambda-api" value="Lambda 統合（スタックをまたぐ）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="apigw-tenant" target="lambda-api"><mxGeometry x="-0.2022" relative="1" as="geometry"><Array as="points"><mxPoint x="2450" y="790" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-idp-to-cognito-system-admin" value="SAML アサーション" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0;exitY=0.25;entryX=0.5;entryY=0;" edge="1" parent="1" source="idp" target="cognito-system-admin"><mxGeometry x="0.9399" relative="1" as="geometry"><Array as="points"><mxPoint x="4515" y="445" /><mxPoint x="4515" y="190" /><mxPoint x="1310" y="190" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-idp-to-cognito-tenant" value="SAML（silo のみ）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0;exitY=0.75;entryX=0.5;entryY=0;" edge="1" parent="1" source="idp" target="cognito-tenant"><mxGeometry x="0.908" relative="1" as="geometry"><Array as="points"><mxPoint x="4500" y="475" /><mxPoint x="4500" y="214" /><mxPoint x="2670" y="214" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-api-to-turso" value="libSQL（Turso 構成のとき）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.25;exitY=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-api" target="turso"><mxGeometry x="0.0379" relative="1" as="geometry"><Array as="points"><mxPoint x="3085" y="238" /><mxPoint x="4480" y="238" /><mxPoint x="4480" y="630" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-api-to-non-aws-providers" value="AWS 以外への配置" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.75;exitY=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-api" target="non-aws-providers"><mxGeometry x="0.1929" relative="1" as="geometry"><Array as="points"><mxPoint x="3115" y="262" /><mxPoint x="4465" y="262" /><mxPoint x="4465" y="800" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-github-actions-to-iam-github-oidc" value="OIDC で引き受け" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="github-actions" target="iam-github-oidc"><mxGeometry x="0.6946" relative="1" as="geometry"><Array as="points"><mxPoint x="4445" y="970" /><mxPoint x="4445" y="286" /><mxPoint x="4300" y="286" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-iam-github-oidc-to-s3-challenge-payload" value="PutObject のみ" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="iam-github-oidc" target="s3-challenge-payload"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-cloudfront-portal-to-s3-portal" value="静的ファイル（OAI）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="cloudfront-portal" target="s3-portal"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-portal-to-dynamodb-control" value="読み書き" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="lambda-portal" target="dynamodb-control"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-coordination-to-s3-coordination" value="プラグインを読む" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-coordination" target="s3-coordination"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-api-to-dynamodb-control" value="読み書き" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-api" target="dynamodb-control"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-audit-to-dynamodb-control" value="監査ログ" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="lambda-audit" target="dynamodb-control"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-api-to-eventbridge-problem-deploy" value="Deploy*Requested" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="lambda-api" target="eventbridge-problem-deploy"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-eventbridge-problem-deploy-to-sfn-deploy" value="ルールの宛先" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="eventbridge-problem-deploy" target="sfn-deploy"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-eventbridge-problem-deploy-to-lambda-scoring" value="1 分ごとに起動" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="eventbridge-problem-deploy" target="lambda-scoring"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-scoring-to-dynamodb-control" value="得点を記録" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=0;entryX=0.5;entryY=1;entryDy=42;entryPerimeter=0;" edge="1" parent="1" source="lambda-scoring" target="dynamodb-control"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-scoring-to-lambda-coordination" value="tick を委譲" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=1;exitY=0.5;entryX=0.5;entryY=1;entryDy=42;entryPerimeter=0;" edge="1" parent="1" source="lambda-scoring" target="lambda-coordination"><mxGeometry x="-0.3" relative="1" as="geometry"><Array as="points"><mxPoint x="3700" y="1010" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-scoring-to-problem-resources" value="HTTP(S) で確認" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.25;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-scoring" target="problem-resources"><mxGeometry x="0.2" relative="1" as="geometry"><Array as="points"><mxPoint x="3485" y="1520" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-scoring-to-cloudwatch-ops-alarms" value="エラー・停止" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.75;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-scoring" target="cloudwatch-ops-alarms"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="3515" y="1180" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-sfn-deploy-to-lambda-cfn-deploy" value="スタック操作" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="sfn-deploy" target="lambda-cfn-deploy"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-sfn-deploy-to-lambda-describe-stack" value="状態を確認" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="sfn-deploy" target="lambda-describe-stack"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-sfn-deploy-to-codebuild-rollback" value="Lambda 経路を切ったとき" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="sfn-deploy" target="codebuild-rollback"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-cfn-deploy-to-ssm-external-id" value="ExternalId を取得" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="lambda-cfn-deploy" target="ssm-external-id"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-cfn-deploy-to-iam-competitor" value="AssumeRole（ExternalId 必須）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-cfn-deploy" target="iam-competitor"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-cfn-deploy-to-s3-source" value="テンプレートと metadata を読む" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.25;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=1;entryDy=42;entryPerimeter=0;" edge="1" parent="1" source="lambda-cfn-deploy" target="s3-source"><mxGeometry x="0.002" relative="1" as="geometry"><Array as="points"><mxPoint x="3085" y="1670" /><mxPoint x="1540" y="1670" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-cfn-deploy-to-cloudwatch-deploy-logs" value="進捗ログ" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.75;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-cfn-deploy" target="cloudwatch-deploy-logs"><mxGeometry x="0.4" relative="1" as="geometry"><Array as="points"><mxPoint x="3115" y="1520" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-s3-competitor-bootstrap-to-iam-competitor" value="初期設定テンプレート（1 回だけ）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="s3-competitor-bootstrap" target="iam-competitor"><mxGeometry x="-0.3" relative="1" as="geometry"><Array as="points"><mxPoint x="4700" y="1180" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-iam-competitor-to-cfn-problem" value="CloudFormation API" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="iam-competitor" target="cfn-problem"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-cfn-problem-to-problem-resources" value="作成・更新・削除" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="cfn-problem" target="problem-resources"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
            </root>
        </mxGraphModel>
    </diagram>
    <diagram id="lite-physical" name="02 Liteモード・AWS物理構成">
        <mxGraphModel adaptiveColors="auto" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="0" page="1" pageScale="1" pageWidth="3120" pageHeight="1940" math="0" shadow="0">
            <root>
                <mxCell id="0" />
                <mxCell id="1" parent="0" />
                <mxCell id="aws-lite" value="AWS Cloud" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#232F3E;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontColor=#232F3E;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="1"><mxGeometry x="20" y="130" width="2200" height="1710" as="geometry" /></mxCell>
                <mxCell id="region-lite" value="AWS Region — Lite deployment account" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#147EBA;strokeWidth=2;dashed=1;fontSize=17;fontStyle=1;fontColor=#147EBA;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="aws-lite"><mxGeometry x="20" y="170" width="2160" height="1520" as="geometry" /></mxCell>
                <mxCell id="stack-lite" value="TenkaCloudLiteStack" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#F7FCF9;strokeColor=#2E7B50;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#2E7B50;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-lite"><mxGeometry x="20" y="60" width="890" height="516" as="geometry" /></mxCell>
                <mxCell id="stack-problem-deploy" value="ProblemDeployBackendStack" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF9F7;strokeColor=#B54736;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#B54736;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="region-lite"><mxGeometry x="940" y="60" width="1200" height="1246" as="geometry" /></mxCell>
                <mxCell id="external" value="External boundaries" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FBF9FF;strokeColor=#7652B6;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontColor=#7652B6;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="1"><mxGeometry x="2320" y="130" width="600" height="1710" as="geometry" /></mxCell>
                <mxCell id="competitor-account" value="Competitor AWS account" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF9F7;strokeColor=#B54736;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#B54736;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="external"><mxGeometry x="40" y="950" width="520" height="526" as="geometry" /></mxCell>
                <mxCell id="user-organizer" value="開催者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="610" y="30" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="user-participants" value="参加者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.users" vertex="1" parent="1"><mxGeometry x="1660" y="30" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-pre-token" value="AWS Lambda&#xa;管理者 claims の追加" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-lite"><mxGeometry x="110" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cognito-tenant" value="Amazon Cognito&#xa;開催者（tenant=local）" style="fontColor=#16191F;fillColor=#DD344C;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cognito" vertex="1" parent="stack-lite"><mxGeometry x="330" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="apigw-tenant" value="Amazon API Gateway&#xa;テナント REST API" style="fontColor=#16191F;fillColor=#8C4FFF;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.api_gateway" vertex="1" parent="stack-lite"><mxGeometry x="550" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cloudfront-organizer" value="Amazon CloudFront&#xa;開催管理コンソール" style="fontColor=#16191F;fillColor=#8C4FFF;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudfront" vertex="1" parent="stack-lite"><mxGeometry x="770" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-organizer" value="Amazon S3&#xa;開催管理コンソール" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-lite"><mxGeometry x="770" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="dynamodb-saml" value="Amazon DynamoDB&#xa;SamlIdps" style="fontColor=#16191F;fillColor=#C925D1;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb" vertex="1" parent="stack-lite"><mxGeometry x="110" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-saml" value="AWS Lambda&#xa;SAML IdP の管理" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-lite"><mxGeometry x="330" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cloudfront-portal" value="Amazon CloudFront&#xa;参加者ポータル" style="fontColor=#16191F;fillColor=#8C4FFF;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudfront" vertex="1" parent="stack-problem-deploy"><mxGeometry x="480" y="70" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-portal" value="Amazon S3&#xa;参加者ポータル" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-problem-deploy"><mxGeometry x="480" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-portal" value="AWS Lambda&#xa;参加者 API（関数 URL）" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="680" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-coordination" value="AWS Lambda&#xa;独自競技の中継（関数 URL）" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="880" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-coordination" value="Amazon S3&#xa;独自競技のプラグイン" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-problem-deploy"><mxGeometry x="1080" y="230" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-api" value="AWS Lambda&#xa;配置・大会・アカウント API" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="280" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="dynamodb-control" value="Amazon DynamoDB&#xa;制御データ（7 テーブル）" style="fontColor=#16191F;fillColor=#C925D1;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.dynamodb" vertex="1" parent="stack-problem-deploy"><mxGeometry x="680" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-audit" value="AWS Lambda&#xa;監査の記録・ExternalId の点検" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="1080" y="400" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="eventbridge-problem-deploy" value="Amazon EventBridge&#xa;この stack のイベントバス・スケジュール" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.eventbridge" vertex="1" parent="stack-problem-deploy"><mxGeometry x="280" y="620" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-scoring" value="AWS Lambda&#xa;定期採点（GenericScoring）" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="680" y="620" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-describe-stack" value="AWS Lambda&#xa;スタックの状態確認" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="80" y="790" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="sfn-deploy" value="AWS Step Functions&#xa;配置・削除・一括配置" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.step_functions" vertex="1" parent="stack-problem-deploy"><mxGeometry x="280" y="790" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="codebuild-rollback" value="AWS CodeBuild&#xa;旧来の配置経路" style="fontColor=#16191F;fillColor=#C925D1;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.codebuild" vertex="1" parent="stack-problem-deploy"><mxGeometry x="480" y="790" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cloudwatch-ops-alarms" value="Amazon CloudWatch&#xa;運用アラーム・SNS（任意）" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudwatch_2" vertex="1" parent="stack-problem-deploy"><mxGeometry x="880" y="790" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-competitor-bootstrap" value="Amazon S3&#xa;競技用アカウントの初期設定" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-problem-deploy"><mxGeometry x="1080" y="790" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="ssm-external-id" value="AWS Systems Manager&#xa;Parameter Store（ExternalId）" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.systems_manager" vertex="1" parent="stack-problem-deploy"><mxGeometry x="80" y="960" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lambda-cfn-deploy" value="AWS Lambda&#xa;スタック操作（CfnDeploy）" style="fontColor=#16191F;fillColor=#ED7100;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.lambda" vertex="1" parent="stack-problem-deploy"><mxGeometry x="280" y="960" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-bulk-plan" value="Amazon S3&#xa;一括配置の計画" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="stack-problem-deploy"><mxGeometry x="80" y="1130" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cloudwatch-deploy-logs" value="Amazon CloudWatch&#xa;配置ジョブのログ（参加者 API が読む）" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudwatch_2" vertex="1" parent="stack-problem-deploy"><mxGeometry x="480" y="1130" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="s3-source" value="Amazon S3&#xa;ソースバケット（problems/・pack-problems/）" style="fontColor=#16191F;fillColor=#7AA116;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.s3" vertex="1" parent="region-lite"><mxGeometry x="1220" y="1360" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="idp" value="テナントの IdP&#xa;（SAML 2.0、任意）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.corporate_data_center" vertex="1" parent="external"><mxGeometry x="120" y="300" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="turso" value="Turso（libSQL）&#xa;制御データの代替（任意）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.traditional_server" vertex="1" parent="external"><mxGeometry x="120" y="470" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="non-aws-providers" value="AWS 以外のクラウド&#xa;Azure・GCP・さくら（画面は既定で非表示）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.traditional_server" vertex="1" parent="external"><mxGeometry x="120" y="640" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="iam-competitor" value="AWS IAM&#xa;TenkaCloud-CompetitorDeploy-Role" style="fontColor=#16191F;fillColor=#DD344C;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.identity_and_access_management" vertex="1" parent="competitor-account"><mxGeometry x="100" y="240" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="cfn-problem" value="AWS CloudFormation&#xa;問題のスタック（チーム×問題）" style="fontColor=#16191F;fillColor=#E7157B;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.cloudformation" vertex="1" parent="competitor-account"><mxGeometry x="340" y="240" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="problem-resources" value="問題のリソース&#xa;（テンプレートで定義）" style="fontColor=#16191F;fillColor=#232F3E;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.general" vertex="1" parent="competitor-account"><mxGeometry x="340" y="410" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="edge-user-organizer-to-cloudfront-organizer" value="画面（HTTPS）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=1;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-organizer" target="cloudfront-organizer"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="860" y="60" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-user-organizer-to-apigw-tenant" value="API（JWT）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=24;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-organizer" target="apigw-tenant"><mxGeometry x="0.454" relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-user-participants-to-cloudfront-portal" value="画面（HTTPS）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-participants" target="cloudfront-portal"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1490" y="60" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-user-participants-to-lambda-portal" value="API（チームのキー）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=24;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-participants" target="lambda-portal"><mxGeometry x="0.454" relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-user-participants-to-lambda-coordination" value="独自競技の操作" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=1;exitY=0.75;entryX=0.5;entryY=0;" edge="1" parent="1" source="user-participants" target="lambda-coordination"><mxGeometry x="0.6211" relative="1" as="geometry"><Array as="points"><mxPoint x="1890" y="75" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-user-participants-to-problem-resources" value="問題への解答操作" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.25;entryX=1;entryY=0.5;" edge="1" parent="1" source="user-participants" target="problem-resources"><mxGeometry x="-0.7" relative="1" as="geometry"><Array as="points"><mxPoint x="2980" y="45" /><mxPoint x="2980" y="1520" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-cloudfront-organizer-to-s3-organizer" value="静的ファイル（OAI）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="cloudfront-organizer" target="s3-organizer"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-apigw-tenant-to-cognito-tenant" value="JWT を検証" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="apigw-tenant" target="cognito-tenant"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-cognito-tenant-to-lambda-pre-token" value="claims を追加" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="cognito-tenant" target="lambda-pre-token"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-apigw-tenant-to-lambda-saml" value="/tenant/idp" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.25;exitY=1;exitDy=38;exitPerimeter=0;entryX=1;entryY=0.5;" edge="1" parent="1" source="apigw-tenant" target="lambda-saml"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="625" y="790" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-saml-to-cognito-tenant" value="IdP を登録" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=0;entryX=0.5;entryY=1;entryDy=42;entryPerimeter=0;" edge="1" parent="1" source="lambda-saml" target="cognito-tenant"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-saml-to-dynamodb-saml" value="読み書き" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="lambda-saml" target="dynamodb-saml"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-apigw-tenant-to-lambda-api" value="Lambda 統合（スタックをまたぐ）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.75;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="apigw-tenant" target="lambda-api"><mxGeometry x="-0.3692" relative="1" as="geometry"><Array as="points"><mxPoint x="655" y="790" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-idp-to-cognito-tenant" value="SAML アサーション" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="idp" target="cognito-tenant"><mxGeometry x="0.9108" relative="1" as="geometry"><Array as="points"><mxPoint x="2305" y="460" /><mxPoint x="2305" y="190" /><mxPoint x="420" y="190" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-api-to-turso" value="libSQL（Turso 構成のとき）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.25;exitY=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-api" target="turso"><mxGeometry x="0.0832" relative="1" as="geometry"><Array as="points"><mxPoint x="1275" y="214" /><mxPoint x="2285" y="214" /><mxPoint x="2285" y="630" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-api-to-non-aws-providers" value="AWS 以外への配置" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.75;exitY=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-api" target="non-aws-providers"><mxGeometry x="0.1194" relative="1" as="geometry"><Array as="points"><mxPoint x="1305" y="238" /><mxPoint x="2265" y="238" /><mxPoint x="2265" y="800" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-cloudfront-portal-to-s3-portal" value="静的ファイル（OAI）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="cloudfront-portal" target="s3-portal"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-portal-to-dynamodb-control" value="読み書き" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="lambda-portal" target="dynamodb-control"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-coordination-to-s3-coordination" value="プラグインを読む" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-coordination" target="s3-coordination"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-api-to-dynamodb-control" value="読み書き" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-api" target="dynamodb-control"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-audit-to-dynamodb-control" value="監査ログ" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="lambda-audit" target="dynamodb-control"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-api-to-eventbridge-problem-deploy" value="Deploy*Requested" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="lambda-api" target="eventbridge-problem-deploy"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-eventbridge-problem-deploy-to-sfn-deploy" value="ルールの宛先" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="eventbridge-problem-deploy" target="sfn-deploy"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-eventbridge-problem-deploy-to-lambda-scoring" value="1 分ごとに起動" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="eventbridge-problem-deploy" target="lambda-scoring"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-scoring-to-dynamodb-control" value="得点を記録" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=0;entryX=0.5;entryY=1;entryDy=42;entryPerimeter=0;" edge="1" parent="1" source="lambda-scoring" target="dynamodb-control"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-scoring-to-lambda-coordination" value="tick を委譲" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=1;exitY=0.5;entryX=0.5;entryY=1;entryDy=42;entryPerimeter=0;" edge="1" parent="1" source="lambda-scoring" target="lambda-coordination"><mxGeometry x="-0.3" relative="1" as="geometry"><Array as="points"><mxPoint x="1890" y="1010" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-scoring-to-problem-resources" value="HTTP(S) で確認" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.25;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-scoring" target="problem-resources"><mxGeometry x="0.2" relative="1" as="geometry"><Array as="points"><mxPoint x="1675" y="1520" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-lambda-scoring-to-cloudwatch-ops-alarms" value="エラー・停止" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.75;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-scoring" target="cloudwatch-ops-alarms"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1705" y="1180" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-sfn-deploy-to-lambda-cfn-deploy" value="スタック操作" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="sfn-deploy" target="lambda-cfn-deploy"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-sfn-deploy-to-lambda-describe-stack" value="状態を確認" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="sfn-deploy" target="lambda-describe-stack"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-sfn-deploy-to-codebuild-rollback" value="Lambda 経路を切ったとき" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="sfn-deploy" target="codebuild-rollback"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-cfn-deploy-to-ssm-external-id" value="ExternalId を取得" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="lambda-cfn-deploy" target="ssm-external-id"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-cfn-deploy-to-iam-competitor" value="AssumeRole（ExternalId 必須）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-cfn-deploy" target="iam-competitor"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-cfn-deploy-to-s3-source" value="テンプレートと metadata を読む" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.25;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.25;entryY=0;" edge="1" parent="1" source="lambda-cfn-deploy" target="s3-source"><mxGeometry x="0.84" relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lambda-cfn-deploy-to-cloudwatch-deploy-logs" value="進捗ログ" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.75;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="lambda-cfn-deploy" target="cloudwatch-deploy-logs"><mxGeometry x="0.4" relative="1" as="geometry"><Array as="points"><mxPoint x="1305" y="1520" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-s3-competitor-bootstrap-to-iam-competitor" value="初期設定テンプレート（1 回だけ）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="s3-competitor-bootstrap" target="iam-competitor"><mxGeometry x="-0.3" relative="1" as="geometry"><Array as="points"><mxPoint x="2490" y="1180" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-iam-competitor-to-cfn-problem" value="CloudFormation API" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="iam-competitor" target="cfn-problem"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-cfn-problem-to-problem-resources" value="作成・更新・削除" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="cfn-problem" target="problem-resources"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
            </root>
        </mxGraphModel>
    </diagram>
    <diagram id="local-runtime" name="03 Local play・実装ランタイム構成">
        <mxGraphModel adaptiveColors="auto" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="0" page="1" pageScale="1" pageWidth="3080" pageHeight="1056" math="0" shadow="0">
            <root>
                <mxCell id="0" />
                <mxCell id="1" parent="0" />
                <mxCell id="local-play" value="make local（参加者の練習・Docker だけ）" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#F7FCF9;strokeColor=#2E7B50;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontColor=#2E7B50;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="1"><mxGeometry x="20" y="130" width="1860" height="696" as="geometry" /></mxCell>
                <mxCell id="host" value="Host OS / active Docker context" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#405A78;strokeWidth=2;dashed=1;fontSize=15;fontStyle=1;fontColor=#405A78;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="local-play"><mxGeometry x="20" y="60" width="1820" height="616" as="geometry" /></mxCell>
                <mxCell id="tenkacloud-local" value="tenkacloud-local（uid 1000）" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FAFBFC;strokeColor=#405A78;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#405A78;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="host"><mxGeometry x="240" y="60" width="860" height="536" as="geometry" /></mxCell>
                <mxCell id="problem-compose" value="問題の Compose（tc-local-&lt;問題 ID&gt;）" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFF9F7;strokeColor=#B54736;strokeWidth=2;dashed=0;fontSize=15;fontStyle=1;fontColor=#B54736;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="host"><mxGeometry x="1360" y="230" width="440" height="212" as="geometry" /></mxCell>
                <mxCell id="local-dev" value="make local-dev（開発者）" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FBF9FF;strokeColor=#7652B6;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontColor=#7652B6;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="1"><mxGeometry x="1920" y="130" width="960" height="826" as="geometry" /></mxCell>
                <mxCell id="browser" value="参加者のブラウザ" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.client" vertex="1" parent="1"><mxGeometry x="560" y="30" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="data-permissions" value="local-data-permissions&#xa;最初に 1 回・uid 0" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.container_1" vertex="1" parent="host"><mxGeometry x="80" y="140" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="sqlite" value="SQLite&#xa;/data（named volume）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.generic_database" vertex="1" parent="tenkacloud-local"><mxGeometry x="60" y="80" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="http" value="Bun HTTP サーバー&#xa;ポータル・API（127.0.0.1:5175）&#xa;読み取り専用 rootfs・host network" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.traditional_server" vertex="1" parent="tenkacloud-local"><mxGeometry x="280" y="80" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="scoring" value="採点&#xa;/verify の結果で加点・履歴" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.gear" vertex="1" parent="tenkacloud-local"><mxGeometry x="500" y="80" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="problems" value="problems/（読み取り専用）&#xa;verify・multi-verify の Compose 問題" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.documents" vertex="1" parent="tenkacloud-local"><mxGeometry x="60" y="250" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="lifecycle" value="ProblemLifecycle&#xa;起動・停止（同時 3 件・LRU）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.gear" vertex="1" parent="tenkacloud-local"><mxGeometry x="280" y="250" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="terminal" value="Terminal WebSocket&#xa;compose exec（1 問 4 セッション）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.traditional_server" vertex="1" parent="tenkacloud-local"><mxGeometry x="720" y="250" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="runner" value="ContainerRunner&#xa;docker CLI・Compose v2" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.gear" vertex="1" parent="tenkacloud-local"><mxGeometry x="280" y="420" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="docker-sock" value="docker.sock&#xa;（:ro でも root 相当）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.disk" vertex="1" parent="host"><mxGeometry x="1190" y="480" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="problem-container" value="問題コンテナ&#xa;挑戦用ポート・POST /verify&#xa;秘密値は配置先の鍵から導出" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.container_1" vertex="1" parent="problem-compose"><mxGeometry x="290" y="80" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="developer" value="開発者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="2210" y="30" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="vite" value="Vite&#xa;ポータル（127.0.0.1:5175）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.traditional_server" vertex="1" parent="local-dev"><mxGeometry x="290" y="200" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="api" value="tenkacloud local&#xa;API（空きポート）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.traditional_server" vertex="1" parent="local-dev"><mxGeometry x="510" y="200" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="store" value="SQLite（.tenkacloud/local）&#xa;または Turso" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.generic_database" vertex="1" parent="local-dev"><mxGeometry x="730" y="200" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="docker-host" value="ホストの docker CLI&#xa;tc-local-* の Compose 問題" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.container_1" vertex="1" parent="local-dev"><mxGeometry x="290" y="370" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="classifier" value="ランタイムの振り分け&#xa;黙って別の実行方法に変えない" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.gear" vertex="1" parent="local-dev"><mxGeometry x="510" y="370" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="records" value="非公開のセッション記録&#xa;atomic write・復旧で突き合わせ" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.document" vertex="1" parent="local-dev"><mxGeometry x="290" y="540" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="sim-runtime" value="SimulatorLocalRuntime&#xa;TENKACLOUD_LOCAL_SIMULATOR=1" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.gear" vertex="1" parent="local-dev"><mxGeometry x="510" y="540" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="simulator" value="TenkaCloud Simulator&#xa;GHCR・digest 固定&#xa;protocol 2026-07-11" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.container_2" vertex="1" parent="local-dev"><mxGeometry x="730" y="540" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="listeners" value="loopback のデータプレーン&#xa;参加者向けの出力だけ" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.traditional_server" vertex="1" parent="local-dev"><mxGeometry x="510" y="710" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="edge-browser-to-http" value="http://127.0.0.1:5175" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=24;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="browser" target="http"><mxGeometry x="0.9" relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-browser-to-terminal" value="WebSocket（一回限りのチケット）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.75;entryX=0.5;entryY=0;" edge="1" parent="1" source="browser" target="terminal"><mxGeometry x="-0.509" relative="1" as="geometry"><Array as="points"><mxPoint x="1030" y="75" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-browser-to-problem-container" value="挑戦用ポート（127.0.0.1）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.25;entryX=0.75;entryY=0;" edge="1" parent="1" source="browser" target="problem-container"><mxGeometry x="-0.1478" relative="1" as="geometry"><Array as="points"><mxPoint x="1735" y="45" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-data-permissions-to-sqlite" value="所有者を調整" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="data-permissions" target="sqlite"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-http-to-sqlite" value="読み書き" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.25;entryX=1;entryY=0.25;" edge="1" parent="1" source="http" target="sqlite"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-http-to-problems" value="カタログ" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.75;entryX=1;entryY=0.5;" edge="1" parent="1" source="http" target="problems"><mxGeometry x="-0.6508" relative="1" as="geometry"><Array as="points"><mxPoint x="450" y="375" /><mxPoint x="450" y="530" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-http-to-scoring" value="解答を渡す" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="http" target="scoring"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-http-to-lifecycle" value="起動・停止" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=52;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="http" target="lifecycle"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-lifecycle-to-runner" value="docker compose" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="lifecycle" target="runner"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-runner-to-docker-sock" value="up・down" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.75;entryX=0;entryY=0.75;" edge="1" parent="1" source="runner" target="docker-sock"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-terminal-to-docker-sock" value="compose exec" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0;entryY=0.25;" edge="1" parent="1" source="terminal" target="docker-sock"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1030" y="685" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-docker-sock-to-problem-container" value="起動・停止・exec" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0.5;entryY=1;entryDy=56;entryPerimeter=0;" edge="1" parent="1" source="docker-sock" target="problem-container"><mxGeometry x="-0.1634" relative="1" as="geometry"><Array as="points"><mxPoint x="1720" y="700" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-scoring-to-problem-container" value="POST /verify（loopback）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0.25;entryY=0;" edge="1" parent="1" source="scoring" target="problem-container"><mxGeometry x="-0.1393" relative="1" as="geometry"><Array as="points"><mxPoint x="1705" y="360" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-developer-to-vite" value="画面" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=24;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="developer" target="vite"><mxGeometry x="0.9" relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-developer-to-api" value="API" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=1;exitY=0.5;entryX=0.5;entryY=0;" edge="1" parent="1" source="developer" target="api"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="2460" y="60" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-api-to-store" value="読み書き" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="api" target="store"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-api-to-classifier" value="カタログ" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="api" target="classifier"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-classifier-to-docker-host" value="Compose 問題" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="classifier" target="docker-host"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-classifier-to-sim-runtime" value="cloud・Composite 問題" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="classifier" target="sim-runtime"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-sim-runtime-to-simulator" value="deploy・delete（HTTP）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="sim-runtime" target="simulator"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-sim-runtime-to-records" value="記録" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="sim-runtime" target="records"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-sim-runtime-to-listeners" value="出力を公開" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=0.5;exitY=1;exitDy=38;exitPerimeter=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="sim-runtime" target="listeners"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
            </root>
        </mxGraphModel>
    </diagram>
    <diagram id="use-cases" name="04 ユースケース図">
        <mxGraphModel adaptiveColors="auto" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="0" page="1" pageScale="1" pageWidth="2310" pageHeight="1736" math="0" shadow="0">
            <root>
                <mxCell id="0" />
                <mxCell id="1" parent="0" />
                <mxCell id="tenkacloud" value="TenkaCloud" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#232F3E;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontColor=#232F3E;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="1"><mxGeometry x="330" y="130" width="1780" height="1506" as="geometry" /></mxCell>
                <mxCell id="actor-system-admin" value="システム管理者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="140" y="290" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="actor-organizer" value="開催者&#xa;（TenantAdmin・TenantOperator）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="140" y="740" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="actor-participant" value="参加者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.users" vertex="1" parent="1"><mxGeometry x="140" y="1325" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="actor-author" value="問題作成者（CI）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="2230" y="335" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="actor-owner" value="競技用アカウントの所有者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="2230" y="650" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="actor-operator" value="運用者&#xa;（AWS 権限で make を実行）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="2230" y="875" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="actor-machine" value="外部ツール&#xa;（tcloud CLI）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.client" vertex="1" parent="1"><mxGeometry x="2230" y="1100" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="uc-tenant" value="テナントを作成・削除する（停止は表示だけ）&#xa;SaaS" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="68" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-insight" value="全テナントの状態・監査・ジョブ・費用を見る&#xa;SaaS（Admin Insight）" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="158" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-cp-saml" value="コントロールプレーンの SAML IdP を管理する&#xa;SaaS（既定で非表示）" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="248" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-event" value="大会・チーム・日程を管理する（作成・配置・終了・アーカイブ）&#xa;SaaS・Lite・local-host" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="338" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-team-key" value="チームキーを発行・再発行・配布する&#xa;SaaS・Lite・local-host" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="428" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-competitor" value="競技用アカウントを登録・検証・削除する&#xa;SaaS・Lite（ExternalId は再登録で変える）" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="518" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-deploy" value="問題を配置・再試行・撤去する（画面はイベント単位）&#xa;SaaS・Lite・local-host" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="608" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-disruption" value="障害を発火する（復旧は自動・定期障害は早期に解除できる）&#xa;SaaS・Lite・Local" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="698" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-notify" value="通知を送る・採点をロックする&#xa;SaaS・Lite・local-host" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="788" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-users" value="ユーザーと SAML IdP を管理する（TenantAdmin だけ）&#xa;ユーザー: SaaS・Lite / SAML: silo・Lite（既定で非表示）" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="878" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-login" value="チームキーでログインする&#xa;SaaS・Lite・local-host（Local はキーが入力済み）" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="968" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-play" value="問題を使う（自分で起動するのは Local だけ）&#xa;SaaS・Lite・Local・local-host" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="1058" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-submit" value="解答を送り、得点・ヒント・順位を見る&#xa;SaaS・Lite・Local・local-host" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="1148" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-console" value="チームの AWS コンソールを開く&#xa;SaaS・Lite" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="1238" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-coordination" value="独自競技の操作を送る（HUNT など）&#xa;SaaS・Lite・local-host" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="1328" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-terminal" value="ターミナル・シミュレーターを使う&#xa;Local（対応する問題）" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="90" y="1418" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-commit" value="問題リポジトリに commit し CI で検証する&#xa;TenkaCloudChallenge" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="990" y="68" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-pack" value="Problem Pack を検証・導入・有効化する&#xa;Pack CLI（Lite）" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="990" y="158" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-practice" value="AWS なしで練習・検証する&#xa;make local・local-host・make dev" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="990" y="248" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-payload" value="非公開の問題データを公開する&#xa;SaaS（基盤だけ・今は未使用）" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="990" y="338" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-bootstrap" value="初期設定のスタックを作成する（Launch Stack）&#xa;SaaS・Lite" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="990" y="518" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-platform" value="基盤を配置・撤去する&#xa;make deploy・destroy" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="990" y="698" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-cleanup" value="失敗の後片付けをする&#xa;make・scripts" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="990" y="788" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="uc-machine" value="API で問題を配置・再試行する&#xa;SaaS（machine API・既定で無効）" style="rounded=1;arcSize=20;whiteSpace=wrap;html=1;fillColor=#F8FAFC;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=12;align=center;verticalAlign=middle" vertex="1" parent="tenkacloud"><mxGeometry x="990" y="968" width="720" height="64" as="geometry" /></mxCell>
                <mxCell id="edge-actor-system-admin-to-uc-tenant" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-system-admin" target="uc-tenant"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-system-admin-to-uc-insight" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-system-admin" target="uc-insight"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-system-admin-to-uc-cp-saml" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-system-admin" target="uc-cp-saml"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-organizer-to-uc-event" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-organizer" target="uc-event"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-organizer-to-uc-team-key" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-organizer" target="uc-team-key"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-organizer-to-uc-competitor" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-organizer" target="uc-competitor"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-organizer-to-uc-deploy" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-organizer" target="uc-deploy"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-organizer-to-uc-disruption" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-organizer" target="uc-disruption"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-organizer-to-uc-notify" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-organizer" target="uc-notify"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-organizer-to-uc-users" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-organizer" target="uc-users"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-participant-to-uc-login" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-participant" target="uc-login"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-participant-to-uc-play" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-participant" target="uc-play"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-participant-to-uc-submit" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-participant" target="uc-submit"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-participant-to-uc-console" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-participant" target="uc-console"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-participant-to-uc-coordination" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-participant" target="uc-coordination"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-participant-to-uc-terminal" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="actor-participant" target="uc-terminal"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-author-to-uc-commit" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="actor-author" target="uc-commit"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-author-to-uc-pack" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="actor-author" target="uc-pack"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-author-to-uc-practice" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="actor-author" target="uc-practice"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-author-to-uc-payload" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="actor-author" target="uc-payload"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-owner-to-uc-bootstrap" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="actor-owner" target="uc-bootstrap"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-operator-to-uc-platform" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="actor-operator" target="uc-platform"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-operator-to-uc-cleanup" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="actor-operator" target="uc-cleanup"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-actor-machine-to-uc-machine" value="" style="edgeStyle=none;html=1;endArrow=none;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="actor-machine" target="uc-machine"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-uc-event-to-uc-deploy" value="含む（include）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#E7157B;rounded=0;dashed=1;labelBackgroundColor=none;verticalAlign=bottom;align=left;spacingLeft=6;exitX=1;exitY=0.5;entryX=1;entryY=0.5;" edge="1" parent="1" source="uc-event" target="uc-deploy"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="1210" y="500" /><mxPoint x="1210" y="770" /></Array></mxGeometry></mxCell>
            </root>
        </mxGraphModel>
    </diagram>
    <diagram id="system-context" name="05 システムコンテキスト図">
        <mxGraphModel adaptiveColors="auto" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="0" page="1" pageScale="1" pageWidth="1960" pageHeight="1500" math="0" shadow="0">
            <root>
                <mxCell id="0" />
                <mxCell id="1" parent="0" />
                <mxCell id="tenkacloud" value="TenkaCloud" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#232F3E;strokeWidth=2;dashed=0;fontSize=16;fontStyle=1;fontColor=#232F3E;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="1"><mxGeometry x="700" y="200" width="1060" height="1200" as="geometry" /></mxCell>
                <mxCell id="aws-account" value="AWS アカウント（SaaS・Lite）" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#147EBA;strokeWidth=2;dashed=1;fontSize=15;fontStyle=1;fontColor=#147EBA;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="tenkacloud"><mxGeometry x="40" y="60" width="980" height="540" as="geometry" /></mxCell>
                <mxCell id="pc" value="PC（Local・local-host）" style="swimlane;horizontal=1;startSize=40;rounded=0;whiteSpace=wrap;html=1;fillColor=#FAFBFC;strokeColor=#405A78;strokeWidth=2;dashed=1;fontSize=15;fontStyle=1;fontColor=#405A78;align=left;spacingLeft=14;collapsible=0" vertex="1" parent="tenkacloud"><mxGeometry x="40" y="640" width="980" height="540" as="geometry" /></mxCell>
                <mxCell id="participant" value="参加者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.users" vertex="1" parent="1"><mxGeometry x="170" y="300" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="system-admin" value="システム管理者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="170" y="430" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="operator" value="運用者（AWS 権限）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="170" y="660" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="organizer" value="開催者" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="170" y="970" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="author" value="問題作成者（CI）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.user" vertex="1" parent="1"><mxGeometry x="170" y="1270" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="competitor" value="競技用の AWS アカウント&#xa;（チームごと）" style="fontColor=#16191F;fillColor=#232F3E;strokeColor=#ffffff;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.resourceIcon;resIcon=mxgraph.aws4.general" vertex="1" parent="1"><mxGeometry x="2120" y="300" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="idp" value="社内・テナントの IdP&#xa;（SAML 2.0、任意）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.corporate_data_center" vertex="1" parent="1"><mxGeometry x="2120" y="430" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="non-aws" value="AWS 以外のクラウド&#xa;Azure・GCP・さくら" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.internet" vertex="1" parent="1"><mxGeometry x="2120" y="560" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="email" value="メール&#xa;（SNS の通知・Cognito の招待）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.email" vertex="1" parent="1"><mxGeometry x="2120" y="690" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="turso" value="Turso（libSQL）&#xa;制御データの代替（任意）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.generic_database" vertex="1" parent="1"><mxGeometry x="2120" y="850" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="ghcr" value="GHCR&#xa;Simulator のイメージ" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.container_2" vertex="1" parent="1"><mxGeometry x="2120" y="1000" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="challenge" value="TenkaCloudChallenge&#xa;（GitHub・submodule）" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.documents" vertex="1" parent="1"><mxGeometry x="2120" y="1270" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="packs" value="Problem Pack の&#xa;リポジトリ" style="fontColor=#16191F;fillColor=#242F3E;strokeColor=none;verticalLabelPosition=bottom;verticalAlign=top;align=center;html=1;fontSize=12;aspect=fixed;shape=mxgraph.aws4.documents" vertex="1" parent="1"><mxGeometry x="2400" y="1270" width="60" height="60" as="geometry" /></mxCell>
                <mxCell id="mode-saas" value="SaaS&#xa;複数の組織（SBT で組織を管理・pooled / silo）" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=13;align=center;verticalAlign=middle" vertex="1" parent="aws-account"><mxGeometry x="50" y="155" width="880" height="90" as="geometry" /></mxCell>
                <mxCell id="mode-lite" value="Lite&#xa;1 つの組織（tenant=local・stack 2 つ）" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=13;align=center;verticalAlign=middle" vertex="1" parent="aws-account"><mxGeometry x="50" y="315" width="880" height="90" as="geometry" /></mxCell>
                <mxCell id="mode-local" value="Local（make local・make local-dev）&#xa;1 人の練習・Docker・Simulator は開発者が有効にしたときだけ" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=13;align=center;verticalAlign=middle" vertex="1" parent="pc"><mxGeometry x="50" y="95" width="880" height="90" as="geometry" /></mxCell>
                <mxCell id="mode-local-host" value="local-host（make host）&#xa;1 台の PC で複数チームの大会（Bun + SQLite）" style="rounded=1;arcSize=12;whiteSpace=wrap;html=1;fillColor=#FFFFFF;strokeColor=#405A78;strokeWidth=1.5;fontColor=#16191F;fontSize=13;align=center;verticalAlign=middle" vertex="1" parent="pc"><mxGeometry x="50" y="255" width="880" height="90" as="geometry" /></mxCell>
                <mxCell id="edge-participant-to-tenkacloud" value="解答・得点（チームキー）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.1083;entryPerimeter=0;" edge="1" parent="1" source="participant" target="tenkacloud"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-participant-to-competitor" value="問題の操作・AWS コンソール" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.5;exitY=0;entryX=0.5;entryY=0;" edge="1" parent="1" source="participant" target="competitor"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="200" y="150" /><mxPoint x="2150" y="150" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-system-admin-to-mode-saas" value="組織の登録・監視" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.5;" edge="1" parent="1" source="system-admin" target="mode-saas"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-operator-to-aws-account" value="make deploy・destroy" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.7963;entryPerimeter=0;" edge="1" parent="1" source="operator" target="aws-account"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-organizer-to-tenkacloud" value="大会の運営" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5;entryX=0;entryY=0.6667;entryPerimeter=0;" edge="1" parent="1" source="organizer" target="tenkacloud"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-author-to-challenge" value="commit・CI" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.25;exitY=1;exitDy=24;exitPerimeter=0;entryX=0.5;entryY=1;entryDy=42;entryPerimeter=0;" edge="1" parent="1" source="author" target="challenge"><mxGeometry x="0.008" relative="1" as="geometry"><Array as="points"><mxPoint x="185" y="1500" /><mxPoint x="2150" y="1500" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-author-to-packs" value="commit" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.75;exitY=1;exitDy=24;exitPerimeter=0;entryX=0.5;entryY=1;entryDy=42;entryPerimeter=0;" edge="1" parent="1" source="author" target="packs"><mxGeometry x="0.6153" relative="1" as="geometry"><Array as="points"><mxPoint x="215" y="1530" /><mxPoint x="2430" y="1530" /></Array></mxGeometry></mxCell>
                <mxCell id="edge-aws-account-to-competitor" value="AssumeRole（ExternalId 必須）・CloudFormation" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.1296;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="aws-account" target="competitor"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-idp-to-aws-account" value="SAML アサーション" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.3704;entryPerimeter=0;" edge="1" parent="1" source="idp" target="aws-account"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-aws-account-to-non-aws" value="provider REST（GCP は token exchange）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.6111;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="aws-account" target="non-aws"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-aws-account-to-email" value="通知・招待" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.8519;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="aws-account" target="email"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-tenkacloud-to-turso" value="libSQL（任意）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.5667;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="tenkacloud" target="turso"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-pc-to-ghcr" value="イメージを取得（local-dev）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=1;exitY=0.3519;exitPerimeter=0;entryX=0;entryY=0.5;" edge="1" parent="1" source="pc" target="ghcr"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-challenge-to-tenkacloud" value="問題（CDK synth 時に読む）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0;exitY=0.5;entryX=1;entryY=0.9167;entryPerimeter=0;" edge="1" parent="1" source="challenge" target="tenkacloud"><mxGeometry relative="1" as="geometry"></mxGeometry></mxCell>
                <mxCell id="edge-packs-to-tenkacloud" value="Problem Pack（Lite・snapshot）" style="edgeStyle=orthogonalEdgeStyle;html=1;endArrow=block;endFill=1;strokeColor=#545B64;rounded=0;labelBackgroundColor=none;verticalAlign=bottom;align=center;exitX=0.5;exitY=0;entryX=1;entryY=0.8333;entryPerimeter=0;" edge="1" parent="1" source="packs" target="tenkacloud"><mxGeometry relative="1" as="geometry"><Array as="points"><mxPoint x="2430" y="1200" /></Array></mxGeometry></mxCell>
            </root>
        </mxGraphModel>
    </diagram>
</mxfile>
