{
  "checked_at": "2026-10-18T06:25:51+09:00",
  "commit": "cb1447b795621cd0b73d0d50565e64d3d0ade5ed",
  "judge_runs": {
    "A": 332,
    "B": 331
  },
  "scope": "6 selected pages visually inspected; geometry verified on two numeric-badge pages; not an inspection of every BAD image",
  "runtime": {
    "325:101": {
      "report": {
        "basis": "predicted",
        "status": "unresolved",
        "issues": [
          {
            "nodeId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
            "reason": "font-floor-reached"
          }
        ],
        "rejected": [],
        "measurementRequests": 0
      },
      "metrics": {
        "overflowNodes": {
          "input": 0,
          "current": 0
        },
        "newOverlapPairs": {
          "input": 3,
          "current": 3
        },
        "wordBreaks": {
          "input": 9,
          "current": 5
        },
        "minFontScale": {
          "input": 0.9906,
          "current": 0.9664
        }
      }
    },
    "329:142": {
      "report": {
        "basis": "predicted",
        "status": "unresolved",
        "issues": [
          {
            "nodeId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
            "reason": "font-floor-reached"
          }
        ],
        "rejected": [],
        "measurementRequests": 0
      },
      "metrics": {
        "overflowNodes": {
          "input": 0,
          "current": 0
        },
        "newOverlapPairs": {
          "input": 1,
          "current": 1
        },
        "wordBreaks": {
          "input": 0,
          "current": 0
        },
        "minFontScale": {
          "input": 1,
          "current": 0.7703
        }
      }
    },
    "324:137": {
      "report": {
        "basis": "predicted",
        "status": "resolved",
        "issues": [],
        "rejected": [],
        "measurementRequests": 0
      },
      "metrics": {
        "overflowNodes": {
          "input": 0,
          "current": 0
        },
        "newOverlapPairs": {
          "input": 2,
          "current": 0
        },
        "wordBreaks": {
          "input": 1,
          "current": 1
        },
        "minFontScale": {
          "input": 1,
          "current": 1
        }
      }
    },
    "324:299": {
      "report": {
        "basis": "predicted",
        "status": "resolved",
        "issues": [],
        "rejected": [],
        "measurementRequests": 0
      },
      "metrics": {
        "overflowNodes": {
          "input": 0,
          "current": 0
        },
        "newOverlapPairs": {
          "input": 0,
          "current": 0
        },
        "wordBreaks": {
          "input": 0,
          "current": 0
        },
        "minFontScale": {
          "input": 0.9906,
          "current": 0.9906
        }
      }
    },
    "324:70": {
      "report": {
        "basis": "predicted",
        "status": "unresolved",
        "issues": [
          {
            "nodeId": "b45ac07f-fafd-4943-8ece-a00441df8d81",
            "reason": "available-area-exhausted"
          },
          {
            "nodeId": "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
            "reason": "available-area-exhausted"
          },
          {
            "nodeId": "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e",
            "reason": "available-area-exhausted"
          }
        ],
        "rejected": [],
        "measurementRequests": 0
      },
      "metrics": {
        "overflowNodes": {
          "input": 4,
          "current": 3
        },
        "newOverlapPairs": {
          "input": 0,
          "current": 0
        },
        "wordBreaks": {
          "input": 4,
          "current": 3
        },
        "minFontScale": {
          "input": 1,
          "current": 1
        }
      }
    },
    "328:416": {
      "report": {
        "basis": "predicted",
        "status": "unresolved",
        "issues": [
          {
            "nodeId": "96adbfed-18cc-49cc-bcfb-3c6df150a4aa",
            "reason": "available-area-exhausted"
          },
          {
            "nodeId": "f95c0d22-3c8d-48ad-89e1-fb24b907cc0e",
            "reason": "available-area-exhausted"
          },
          {
            "nodeId": "9f8470c5-ad5d-4087-8624-c68c572d4bfa",
            "reason": "available-area-exhausted"
          },
          {
            "nodeId": "0e661c3b-4ff3-4548-9c75-bd12b25dc052",
            "reason": "available-area-exhausted"
          },
          {
            "nodeId": "c4589d4a-e5a0-4cfc-9094-b85cbb372bf9",
            "reason": "available-area-exhausted"
          },
          {
            "nodeId": "6d6b4918-d819-48ee-ad72-86f5f6c8309b",
            "reason": "available-area-exhausted"
          },
          {
            "nodeId": "f129cac6-7261-41fa-819d-4222bdcc2e12",
            "reason": "available-area-exhausted"
          }
        ],
        "rejected": [],
        "measurementRequests": 0
      },
      "metrics": {
        "overflowNodes": {
          "input": 0,
          "current": 0
        },
        "newOverlapPairs": {
          "input": 0,
          "current": 0
        },
        "wordBreaks": {
          "input": 0,
          "current": 0
        },
        "minFontScale": {
          "input": 0.9531,
          "current": 0.9531
        }
      }
    }
  },
  "geometry": {
    "324:70": {
      "numeric_texts": [
        {
          "node_id": "809789cc-2e0c-4413-aee6-feae380b56fb",
          "text": "01",
          "previous_box": {
            "left": 36.4765672524862,
            "top": 16.359205379828104,
            "width": 63.9898579850276,
            "height": 75.92017770034377
          },
          "current_box": {
            "left": 36.4765672524862,
            "top": 16.359205379828104,
            "width": 63.98985798502761,
            "height": 75.92017770034377
          }
        },
        {
          "node_id": "b45ac07f-fafd-4943-8ece-a00441df8d81",
          "text": "02",
          "previous_box": {
            "left": 28.450718616784307,
            "top": 187.0943182498281,
            "width": 80.0415552564314,
            "height": 75.92017770034377
          },
          "current_box": {
            "left": 46.08058994,
            "top": 187.09431825,
            "width": 44.78181261,
            "height": 75.9201777
          }
        },
        {
          "node_id": "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
          "text": "03",
          "previous_box": {
            "left": 28.42367137895942,
            "top": 356.1448905598281,
            "width": 80.0957729720812,
            "height": 75.92017770034377
          },
          "current_box": {
            "left": 47.53071463,
            "top": 356.14489056,
            "width": 41.88168647,
            "height": 75.9201777
          }
        },
        {
          "node_id": "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e",
          "text": "04",
          "previous_box": {
            "left": 26.82392201293353,
            "top": 526.7360508898281,
            "width": 83.29527170413292,
            "height": 75.92017770034377
          },
          "current_box": {
            "left": 47.53071463,
            "top": 526.73605089,
            "width": 41.88168647,
            "height": 75.9201777
          }
        }
      ],
      "resized_graphics": []
    },
    "324:299": {
      "numeric_texts": [
        {
          "node_id": "dd5a8db3-7a02-481b-b234-3c1947b6d844",
          "text": "01",
          "previous_box": {
            "left": 80.7428283326238,
            "top": 168.3639,
            "width": 34.66673994475239,
            "height": 45.39228948994889
          },
          "current_box": {
            "left": 80.7428283326238,
            "top": 168.3639,
            "width": 34.66673994475239,
            "height": 45.39228948994889
          }
        },
        {
          "node_id": "9f112ac5-68c7-4a63-9b25-8cf0c55b2baa",
          "text": "01",
          "previous_box": {
            "left": 102.85209226,
            "top": 297.57485455,
            "width": 278.83009671,
            "height": 24.5253293
          },
          "current_box": {
            "left": 102.85209226,
            "top": 297.57485455,
            "width": 278.83009671,
            "height": 24.5253293
          }
        },
        {
          "node_id": "23beec29-3f2a-4c56-9273-a18673e209ad",
          "text": "02",
          "previous_box": {
            "left": 442.5940725326641,
            "top": 168.10058994,
            "width": 40.273817784671806,
            "height": 45.686074455207084
          },
          "current_box": {
            "left": 442.5940725326641,
            "top": 168.10058994,
            "width": 40.273817784671834,
            "height": 45.686074455207084
          }
        },
        {
          "node_id": "95d58a91-1791-40aa-8f4a-aaae8ebedb38",
          "text": "02",
          "previous_box": {
            "left": 467.5066764,
            "top": 297.44220464,
            "width": 278.83009671,
            "height": 24.5253293
          },
          "current_box": {
            "left": 467.5066764,
            "top": 297.44220464,
            "width": 278.83009671,
            "height": 24.5253293
          }
        },
        {
          "node_id": "482c7b14-f308-415a-9289-f39ef6012102",
          "text": "03",
          "previous_box": {
            "left": 806.3933529381721,
            "top": 168.06278472,
            "width": 40.65640073365566,
            "height": 45.47196924188281
          },
          "current_box": {
            "left": 815.20661315,
            "top": 168.06278472,
            "width": 23.02988031,
            "height": 29.38261683
          }
        },
        {
          "node_id": "bf39669d-0602-4337-92be-e051fce7525e",
          "text": "03",
          "previous_box": {
            "left": 831.49602128,
            "top": 297.30955474,
            "width": 278.83009671,
            "height": 24.5253293
          },
          "current_box": {
            "left": 831.49602128,
            "top": 297.30955474,
            "width": 278.83009671,
            "height": 24.5253293
          }
        },
        {
          "node_id": "c79f1945-9df2-49c3-97ac-a84e0da52139",
          "text": "04",
          "previous_box": {
            "left": 78.22706815489194,
            "top": 394.62351354,
            "width": 40.7597911502161,
            "height": 44.88859703333555
          },
          "current_box": {
            "left": 87.73928878,
            "top": 394.62351354,
            "width": 21.7353499,
            "height": 43.69421489
          }
        },
        {
          "node_id": "1b7055aa-0fe4-4410-bd59-3867c131c1fa",
          "text": "04",
          "previous_box": {
            "left": 103.38269188,
            "top": 522.94704023,
            "width": 278.83009671,
            "height": 24.5253293
          },
          "current_box": {
            "left": 103.38269188,
            "top": 522.94704023,
            "width": 278.83009671,
            "height": 24.5253293
          }
        },
        {
          "node_id": "85864396-2662-43d5-a5a5-fcdf8ea56136",
          "text": "05",
          "previous_box": {
            "left": 442.96493935056156,
            "top": 394.13602515,
            "width": 40.59248746887695,
            "height": 45.68601228242878
          },
          "current_box": {
            "left": 452.09607389,
            "top": 394.13602515,
            "width": 22.33021839,
            "height": 44.69824201
          }
        },
        {
          "node_id": "9476fbf8-4ed8-49e1-93c3-e34413ae087b",
          "text": "05",
          "previous_box": {
            "left": 468.03727602,
            "top": 522.81439033,
            "width": 278.83009671,
            "height": 24.5253293
          },
          "current_box": {
            "left": 468.03727602,
            "top": 522.81439033,
            "width": 278.83009671,
            "height": 24.5253293
          }
        },
        {
          "node_id": "f4016626-206f-4bf3-8544-2f4d19ce6861",
          "text": "06",
          "previous_box": {
            "left": 806.9222612681723,
            "top": 394.09821992,
            "width": 40.65640073365569,
            "height": 45.471969241882974
          },
          "current_box": {
            "left": 816.16832495,
            "top": 394.09821992,
            "width": 22.16427337,
            "height": 30.13892025
          }
        },
        {
          "node_id": "0de9aed6-085b-4ab0-b21e-046297f28542",
          "text": "06",
          "previous_box": {
            "left": 832.02662089,
            "top": 522.68174043,
            "width": 278.83009671,
            "height": 24.5253293
          },
          "current_box": {
            "left": 832.02662089,
            "top": 522.68174043,
            "width": 278.83009671,
            "height": 24.5253293
          }
        }
      ],
      "resized_graphics": []
    }
  },
  "algorithm_source_hashes": {
    "src/post-replace-relayout/relayout-methods/simpleRelayout.ts": "62a5ca0a6c225d2f6d7fe599edae7f6b07da14ef8e7fbbe4903169ec70a9c2e4",
    "src/post-replace-relayout/relayout-methods/simpleRelayoutObstacles.ts": "35ba818e746a2d44ac331cd389f73762968857f30a63c3e195acae1afe12f980",
    "src/post-replace-relayout/relayout-methods/simpleRelayoutSafety.ts": "8edc8b6ffe612d3cc5d9f98a96ffd44ee0964b57b954e3c56b716e7e5e8b8f88",
    "src/post-replace-relayout/relayout-methods/simpleRelayoutSpacing.ts": "b7945782f9028a0d87c08a0bb2a9f18a6888699304403e31cd7ba7d641d9d2d8",
    "src/post-replace-relayout/relayout-methods/simpleRelayoutVerified.ts": "dea20eca0c67692dd46890e1779716a336b7b3519012f93a2c4724605564b629"
  },
  "notes": {
    "324:70": {
      "title": "번호 배지의 한 줄 확장 회귀",
      "finding": "직전에는 01~04가 한 줄이었지만 현재는 02~04가 두 줄로 돌아갔습니다. 배경 도형 크기는 같고, 세 번호 글상자 폭이 약 80~83에서 42~45로 줄었습니다.",
      "hypothesis": "기존 한 줄 확장이 현재 가용영역 제한을 통과하지 못했을 가능성이 있습니다. 해당 세 노드에 available-area-exhausted가 남았습니다.",
      "action": "번호 글상자만 원래 정렬 중심을 유지하며 한 줄 폭을 확보하는 후보를 따로 검증하세요. 배경 도형 크기·위치를 고정한 회귀 사례로 추가하고 후보 거부 조건을 노드별로 기록합니다.",
      "acceptance": "02~04 한 줄, 배경 도형 크기 불변, 새로운 겹침 0, 기존 01 유지."
    },
    "324:299": {
      "title": "도형 변형 판정의 실제 변화는 번호 글상자",
      "finding": "LLM은 배지가 찌그러졌다고 설명했지만, 직전 대비 비텍스트 도형 크기 변화는 0개입니다. 03~06 번호 글상자 폭은 약 40.6에서 21.7~23.0으로 줄었습니다. 작은 번호의 배치가 악화된 것은 이미지에서도 확인됩니다.",
      "hypothesis": "그래픽 리소스가 변형된 결함보다, 한 줄 번호 글상자 보정이 적용되지 않은 현상에 가깝습니다. 이 페이지는 규칙상 resolved여도 A/B 모두 BAD입니다.",
      "action": "짧은 번호의 한 줄 여부를 별도 품질 조건으로 추가하고, 원형 배지 자체를 키우지 않는 글상자 폭 복구를 우선 검토하세요.",
      "acceptance": "03~06 번호 가독성 회복, 그래픽 크기 불변, resolved 상태와 번호 렌더 결과 일치."
    },
    "329:142": {
      "title": "아이콘과 글의 겹침이 남고 글이 작아짐",
      "finding": "직전에는 아이콘 위쪽으로 분리됐던 제목이 현재 아이콘과 겹칩니다. 입력 대비 신규 겹침 쌍은 1→1로 남고 최소 글꼴 배율은 1→0.7703입니다. A/B 모두 가독성·완결성 BAD입니다.",
      "hypothesis": "font-floor-reached 상태에서 축소만으로는 아이콘 주변의 글 배치를 해결하지 못했습니다. 위치 고정 조건과 장애물 회피 후보의 충돌 여부를 확인해야 합니다.",
      "action": "아이콘의 실제 채움 영역 밖에서 컨테이너 내부의 글 위치·폭을 탐색하고, 가림이 줄지 않는 축소 후보는 채택하지 않는 조건을 검토하세요.",
      "acceptance": "텍스트와 아이콘의 실제 가림 해소, 번호·제목 정렬 보존, 불필요한 추가 축소 없음."
    },
    "325:101": {
      "title": "중앙 화살표의 가림 잔존",
      "finding": "현재 이미지에서도 왼쪽 본문 끝이 중앙 화살표에 가립니다. 입력 대비 신규 겹침 쌍은 3→3이며 실행 기록은 font-floor-reached입니다.",
      "hypothesis": "단어 분절은 9→5로 줄었지만 장애물 가림을 해소하는 후보가 없었습니다. 축소·분절 개선과 최종 가독성이 일치하지 않는 사례입니다.",
      "action": "중앙 화살표를 침범하지 않는 본문 열 폭·내부 여백 후보를 검토하고, 배경 카드 및 두 열의 관계를 유지하세요.",
      "acceptance": "화살표 뒤로 가려지는 글자 0, 텍스트 누락 0, 카드 정렬 유지."
    },
    "324:137": {
      "title": "규칙 겹침 감소와 디자인 BAD의 불일치",
      "finding": "구체 그래픽이 위로 이동했고 규칙 신규 겹침은 2→0입니다. 하지만 A/B 모두 디자인 완결성 BAD이며, 현재 이미지에도 제목·그래픽의 배치 관계가 어색하게 남습니다.",
      "hypothesis": "규칙의 겹침 감소만으로 장식·텍스트의 전체 구도와 시각적 가림을 보장하지 못합니다. 원래 존재하던 구도 문제와 새 이동의 영향을 분리해야 합니다.",
      "action": "장식의 원안 상대 위치·이동 한도를 유지하면서 실제 글자 가림을 검사하세요. 그래픽 이동 후보는 동일 이미지의 반복 판정과 전후 시각 검토로 확인합니다.",
      "acceptance": "가림 해소와 원안 구도 유지가 함께 충족; 규칙 점수만으로 개선 확정 금지."
    },
    "328:416": {
      "title": "같은 이미지인데 새로 검출된 순서 문제",
      "finding": "직전과 현재의 렌더 이미지 해시는 동일합니다. 입력에도 보이는 항목 순서 문제를 이번 A/B가 모두 내용 대치 BAD로 판단했습니다.",
      "hypothesis": "이번 재배치가 순서를 새로 바꿨다는 근거는 없습니다. 기존 매핑 결함의 재판정 검출로 분리해야 합니다.",
      "action": "summary 항목 순서와 실제 번호 슬롯의 대응을 대치 단계에서 검사하세요. 이 사례를 재배치 이동 회귀 수정의 근거로 사용하지 않습니다.",
      "acceptance": "번호 슬롯과 summary 순서 일치; 동일 이미지 반복 판정 변동 별도 기록."
    }
  },
  "image_hashes": {
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/7.webp": "19a2f8c87c043054ebb688ad28b100be76203ec31ae6ff675ed32da95db62db4",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/145.webp": "c0e6cf25faf13afe2657bb5de37108c07f9f225e1ffa24d3fe1014fdce459d5a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/143.webp": "90669fd16b321312ea8c3e0dee8960632e20030f6173ba340144dfaf80112f5e",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/93.webp": "777bd9ae793716d287bef5f7bdbf0e8f8e845ac55cbeee2a65b8110122f82b6a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/11.webp": "0e07933806d655229514cb53e8a83aeb8f78ebdb363e8adbce7dc645a0067018",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/102.webp": "d8051bbc9b01cc6e900147ae97b0405021a2f8481e751b053ff7b851a98bdb79",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/125.webp": "319805030f8a41157e53dded98946742ddd580a93c972fa22a7a5f6e19fa8600",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/159.webp": "0dcddeef5916f6bfa1f34b038755ebf68163bb719ad01a271f24255065f89d0f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/149.webp": "87fc1aba1bc744e4d577af4f300d6eb7a444264ed91713b716274aa9f1d6d2db",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/33.webp": "4cb2fec1b9e0fb3b79ac1c519ee17ac5a153e79caa2178afa8636b395e5729f0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/80.webp": "6fede0d7745b0cbb83cf938dc6981ff9b51d1369ebe18d25a6c43d43f3a40f7f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/89.webp": "1309f5e1f8a68835f39a526cb94e6c521ba97ed77430aa4a5193d22bba89967a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/133.webp": "282b92b263a1643424aaec09ac4503d597ddfad247c76195a3ff54d27034bfb6",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/38.webp": "40c5a67359dae409d21ee31a8ecceab099a3612e9639a64b061855fb240bf204",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/81.webp": "d4664bf47e4ea5f5eff7d41d04a0baa39b4c967d336ed9dd16f277b290e8e1af",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/72.webp": "c2f758daec83c286f9d62948853694d6017f2054370f83f9b2ae1daf04ed7b42",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/81.webp": "d4664bf47e4ea5f5eff7d41d04a0baa39b4c967d336ed9dd16f277b290e8e1af",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/60.webp": "bc4c0a2852ca905fefbc4db1b60684aa29d74aace4d020bfe00e47bf774701ae",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/77.webp": "f7f5fa9d2b1a741c3a1be97737d763eadce658bd8db3f29ae305ca4900abf894",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/84.webp": "a7892fe8f8a93acdbf6cdc8f53d6eadab1f152ec9eb1b72d6e74afcd5785bcdc",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/35.webp": "5a283207e288c794317608c27957896cd6cae92c8a79759c8ebe4f51213b17a6",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/124.webp": "4f2c555d5447190d6176ad7c0b79725706599607446b332220017eca31bf96cd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/57.webp": "544bba86b65e5e2eac2611679e78d42dd7ba8c699fe61dabf217c2043cba23f6",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/90.webp": "05f9abfe94c13f09fbf7c89687f29f045c4871007f43d77d50ba9fae8237caea",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/99.webp": "7aab188f26d868928110d5fb81d7945e803495fb3c93e3fd0b4483474c4dd6a9",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/96.webp": "4a54ca10585c85811e146c6db1130ab8350338fd85be4275c462a7e63b4fb69a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/45.webp": "50a7c67fd6bf1e8e5c0e179128bbf4f9127105b54ade85c172076ad1c691c497",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/116.webp": "01a5cc12843fc5830e181e843d4b088784aa0cab4def9631dcb1f050f1c0762d",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/59.webp": "180260305ec5ce42a4191e48a5105601013a1928c95783201259b2869a5f1b26",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/142.webp": "220663ed8c9a6f9b7e93139a7d1aade7382f19dd52770a0744cfafd7f0adc0aa",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/140.webp": "c65db855b352866fbd4d17aae6e5812e8b5e9b0d8ec419fc22a624f54d2e3a11",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/114.webp": "3a9816562a15117e8135e959d1b88f0f18e8e98f51957e92d77967e9985860ff",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/58.webp": "f3db5f3877b6716029e5c3bf91b2e4b3f6e551f8edff641a8a45b007b563a2ab",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/97.webp": "2d64b0a279c3033364c5bad59897a5f9a030732065ef7478870f58ad7ca7d853",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/128.webp": "16ae74d45a8fa85456b194cd032e955196144056c4def9210438a3a2348b0cc2",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/136.webp": "d8a6467eee012ced87ec3b5e994b323170f4f8f6f18b6aeb14d057551a283d59",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/148.webp": "b2a9375ba4bbed3180e20c24fd55f9b6e56e65d969f9280b5727f02156390822",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/69.webp": "77c85f6984c394e7a9f9e5c2698bd7240e17793ec6b11dc461eda4b9f2f9e081",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/55.webp": "2c5055556b3be52ad4050fe9ea47f4517151c1e036d0745c1a17e789ba51903b",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/28.webp": "dc21b392fa14ff9f63a7234cdfdd2b0c2351a0133067d7dc8a52d64e79c2c55a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/131.webp": "88e4c0a4b99f1a917bfe582105ff57d4993ab5a1bf824b2eb9340a3bfce0bbeb",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/71.webp": "58e1262e01618c5668ea4117ecc45ef52ef67dc084dc5116b13014efba4bd702",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/78.webp": "99405b77b7acebfeb9919057fd83d75f048fa610b41a3262a1c3586bd9558dda",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/6.webp": "5f4de9dc1b7dc3c454676c4eead13f5f2c954e9aa8ab976ab49bcab3855e27ea",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/10.webp": "07cc411ab3999449f49e876232331e722fc21170e055df00c415d2d5e7175ca3",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/137.webp": "8a2b203249ead24cc30288c404dea0a035d31adb61345578e402647b6d5fccf5",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/153.webp": "04c4e9a9a7b911b2b54b2947d0c5d680252e6ac5eb637f9babb9cc24457a9df5",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/27.webp": "da1a5b4c31b90c3ccb73676d869a932e14be61cffa3d597d545584cac3a4723b",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/137.webp": "8a2b203249ead24cc30288c404dea0a035d31adb61345578e402647b6d5fccf5",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/104.webp": "d829ab4f6574c00b3c6042c3d1a921111e4770ef647d055802fe6d404f5f5303",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/128.webp": "16ae74d45a8fa85456b194cd032e955196144056c4def9210438a3a2348b0cc2",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/72.webp": "c2f758daec83c286f9d62948853694d6017f2054370f83f9b2ae1daf04ed7b42",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/31.webp": "c739a865d295ef36c2aecdf1d80330f827c3a984a414b87f9f6e42f79a372d91",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/33.webp": "4cb2fec1b9e0fb3b79ac1c519ee17ac5a153e79caa2178afa8636b395e5729f0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/13.webp": "b2aef5a1c9baa9f42999cec3f5c9a851dfd981eb9e6ce234441541a459f488f4",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/16.webp": "527473ae0aa4a85d71dbf0e9864ea98e0d36e47b35fc136eddf58a6350c03eeb",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/112.webp": "c90b3fe16f3b7c9835cff811c8b47a20bb5597610d039bd20ed43a7f2a689dd7",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/51.webp": "649d5b4a7d5c9e61c09d42a438fa21b3e14b38b2e9a1c66d69195b7927a4e66e",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/43.webp": "6868185fbc5d5d20a138fbecd2482b2ce695826a901f8035e1131755645c8e51",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/133.webp": "282b92b263a1643424aaec09ac4503d597ddfad247c76195a3ff54d27034bfb6",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/13.webp": "b2aef5a1c9baa9f42999cec3f5c9a851dfd981eb9e6ce234441541a459f488f4",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/111.webp": "6aee74ce44b4d27953bd3def1098b3b3d9c81d188071250db0d369ab255b6200",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/113.webp": "a77886d57a37550fe2a1bcf1bc6bc57f5393f615def5612c259b14c190d22246",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/58.webp": "f3db5f3877b6716029e5c3bf91b2e4b3f6e551f8edff641a8a45b007b563a2ab",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/2.webp": "3c30a160bb594be2a9460469f7f1e97e20eda9c2b5b8052d3e68e68dacd1c12b",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/155.webp": "e9eba15479522867a8706a74b6cbf5546a573da6d0039b5f5288b8f622be596f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/152.webp": "0107605301a540faf05d8a740a33102dc71795cdc74ad0570cc68b5cf4f851d0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/92.webp": "893c2da2359ccfc5522f6ef335e245b86a562d1909a42525a00bda9bc7e3bec6",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/109.webp": "2078514ee0f35c2072d7f23062c58f46910d53733fdf69c4ec07ab2ecea5b4b3",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/118.webp": "51cd11b58061417e0f26fa2e56b389793998d6672026407036e03a3ae3fb4e3a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/5.webp": "d8b9af048bfef20b311c8754dadc3fe2a4829fa0304d39f1757fce868ae343a0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/64.webp": "7161cd2b590c33268e92e76f3a6d5f6c6db16e57d0f7f99b47358357fba326ef",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/15.webp": "47d91a1dea7ea0e87c1f13336a556733698f0d1d9b7feaa152dc0277b3ea4f38",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/24.webp": "9fc3061720a67729e900c3bd7c4e1631a95ec95090b18c9e075c431101584563",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/70.webp": "f825e0564b2ec0ff1417266f3c475b29a1acaad3dee8ee828d7f8e7c428efe2c",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/106.webp": "6ae8641b730a79bcfd35e3a17ae3566c1233967d3eb210cf23a44a3078994eba",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/145.webp": "c0e6cf25faf13afe2657bb5de37108c07f9f225e1ffa24d3fe1014fdce459d5a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/71.webp": "58e1262e01618c5668ea4117ecc45ef52ef67dc084dc5116b13014efba4bd702",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/65.webp": "842f942c28713b57b77a89ce13dbdb90010cd80fbe0bc84b93b8f1c5aa061f10",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/3.webp": "7279b5ebd0601b6c9a684ee9fdd7653d70dac985bf15cb627e5f424343157bcf",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/95.webp": "eb720d950eab37ff63cabedc1ad3c1abd331ded025c3f9d2b88d7e1f1ac1cbe5",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/26.webp": "dbf34cbf76d4f86dac42d1810b487d4598caa511bbdec8104a8d9a9c86a8b0ff",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/67.webp": "6683c2f8752bd9dd72ade2020809cfc968009ec2e0b45867bd578cf2be621468",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/88.webp": "0f071e39139a6e496e46c3b2cec44ab4e776a13e2d95148a3e55f034939c9307",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/118.webp": "51cd11b58061417e0f26fa2e56b389793998d6672026407036e03a3ae3fb4e3a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/135.webp": "11bee017b69f1fb1566b6dec579ec8a718a2c792040091c3301d11b0002133ac",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/122.webp": "5e5c38d6ee83a7f6faf630ccc5fdde93521f1dd4e02aec88d145ae30fac25124",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/30.webp": "a150b76ab1b10e27e4303149e0ca2f64e9a7abf201fbb8caf2f2fdec6329128f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/101.webp": "ee4afea63079268905bd51a77dde3810d93cfacd033a2298bb7ba00c1291931e",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/95.webp": "eb720d950eab37ff63cabedc1ad3c1abd331ded025c3f9d2b88d7e1f1ac1cbe5",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/96.webp": "4a54ca10585c85811e146c6db1130ab8350338fd85be4275c462a7e63b4fb69a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/86.webp": "590aab5880fe0c6036d0d6f0cc8b75e31f7d7f8fab2c32055ff756bab03c4034",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/22.webp": "7fce59368e2628ca9ebb550cf5d8a53003a6f26fd184683a4c7e39e4665e8434",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/64.webp": "7161cd2b590c33268e92e76f3a6d5f6c6db16e57d0f7f99b47358357fba326ef",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/49.webp": "fc869a2f2f185e67fe9336d8e5777a5100cf8c0914c6e416d9a1fe60bce11909",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/36.webp": "05e25ffc528c7945bea67c247dd949eb7ff3c66a7a36227b9c102dda728de12a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/119.webp": "ef34a05623f56b7c176a807d39a1f1a6eeddae8688f481deb9dd8739edefac1b",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/17.webp": "fedafd82df47a50a0168196b1469a74b4022cad45ba8ce667b8af87129e0fdd7",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/32.webp": "6c1d0a53bc0be074de8b10e9ec565759779a73da740c01c5af929c2948ac09d8",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/146.webp": "bbf7e8df1adea425311a080e4424747e6008dfb24d6a28761d0455673895ea1a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/125.webp": "319805030f8a41157e53dded98946742ddd580a93c972fa22a7a5f6e19fa8600",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/98.webp": "9a7f30d310ed991d9d0cae1ddb83178f28fc09b3e79a17d3dab9e5fb8c5e6c52",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/4.webp": "c87c7b0b6551e57353a6b71c821d78693f6cf9cdf111f56c9f4a89db20c35783",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/11.webp": "0e07933806d655229514cb53e8a83aeb8f78ebdb363e8adbce7dc645a0067018",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/132.webp": "56c4c13a7a1b41f451ef1f151a2c49eacca117f9843f2c2f6bb6474e663d5f20",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/160.webp": "dd5795bcbcfd2c641d0da0bfc4f344c11b04ef8f59da1daedbfaf1097c465c08",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/138.webp": "07ed1cc1e86c8a77cb7ca9c4da412346617ee19a6fd1bd839832453d2365ee67",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/66.webp": "b3e230a0b49f77f46407916f3081b80bb4c40a57ec9f03a06598b023c88c9508",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/100.webp": "af361c09da61c3bea2fd8ea85d6e11289ae4713fd3a17dd8c5dfbc69341a746d",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/42.webp": "3e27c4ae633996454308afefda75b3d0214f0da7ceef064597c6a99069cca872",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/76.webp": "e3ae186662bacf3396ee5767efd29887b35b98d1c1f1a6303faeeb367c0f6197",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/142.webp": "220663ed8c9a6f9b7e93139a7d1aade7382f19dd52770a0744cfafd7f0adc0aa",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/157.webp": "f2d5dcf962604c5bd558bc103c42cbcb500a26b7d6e6540bab133f6bc6f660de",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/100.webp": "af361c09da61c3bea2fd8ea85d6e11289ae4713fd3a17dd8c5dfbc69341a746d",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/48.webp": "982d64e6c715ce1389b255df679d38f8d0689a586d28dd9f938716b273ef8f17",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/52.webp": "d07d4167b5a2c8a811f872046c2c61d0d0061e253b014c89795986cc2dd7ed73",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/85.webp": "06daf688ba7e92d8a6915eca84924a94db1bbac0fed18478d62b2d0a357ddbfe",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/2.webp": "3c30a160bb594be2a9460469f7f1e97e20eda9c2b5b8052d3e68e68dacd1c12b",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/42.webp": "3e27c4ae633996454308afefda75b3d0214f0da7ceef064597c6a99069cca872",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/116.webp": "01a5cc12843fc5830e181e843d4b088784aa0cab4def9631dcb1f050f1c0762d",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/50.webp": "0cb5a485c62af375ea4efab5e17587219526c193f4b4f9e31322c89d8939c546",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/12.webp": "74957e04ea7417008d4e37bd020523731701cf839fdb6a4a250ff6b9beef6911",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/7.webp": "19a2f8c87c043054ebb688ad28b100be76203ec31ae6ff675ed32da95db62db4",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/106.webp": "6ae8641b730a79bcfd35e3a17ae3566c1233967d3eb210cf23a44a3078994eba",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/138.webp": "07ed1cc1e86c8a77cb7ca9c4da412346617ee19a6fd1bd839832453d2365ee67",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/87.webp": "ae150e017cd132fe13527f883561db19e90e00b9b29f2a9e2bfac5ad6de56933",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/1.webp": "571e22b6d77b78c0dbe31cceb0b88645d72c99048eadaddd4fe47117dc4801a1",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/9.webp": "fd1ccdf56c380a3686c55c3f7b42ae4efb5dfe5e4824923f059ac95bd489ae90",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/56.webp": "76050c6bb5fa0a80ace0595119cb4ebd0c53bed4e53f9b125469d329953e4eb9",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/21.webp": "58d6b71b6a51e2a6f98d68294b4442942306e4261d09bca028b7a70eaf021657",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/75.webp": "fccfebbb8598c3a32419f7ec82f3757913cfbbc7ee5f6a5ce24a2c8f08fcc91c",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/126.webp": "70f83d426b3b9001ace38ab65263b9bb8fc63f35c064efd4b1777e5d0c0a38ec",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/102.webp": "d8051bbc9b01cc6e900147ae97b0405021a2f8481e751b053ff7b851a98bdb79",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/130.webp": "39243127998ad16a825a19c6ec87a2a4088c63f049f4f1126f7765835ba486ae",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/65.webp": "842f942c28713b57b77a89ce13dbdb90010cd80fbe0bc84b93b8f1c5aa061f10",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/162.webp": "1480f41d5be00ddc3a232ad33aa074ebd67f4076ad1f1295e473c401bfebf012",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/157.webp": "f2d5dcf962604c5bd558bc103c42cbcb500a26b7d6e6540bab133f6bc6f660de",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/59.webp": "180260305ec5ce42a4191e48a5105601013a1928c95783201259b2869a5f1b26",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/44.webp": "38b5474770ec130f8fc0a1c2fc075a36fe7fad476e8cc4be200627f03702cedc",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/123.webp": "bffe0af1856a302f27dab41e0d36d0117734edfacfa9e41e34f2fef7c793ab61",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/21.webp": "58d6b71b6a51e2a6f98d68294b4442942306e4261d09bca028b7a70eaf021657",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/63.webp": "402f050bf91d29a9533a6d1813ba59313d9dd5ddca9c31d9cd5e4046de4127c4",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/134.webp": "5d79874239f9fc16a6a620c13b552910b0e2dcdebf1f2302c5fb002331437468",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/41.webp": "c2d603cca40bbb370e4fa8c16970c2e3f92070e93696abd5a42d27298602c8da",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/18.webp": "bcc6b47d12a301fd21c26bf81c2b52dccd44fdee4829d1abcfbd870baddd5ed7",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/12.webp": "74957e04ea7417008d4e37bd020523731701cf839fdb6a4a250ff6b9beef6911",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/143.webp": "90669fd16b321312ea8c3e0dee8960632e20030f6173ba340144dfaf80112f5e",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/124.webp": "4f2c555d5447190d6176ad7c0b79725706599607446b332220017eca31bf96cd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/29.webp": "1740e48a56fa0ea245b36f495f0b1303cc10590ea454131e8acdcc07e2d94865",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/129.webp": "00741319007063847e1e041527e93a3c4bd0d295c945315bc2e1e3d2ca666344",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/112.webp": "c90b3fe16f3b7c9835cff811c8b47a20bb5597610d039bd20ed43a7f2a689dd7",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/148.webp": "b2a9375ba4bbed3180e20c24fd55f9b6e56e65d969f9280b5727f02156390822",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/34.webp": "56c2f5825a10504d0b266255fba637dd29d73aa90a3ab91dc47bfa6fd70b9500",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/161.webp": "494939f9a758772b3be73cb2a4c9afd5ba578597e748c1319fa04d184e4197fd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/73.webp": "9460b8398cfbb4381b1efab3cedff8153575cd15e6a93f51b4b88252e43359e0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/83.webp": "acf3c7f3e399d3e3c40dd46c9ccb7b834add595805bb82a70d30b42f0a2b6219",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/94.webp": "fc7ef82b82b27c3231034fa7d30fe83ca60cf9bb96a7d0b25407e3ac21e1ffaa",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/88.webp": "0f071e39139a6e496e46c3b2cec44ab4e776a13e2d95148a3e55f034939c9307",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/151.webp": "a8d5692fc5e8ba658f24a19d369e710976013562d99cfda6bf3da3b60c8d010e",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/62.webp": "083ed37c93bc63bf7922621c2a25a88db44dcf4c07ecd52680215a4465b1a2f0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/46.webp": "b4b8aba33377af2e6bbc4b74763cb0ab0f713bbb65b78c2c307f3739d004afec",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/154.webp": "84822ebf5231654528f51b7bd567a1addd48cbbd729ff235a518719e55d1e5ad",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/60.webp": "bc4c0a2852ca905fefbc4db1b60684aa29d74aace4d020bfe00e47bf774701ae",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/91.webp": "d29e3d455f3635525abce2b41ee4f1d8f0859996642f3e4f0ce0131e7542964a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/136.webp": "d8a6467eee012ced87ec3b5e994b323170f4f8f6f18b6aeb14d057551a283d59",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/63.webp": "402f050bf91d29a9533a6d1813ba59313d9dd5ddca9c31d9cd5e4046de4127c4",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/97.webp": "2d64b0a279c3033364c5bad59897a5f9a030732065ef7478870f58ad7ca7d853",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/119.webp": "ef34a05623f56b7c176a807d39a1f1a6eeddae8688f481deb9dd8739edefac1b",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/90.webp": "05f9abfe94c13f09fbf7c89687f29f045c4871007f43d77d50ba9fae8237caea",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/27.webp": "da1a5b4c31b90c3ccb73676d869a932e14be61cffa3d597d545584cac3a4723b",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/92.webp": "893c2da2359ccfc5522f6ef335e245b86a562d1909a42525a00bda9bc7e3bec6",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/135.webp": "11bee017b69f1fb1566b6dec579ec8a718a2c792040091c3301d11b0002133ac",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/110.webp": "7760d0f7f6a399d2f8f1f2b114f16269c79ace3ca0b986b4e5acdbbc56f7d792",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/19.webp": "007b83917fb61feeb4a1155e01d08aaab767d69eafd02b880d9b0e9758ed3944",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/107.webp": "f82f313b8588185a2df2562730a325af1c4662f1d56673f223de934d147c5ec9",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/8.webp": "bd585dd17749738c6f1ae4d112d4fa4d89689f0932aebb83afdacd934f3382cd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/61.webp": "48bf3f13f44ba19ac3954331e62dd9d2e23afd98d65b7a7c1003f153f6a79b4d",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/105.webp": "fa8c98622546c1d4e59f44517781844debef849f12abcb97bb2bc40b9a276ef4",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/82.webp": "5f39e017a9425e0b5235e8b2cdc078ad880f699e292530c8c25984c7a8acc5bb",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/144.webp": "6d6af92222ed05bdbdf34f24f37758a0d770a146071d6893749d4eb5a1c0c771",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/108.webp": "f24a1f58bba4ecc0c1fa168a3fa342b3bb29f825b6715841b4ad7e9261bb845c",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/53.webp": "2883050c7ecb277cde1130a31465babbcde7674af10815fa8a0287163d2954fd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/113.webp": "a77886d57a37550fe2a1bcf1bc6bc57f5393f615def5612c259b14c190d22246",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/156.webp": "a505bdb6a5f09ad5167801992b7e2d72953dfeccfa0c97f502907a591cc0152e",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/9.webp": "fd1ccdf56c380a3686c55c3f7b42ae4efb5dfe5e4824923f059ac95bd489ae90",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/70.webp": "f825e0564b2ec0ff1417266f3c475b29a1acaad3dee8ee828d7f8e7c428efe2c",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/101.webp": "ee4afea63079268905bd51a77dde3810d93cfacd033a2298bb7ba00c1291931e",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/39.webp": "2f9e4e7fdea6ff0c122a2242624e3ee719a48af7a5b9d2c08ea85e5cceb5c9a6",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/154.webp": "84822ebf5231654528f51b7bd567a1addd48cbbd729ff235a518719e55d1e5ad",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/0.webp": "95c32a8c6f3db73760b2b2e17beca2413a08d4a804760e07adf65ecc3106ce02",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/4.webp": "c87c7b0b6551e57353a6b71c821d78693f6cf9cdf111f56c9f4a89db20c35783",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/131.webp": "88e4c0a4b99f1a917bfe582105ff57d4993ab5a1bf824b2eb9340a3bfce0bbeb",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/76.webp": "e3ae186662bacf3396ee5767efd29887b35b98d1c1f1a6303faeeb367c0f6197",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/146.webp": "bbf7e8df1adea425311a080e4424747e6008dfb24d6a28761d0455673895ea1a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/79.webp": "a66fe1e29cf50024ac7fa9d2881c5275551a2681c0870c541e554327f14e3213",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/69.webp": "77c85f6984c394e7a9f9e5c2698bd7240e17793ec6b11dc461eda4b9f2f9e081",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/111.webp": "6aee74ce44b4d27953bd3def1098b3b3d9c81d188071250db0d369ab255b6200",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/37.webp": "db5258ec9f22e452ca8183683972ef4aa194a6b6a24e6858d92f81591f3c492a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/120.webp": "04197e0bb3e114a4c71090636b0e79ce656933accd0416f60bc3fac2e2b143e8",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/85.webp": "06daf688ba7e92d8a6915eca84924a94db1bbac0fed18478d62b2d0a357ddbfe",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/158.webp": "0f2a49d7748144ed30b3c0919fc377907cf1a6c23b81da2f363e270e56b9f643",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/36.webp": "05e25ffc528c7945bea67c247dd949eb7ff3c66a7a36227b9c102dda728de12a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/53.webp": "2883050c7ecb277cde1130a31465babbcde7674af10815fa8a0287163d2954fd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/158.webp": "0f2a49d7748144ed30b3c0919fc377907cf1a6c23b81da2f363e270e56b9f643",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/46.webp": "b4b8aba33377af2e6bbc4b74763cb0ab0f713bbb65b78c2c307f3739d004afec",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/83.webp": "acf3c7f3e399d3e3c40dd46c9ccb7b834add595805bb82a70d30b42f0a2b6219",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/127.webp": "ef7c13bce76252921295e8c19cca43da7be0911b253f6c1ba47adad125390bdc",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/141.webp": "99e16034b8b32c95919389d01c6c10dfd475f40c76fb020b7509429c343c57f9",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/150.webp": "2365ca240e55dc05508d456e1ebe3f82d3eeb676385ce184afbdb3951aeadde1",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/39.webp": "2f9e4e7fdea6ff0c122a2242624e3ee719a48af7a5b9d2c08ea85e5cceb5c9a6",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/32.webp": "6c1d0a53bc0be074de8b10e9ec565759779a73da740c01c5af929c2948ac09d8",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/66.webp": "b3e230a0b49f77f46407916f3081b80bb4c40a57ec9f03a06598b023c88c9508",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/1.webp": "571e22b6d77b78c0dbe31cceb0b88645d72c99048eadaddd4fe47117dc4801a1",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/108.webp": "f24a1f58bba4ecc0c1fa168a3fa342b3bb29f825b6715841b4ad7e9261bb845c",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/68.webp": "3e05ba068d32121803e0c439824c343474c8a4f6432251475bd6a42e40c7cee0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/98.webp": "9a7f30d310ed991d9d0cae1ddb83178f28fc09b3e79a17d3dab9e5fb8c5e6c52",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/114.webp": "3a9816562a15117e8135e959d1b88f0f18e8e98f51957e92d77967e9985860ff",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/123.webp": "bffe0af1856a302f27dab41e0d36d0117734edfacfa9e41e34f2fef7c793ab61",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/34.webp": "56c2f5825a10504d0b266255fba637dd29d73aa90a3ab91dc47bfa6fd70b9500",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/117.webp": "426d08bcfa2ac73c3c00370e6dcaffa77cec3efe62a0986675d38b570cd15de4",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/15.webp": "47d91a1dea7ea0e87c1f13336a556733698f0d1d9b7feaa152dc0277b3ea4f38",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/115.webp": "5e1effcc7f3cb7990f9d7ebb8cc42e885809bc858ba68600bcc91a4e5c568c0f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/78.webp": "99405b77b7acebfeb9919057fd83d75f048fa610b41a3262a1c3586bd9558dda",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/45.webp": "50a7c67fd6bf1e8e5c0e179128bbf4f9127105b54ade85c172076ad1c691c497",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/38.webp": "40c5a67359dae409d21ee31a8ecceab099a3612e9639a64b061855fb240bf204",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/25.webp": "0ff22adeb794a8481993678520d08772ab02f9175a298b6f51f2f0079956710f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/149.webp": "87fc1aba1bc744e4d577af4f300d6eb7a444264ed91713b716274aa9f1d6d2db",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/159.webp": "0dcddeef5916f6bfa1f34b038755ebf68163bb719ad01a271f24255065f89d0f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/109.webp": "2078514ee0f35c2072d7f23062c58f46910d53733fdf69c4ec07ab2ecea5b4b3",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/8.webp": "bd585dd17749738c6f1ae4d112d4fa4d89689f0932aebb83afdacd934f3382cd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/35.webp": "5a283207e288c794317608c27957896cd6cae92c8a79759c8ebe4f51213b17a6",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/127.webp": "ef7c13bce76252921295e8c19cca43da7be0911b253f6c1ba47adad125390bdc",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/17.webp": "fedafd82df47a50a0168196b1469a74b4022cad45ba8ce667b8af87129e0fdd7",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/40.webp": "ce0a40746cf1f196a08b345825c9a89ad0e3738f7316c647cc7d046d83de04cd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/25.webp": "0ff22adeb794a8481993678520d08772ab02f9175a298b6f51f2f0079956710f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/74.webp": "ca07bddf56905a035e53834c1718eb0a7ed3c377d5110331f41e2b194605de77",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/68.webp": "3e05ba068d32121803e0c439824c343474c8a4f6432251475bd6a42e40c7cee0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/147.webp": "f17642e1c1f0a6a9d5d8a8805842d57523edcc16d88eed474d050dc14d4c3bbd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/24.webp": "9fc3061720a67729e900c3bd7c4e1631a95ec95090b18c9e075c431101584563",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/51.webp": "649d5b4a7d5c9e61c09d42a438fa21b3e14b38b2e9a1c66d69195b7927a4e66e",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/162.webp": "1480f41d5be00ddc3a232ad33aa074ebd67f4076ad1f1295e473c401bfebf012",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/107.webp": "f82f313b8588185a2df2562730a325af1c4662f1d56673f223de934d147c5ec9",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/156.webp": "a505bdb6a5f09ad5167801992b7e2d72953dfeccfa0c97f502907a591cc0152e",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/151.webp": "a8d5692fc5e8ba658f24a19d369e710976013562d99cfda6bf3da3b60c8d010e",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/19.webp": "007b83917fb61feeb4a1155e01d08aaab767d69eafd02b880d9b0e9758ed3944",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/77.webp": "f7f5fa9d2b1a741c3a1be97737d763eadce658bd8db3f29ae305ca4900abf894",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/126.webp": "70f83d426b3b9001ace38ab65263b9bb8fc63f35c064efd4b1777e5d0c0a38ec",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/129.webp": "00741319007063847e1e041527e93a3c4bd0d295c945315bc2e1e3d2ca666344",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/121.webp": "7b7fe8c62c217e50948cda1dfc39ed6e854009ff5b5369be44576d4555e7a194",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/73.webp": "9460b8398cfbb4381b1efab3cedff8153575cd15e6a93f51b4b88252e43359e0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/160.webp": "dd5795bcbcfd2c641d0da0bfc4f344c11b04ef8f59da1daedbfaf1097c465c08",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/121.webp": "7b7fe8c62c217e50948cda1dfc39ed6e854009ff5b5369be44576d4555e7a194",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/62.webp": "083ed37c93bc63bf7922621c2a25a88db44dcf4c07ecd52680215a4465b1a2f0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/152.webp": "0107605301a540faf05d8a740a33102dc71795cdc74ad0570cc68b5cf4f851d0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/84.webp": "a7892fe8f8a93acdbf6cdc8f53d6eadab1f152ec9eb1b72d6e74afcd5785bcdc",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/26.webp": "dbf34cbf76d4f86dac42d1810b487d4598caa511bbdec8104a8d9a9c86a8b0ff",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/79.webp": "a66fe1e29cf50024ac7fa9d2881c5275551a2681c0870c541e554327f14e3213",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/139.webp": "5636226c2cfc37abd01027586834069c1e152c8b2835b0e366db6fdef9ca927d",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/16.webp": "527473ae0aa4a85d71dbf0e9864ea98e0d36e47b35fc136eddf58a6350c03eeb",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/6.webp": "5f4de9dc1b7dc3c454676c4eead13f5f2c954e9aa8ab976ab49bcab3855e27ea",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/141.webp": "99e16034b8b32c95919389d01c6c10dfd475f40c76fb020b7509429c343c57f9",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/120.webp": "04197e0bb3e114a4c71090636b0e79ce656933accd0416f60bc3fac2e2b143e8",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/14.webp": "19b3d1aefc9b06d9986a073335388cbbf4adc14fcd030584c79f5f921bb09372",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/161.webp": "494939f9a758772b3be73cb2a4c9afd5ba578597e748c1319fa04d184e4197fd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/94.webp": "fc7ef82b82b27c3231034fa7d30fe83ca60cf9bb96a7d0b25407e3ac21e1ffaa",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/14.webp": "19b3d1aefc9b06d9986a073335388cbbf4adc14fcd030584c79f5f921bb09372",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/103.webp": "0478bf0910adbfa827384c0664618de9992417053701da7f6fde3e86ba5f9948",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/43.webp": "6868185fbc5d5d20a138fbecd2482b2ce695826a901f8035e1131755645c8e51",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/150.webp": "2365ca240e55dc05508d456e1ebe3f82d3eeb676385ce184afbdb3951aeadde1",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/115.webp": "5e1effcc7f3cb7990f9d7ebb8cc42e885809bc858ba68600bcc91a4e5c568c0f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/37.webp": "db5258ec9f22e452ca8183683972ef4aa194a6b6a24e6858d92f81591f3c492a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/144.webp": "6d6af92222ed05bdbdf34f24f37758a0d770a146071d6893749d4eb5a1c0c771",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/10.webp": "07cc411ab3999449f49e876232331e722fc21170e055df00c415d2d5e7175ca3",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/117.webp": "426d08bcfa2ac73c3c00370e6dcaffa77cec3efe62a0986675d38b570cd15de4",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/49.webp": "fc869a2f2f185e67fe9336d8e5777a5100cf8c0914c6e416d9a1fe60bce11909",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/74.webp": "ca07bddf56905a035e53834c1718eb0a7ed3c377d5110331f41e2b194605de77",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/22.webp": "7fce59368e2628ca9ebb550cf5d8a53003a6f26fd184683a4c7e39e4665e8434",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/44.webp": "38b5474770ec130f8fc0a1c2fc075a36fe7fad476e8cc4be200627f03702cedc",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/28.webp": "dc21b392fa14ff9f63a7234cdfdd2b0c2351a0133067d7dc8a52d64e79c2c55a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/153.webp": "04c4e9a9a7b911b2b54b2947d0c5d680252e6ac5eb637f9babb9cc24457a9df5",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/56.webp": "76050c6bb5fa0a80ace0595119cb4ebd0c53bed4e53f9b125469d329953e4eb9",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/40.webp": "ce0a40746cf1f196a08b345825c9a89ad0e3738f7316c647cc7d046d83de04cd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/54.webp": "3fc72cb39f6e926cb8608d194c5eee52a550f2f9678eb626dc95afd33b290f1a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/47.webp": "a7ba315ec61a8a09874706bb76c900148e6f1ea00986b063e177054ef1a803b3",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/55.webp": "2c5055556b3be52ad4050fe9ea47f4517151c1e036d0745c1a17e789ba51903b",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/155.webp": "e9eba15479522867a8706a74b6cbf5546a573da6d0039b5f5288b8f622be596f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/130.webp": "39243127998ad16a825a19c6ec87a2a4088c63f049f4f1126f7765835ba486ae",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/23.webp": "8c8483af32d5c5d8072e1a5a242fa7d810db5223eaf103a6da4768491e3eaf1b",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/31.webp": "c739a865d295ef36c2aecdf1d80330f827c3a984a414b87f9f6e42f79a372d91",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/99.webp": "7aab188f26d868928110d5fb81d7945e803495fb3c93e3fd0b4483474c4dd6a9",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/89.webp": "1309f5e1f8a68835f39a526cb94e6c521ba97ed77430aa4a5193d22bba89967a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/52.webp": "d07d4167b5a2c8a811f872046c2c61d0d0061e253b014c89795986cc2dd7ed73",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/20.webp": "87263a48537e3e6f730d7b318b6342573718313a6d6ffb9dfe93837b61ca1239",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/134.webp": "5d79874239f9fc16a6a620c13b552910b0e2dcdebf1f2302c5fb002331437468",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/18.webp": "bcc6b47d12a301fd21c26bf81c2b52dccd44fdee4829d1abcfbd870baddd5ed7",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/86.webp": "590aab5880fe0c6036d0d6f0cc8b75e31f7d7f8fab2c32055ff756bab03c4034",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/93.webp": "777bd9ae793716d287bef5f7bdbf0e8f8e845ac55cbeee2a65b8110122f82b6a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/29.webp": "1740e48a56fa0ea245b36f495f0b1303cc10590ea454131e8acdcc07e2d94865",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/105.webp": "fa8c98622546c1d4e59f44517781844debef849f12abcb97bb2bc40b9a276ef4",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/75.webp": "fccfebbb8598c3a32419f7ec82f3757913cfbbc7ee5f6a5ce24a2c8f08fcc91c",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/41.webp": "c2d603cca40bbb370e4fa8c16970c2e3f92070e93696abd5a42d27298602c8da",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/87.webp": "ae150e017cd132fe13527f883561db19e90e00b9b29f2a9e2bfac5ad6de56933",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/3.webp": "7279b5ebd0601b6c9a684ee9fdd7653d70dac985bf15cb627e5f424343157bcf",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/67.webp": "6683c2f8752bd9dd72ade2020809cfc968009ec2e0b45867bd578cf2be621468",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/80.webp": "6fede0d7745b0cbb83cf938dc6981ff9b51d1369ebe18d25a6c43d43f3a40f7f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/48.webp": "982d64e6c715ce1389b255df679d38f8d0689a586d28dd9f938716b273ef8f17",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/61.webp": "48bf3f13f44ba19ac3954331e62dd9d2e23afd98d65b7a7c1003f153f6a79b4d",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/103.webp": "0478bf0910adbfa827384c0664618de9992417053701da7f6fde3e86ba5f9948",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/20.webp": "87263a48537e3e6f730d7b318b6342573718313a6d6ffb9dfe93837b61ca1239",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/139.webp": "5636226c2cfc37abd01027586834069c1e152c8b2835b0e366db6fdef9ca927d",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/122.webp": "5e5c38d6ee83a7f6faf630ccc5fdde93521f1dd4e02aec88d145ae30fac25124",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/110.webp": "7760d0f7f6a399d2f8f1f2b114f16269c79ace3ca0b986b4e5acdbbc56f7d792",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/54.webp": "3fc72cb39f6e926cb8608d194c5eee52a550f2f9678eb626dc95afd33b290f1a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/5.webp": "d8b9af048bfef20b311c8754dadc3fe2a4829fa0304d39f1757fce868ae343a0",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/82.webp": "5f39e017a9425e0b5235e8b2cdc078ad880f699e292530c8c25984c7a8acc5bb",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/132.webp": "56c4c13a7a1b41f451ef1f151a2c49eacca117f9843f2c2f6bb6474e663d5f20",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/50.webp": "0cb5a485c62af375ea4efab5e17587219526c193f4b4f9e31322c89d8939c546",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/147.webp": "f17642e1c1f0a6a9d5d8a8805842d57523edcc16d88eed474d050dc14d4c3bbd",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/23.webp": "8c8483af32d5c5d8072e1a5a242fa7d810db5223eaf103a6da4768491e3eaf1b",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/57.webp": "544bba86b65e5e2eac2611679e78d42dd7ba8c699fe61dabf217c2043cba23f6",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/104.webp": "d829ab4f6574c00b3c6042c3d1a921111e4770ef647d055802fe6d404f5f5303",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/91.webp": "d29e3d455f3635525abce2b41ee4f1d8f0859996642f3e4f0ce0131e7542964a",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/140.webp": "c65db855b352866fbd4d17aae6e5812e8b5e9b0d8ec419fc22a624f54d2e3a11",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/30.webp": "a150b76ab1b10e27e4303149e0ca2f64e9a7abf201fbb8caf2f2fdec6329128f",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/339/image/47.webp": "a7ba315ec61a8a09874706bb76c900148e6f1ea00986b063e177054ef1a803b3",
    "http://10.122.9.74:54321/storage/v1/object/public/garbagecollector/judge-uploads/340/image/0.webp": "95c32a8c6f3db73760b2b2e17beca2413a08d4a804760e07adf65ecc3106ce02"
  },
  "sources": {
    "manifest": "judge-simple-2026-10-18_060145-cb1447b79-changed.manifest.json",
    "previous_csv": "judge-simpleA-2026-10-18_003227-a67456043.csv",
    "current_csv": "judge-simpleA-2026-10-18_060145-cb1447b79-changed.csv",
    "evaluation": "/Users/miridih/Documents/miricanvas-iui-simple-relayout/eval-out/runs/simple-cb1447b79-20261018-full"
  },
  "root_cause_replay": {
    "checked_at": "2026-10-18T09:49:56+09:00",
    "scope": "26 frozen-input diagnostic replays, all output SHA-256 match; no network, renderer or LLM calls; instrumentation in /tmp only; original repository unchanged",
    "matched_outputs": {
      "324-70": {
        "kind": "result",
        "key": "324-70",
        "hash": "edc5df64e9c1469a202dfb9c02ebe579f59d0bbcadd117491ac6af207843126c",
        "expected": "edc5df64e9c1469a202dfb9c02ebe579f59d0bbcadd117491ac6af207843126c",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "b45ac07f-fafd-4943-8ece-a00441df8d81",
              "reason": "available-area-exhausted"
            },
            {
              "nodeId": "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
              "reason": "available-area-exhausted"
            },
            {
              "nodeId": "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e",
              "reason": "available-area-exhausted"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "324-299": {
        "kind": "result",
        "key": "324-299",
        "hash": "d77b52259e9bb6c4f7bb923545a0183861af1508ed3ca34c733bc55b4c193030",
        "expected": "d77b52259e9bb6c4f7bb923545a0183861af1508ed3ca34c733bc55b4c193030",
        "report": {
          "basis": "predicted",
          "status": "resolved",
          "issues": [],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "329-142": {
        "kind": "result",
        "key": "329-142",
        "hash": "8612db66d62ee32b761ecc6d7abbe0247079f399401548c66b75a0ef328f0185",
        "expected": "8612db66d62ee32b761ecc6d7abbe0247079f399401548c66b75a0ef328f0185",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "325-101": {
        "kind": "result",
        "key": "325-101",
        "hash": "50cdf815b7a5fc85d97b66364f3cd5d523332e016e05ffc81628b04f2cb7c69e",
        "expected": "50cdf815b7a5fc85d97b66364f3cd5d523332e016e05ffc81628b04f2cb7c69e",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "323-143": {
        "kind": "result",
        "key": "323-143",
        "hash": "30912e369162e3ab9ae3597f2b48c7cf1a45f276a3a2dc779808c16b31e7c0b5",
        "expected": "30912e369162e3ab9ae3597f2b48c7cf1a45f276a3a2dc779808c16b31e7c0b5",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "b7936c75-ba78-4b9c-ac53-77c9f62d0659",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "323-279": {
        "kind": "result",
        "key": "323-279",
        "hash": "8aee004fc29f4958049132da04818c698d8033edb2d9ab01b7e122878471b4a3",
        "expected": "8aee004fc29f4958049132da04818c698d8033edb2d9ab01b7e122878471b4a3",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "6c5a4e74-05d1-4576-be34-8e8c246b4834",
              "reason": "available-area-exhausted"
            },
            {
              "nodeId": "b5a26073-1084-48fb-b85f-44279edc49c5",
              "reason": "available-area-exhausted"
            },
            {
              "nodeId": "fa13729f-7bd7-42a5-a4c8-45e60312444a",
              "reason": "available-area-exhausted"
            },
            {
              "nodeId": "3287d1b1-14f5-4297-92cb-77e6d62e05a2",
              "reason": "available-area-exhausted"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "323-321": {
        "kind": "result",
        "key": "323-321",
        "hash": "0d5cc605c5646d2d68bf063704b2f5094d674032e362ed690da93aef16a11e4f",
        "expected": "0d5cc605c5646d2d68bf063704b2f5094d674032e362ed690da93aef16a11e4f",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "3aab479b-fb6d-4219-90fc-93e03a803ae5",
              "reason": "container-unresolved"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "323-369": {
        "kind": "result",
        "key": "323-369",
        "hash": "614cb61ad5733eb018e74e2ee2195339c45a6185d097bf02444b22311d708231",
        "expected": "614cb61ad5733eb018e74e2ee2195339c45a6185d097bf02444b22311d708231",
        "report": {
          "basis": "predicted",
          "status": "resolved",
          "issues": [],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "323-400": {
        "kind": "result",
        "key": "323-400",
        "hash": "6a1c63289e65dd8949e3a0b87a29e33c69ec18a646915c11ce29e5558f7d7dd5",
        "expected": "6a1c63289e65dd8949e3a0b87a29e33c69ec18a646915c11ce29e5558f7d7dd5",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "45429313-4a75-427f-ac33-1f843f4cac4c",
              "reason": "available-area-exhausted"
            },
            {
              "nodeId": "c2fb4efd-9ae5-4ad8-bbf6-c99be49f9fb3",
              "reason": "available-area-exhausted"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "324-11": {
        "kind": "result",
        "key": "324-11",
        "hash": "e1a13888979111b90eef073fc1f7b6451a223aaa85506c73fe2ea73745c24f39",
        "expected": "e1a13888979111b90eef073fc1f7b6451a223aaa85506c73fe2ea73745c24f39",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "1c444d75-110b-4677-a106-dc1d9a270a39",
              "reason": "font-floor-reached"
            },
            {
              "nodeId": "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
              "reason": "font-floor-reached"
            },
            {
              "nodeId": "62564cbb-93ef-434b-8556-538957426446",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "324-118": {
        "kind": "result",
        "key": "324-118",
        "hash": "1680f6ba312e9ad4776a186c69297474f852665a45da6f9bb78e44a730f24f16",
        "expected": "1680f6ba312e9ad4776a186c69297474f852665a45da6f9bb78e44a730f24f16",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
              "reason": "font-floor-reached"
            },
            {
              "nodeId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
              "reason": "available-area-exhausted"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "324-172": {
        "kind": "result",
        "key": "324-172",
        "hash": "13bc1f121bf70b3546e22500821781778379f06c11c02a730ed6767d86a2cdfb",
        "expected": "13bc1f121bf70b3546e22500821781778379f06c11c02a730ed6767d86a2cdfb",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "fc4ad465-9b9e-4034-a877-aba05523aea6",
              "reason": "available-area-exhausted"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "324-378": {
        "kind": "result",
        "key": "324-378",
        "hash": "9f4c0304633a903f945b18f70937f7d6eb58768c1bff2211e59ad7ceea8205ae",
        "expected": "9f4c0304633a903f945b18f70937f7d6eb58768c1bff2211e59ad7ceea8205ae",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "ec302cec-20ec-4d62-b786-68ffe4fb383e",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "326-113": {
        "kind": "result",
        "key": "326-113",
        "hash": "8b7f3a9feaae7e46d1333a163ab6b4bf230890422a70d14a5e2394fba806a524",
        "expected": "8b7f3a9feaae7e46d1333a163ab6b4bf230890422a70d14a5e2394fba806a524",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "326-209": {
        "kind": "result",
        "key": "326-209",
        "hash": "dd4c82f5f02bbbe1152ab4d1a32ded9c2b1614026a4750dc06c5c3cd50dc0194",
        "expected": "dd4c82f5f02bbbe1152ab4d1a32ded9c2b1614026a4750dc06c5c3cd50dc0194",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "3742dbeb-428a-4c36-a70b-4e6bf87899eb",
              "reason": "container-unresolved"
            },
            {
              "nodeId": "46855bc0-5b50-4e7f-8f72-f7b896001f25",
              "reason": "available-area-exhausted"
            },
            {
              "nodeId": "4694a24a-5c4c-4f6f-ab15-9caf23bc472b",
              "reason": "container-unresolved"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "326-384": {
        "kind": "result",
        "key": "326-384",
        "hash": "a2c03b500932e06bdd04fa04712d891f0815f031682db62aebac03f74dd40c10",
        "expected": "a2c03b500932e06bdd04fa04712d891f0815f031682db62aebac03f74dd40c10",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
              "reason": "available-area-exhausted"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "327-296": {
        "kind": "result",
        "key": "327-296",
        "hash": "1a707fc00379c6b05e6d026235abb1fbd16c0f360c2e405e15fe0c01c0463ca7",
        "expected": "1a707fc00379c6b05e6d026235abb1fbd16c0f360c2e405e15fe0c01c0463ca7",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "327-437": {
        "kind": "result",
        "key": "327-437",
        "hash": "4ad5d937460a93dd46288dd9a2713aece83877bfeb5ab48708a2f04cfee2d0a9",
        "expected": "4ad5d937460a93dd46288dd9a2713aece83877bfeb5ab48708a2f04cfee2d0a9",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "328-328": {
        "kind": "result",
        "key": "328-328",
        "hash": "850b5088e3fdf33d0f4c7fc2e44d90c081b0d980deef3cb5d511605c8311f3ec",
        "expected": "850b5088e3fdf33d0f4c7fc2e44d90c081b0d980deef3cb5d511605c8311f3ec",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
              "reason": "available-area-exhausted"
            },
            {
              "nodeId": "9d1a34d4-c90f-4e8e-8144-f80e310ebb82",
              "reason": "available-area-exhausted"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "328-38": {
        "kind": "result",
        "key": "328-38",
        "hash": "3ff461b3e034239d83e540afcd9c842202eb6f5281fcd025ae4ed955283082b5",
        "expected": "3ff461b3e034239d83e540afcd9c842202eb6f5281fcd025ae4ed955283082b5",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "328-396": {
        "kind": "result",
        "key": "328-396",
        "hash": "05f220914c794ca4af10fecc700b85a8819cc452741188a657bcf2476ceeb32a",
        "expected": "05f220914c794ca4af10fecc700b85a8819cc452741188a657bcf2476ceeb32a",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
              "reason": "available-area-exhausted"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "328-437": {
        "kind": "result",
        "key": "328-437",
        "hash": "5b2b267d0c82b7cfa173ba3f4f26cbe1ce71aef9a63eebed747faeed180e134e",
        "expected": "5b2b267d0c82b7cfa173ba3f4f26cbe1ce71aef9a63eebed747faeed180e134e",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "ad729899-1d2c-48cb-9056-e4fdd24c1c9a",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "328-78": {
        "kind": "result",
        "key": "328-78",
        "hash": "f6071f2ac996e7f1195a6eaba1de8fe65fba18e22f1def8a34922c5faed3ff0b",
        "expected": "f6071f2ac996e7f1195a6eaba1de8fe65fba18e22f1def8a34922c5faed3ff0b",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "e1e758b8-44a6-4bdf-9937-470b4ed59a7d",
              "reason": "container-unresolved"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "329-11": {
        "kind": "result",
        "key": "329-11",
        "hash": "a08e2d17480ed5207ac9140980ee382173ba62085506afb66df90e4378a093b5",
        "expected": "a08e2d17480ed5207ac9140980ee382173ba62085506afb66df90e4378a093b5",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "1c444d75-110b-4677-a106-dc1d9a270a39",
              "reason": "font-floor-reached"
            },
            {
              "nodeId": "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
              "reason": "font-floor-reached"
            },
            {
              "nodeId": "62564cbb-93ef-434b-8556-538957426446",
              "reason": "font-floor-reached"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "329-209": {
        "kind": "result",
        "key": "329-209",
        "hash": "9c0277f48fcc659a8111d0dae24f18f08135b1d092db6159f6e606ebe299eb6e",
        "expected": "9c0277f48fcc659a8111d0dae24f18f08135b1d092db6159f6e606ebe299eb6e",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "46855bc0-5b50-4e7f-8f72-f7b896001f25",
              "reason": "available-area-exhausted"
            },
            {
              "nodeId": "4694a24a-5c4c-4f6f-ab15-9caf23bc472b",
              "reason": "container-unresolved"
            },
            {
              "nodeId": "3742dbeb-428a-4c36-a70b-4e6bf87899eb",
              "reason": "container-unresolved"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      },
      "329-320": {
        "kind": "result",
        "key": "329-320",
        "hash": "32d58396c7a29d77a62d94d5865d86b5f5746076fb0fb178ca8748341f3294b9",
        "expected": "32d58396c7a29d77a62d94d5865d86b5f5746076fb0fb178ca8748341f3294b9",
        "report": {
          "basis": "predicted",
          "status": "unresolved",
          "issues": [
            {
              "nodeId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
              "reason": "available-area-exhausted"
            }
          ],
          "rejected": [],
          "measurementRequests": 0
        }
      }
    },
    "traces": {
      "trace.jsonl": [
        {
          "kind": "case",
          "key": "324-70"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [
            "809789cc-2e0c-4413-aee6-feae380b56fb",
            "b45ac07f-fafd-4943-8ece-a00441df8d81",
            "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
            "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e"
          ],
          "immovable": [
            "c51c9bfe-9129-44bc-a047-26cad51886b8",
            "f65a9a71-2346-44d6-9af0-7000c1a911fc",
            "b7b9a138-6a7e-41c8-bed2-81fdf603d478",
            "1ed4b51f-67af-43cd-92f8-57bb08523d0e",
            "309400d7-b3a6-428c-898c-6884e26c7810",
            "5d6f6e5e-7faf-4309-86a4-e94e9d78f70c",
            "265f1706-bd42-4207-888a-5c3149052c09",
            "8a366cb7-b192-4c92-9504-2da02866fb1f"
          ]
        },
        {
          "kind": "badge-width",
          "id": "809789cc-2e0c-4413-aee6-feae380b56fb",
          "frame": {
            "left": 323.16983190999997,
            "top": 232.35920538,
            "width": 44.78181261,
            "height": 75.9201777
          },
          "width": 63.98985798502761
        },
        {
          "kind": "badge-region",
          "id": "809789cc-2e0c-4413-aee6-feae380b56fb",
          "wanted": {
            "left": 313.56580922248617,
            "top": 232.3592053798281,
            "width": 63.98985798502761,
            "height": 75.92017770034377
          },
          "region": {
            "left": 308.2515482067359,
            "top": 226.57658330515312,
            "width": 74.61845226652827,
            "height": 86.2106081096938
          },
          "contains": true
        },
        {
          "kind": "badge-gates",
          "id": "809789cc-2e0c-4413-aee6-feae380b56fb",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "b45ac07f-fafd-4943-8ece-a00441df8d81",
          "frame": {
            "left": 323.16983190999997,
            "top": 403.09431825,
            "width": 44.78181261,
            "height": 75.9201777
          },
          "width": 80.0415552564314
        },
        {
          "kind": "badge-region",
          "id": "b45ac07f-fafd-4943-8ece-a00441df8d81",
          "wanted": {
            "left": 305.5399605867843,
            "top": 403.0943182498281,
            "width": 80.0415552564314,
            "height": 75.92017770034377
          },
          "region": {
            "left": 308.2521571093854,
            "top": 404.6382130320346,
            "width": 74.61723446122926,
            "height": 71.55639725593073
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
          "frame": {
            "left": 324.61995659999997,
            "top": 572.14489056,
            "width": 41.88168647,
            "height": 75.9201777
          },
          "width": 80.09577297208122
        },
        {
          "kind": "badge-region",
          "id": "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
          "wanted": {
            "left": 305.51291334895933,
            "top": 572.1448905598281,
            "width": 80.09577297208122,
            "height": 75.92017770034377
          },
          "region": {
            "left": 309.52321062719994,
            "top": 576.1844496569536,
            "width": 72.07512742560016,
            "height": 71.49572788609294
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e",
          "frame": {
            "left": 324.61995659999997,
            "top": 742.73605089,
            "width": 41.88168647,
            "height": 75.9201777
          },
          "width": 83.29527170413296
        },
        {
          "kind": "badge-region",
          "id": "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e",
          "wanted": {
            "left": 303.9131639829335,
            "top": 742.7360508898281,
            "width": 83.29527170413296,
            "height": 75.92017770034377
          },
          "region": {
            "left": 309.523639888121,
            "top": 748.653265822774,
            "width": 72.07426890375802,
            "height": 67.74119381445212
          },
          "contains": false
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": true
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [
            "809789cc-2e0c-4413-aee6-feae380b56fb",
            "b45ac07f-fafd-4943-8ece-a00441df8d81",
            "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
            "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e"
          ],
          "immovable": [
            "c51c9bfe-9129-44bc-a047-26cad51886b8",
            "f65a9a71-2346-44d6-9af0-7000c1a911fc",
            "b7b9a138-6a7e-41c8-bed2-81fdf603d478",
            "1ed4b51f-67af-43cd-92f8-57bb08523d0e",
            "309400d7-b3a6-428c-898c-6884e26c7810",
            "5d6f6e5e-7faf-4309-86a4-e94e9d78f70c",
            "265f1706-bd42-4207-888a-5c3149052c09",
            "8a366cb7-b192-4c92-9504-2da02866fb1f"
          ]
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "324-70",
          "hash": "edc5df64e9c1469a202dfb9c02ebe579f59d0bbcadd117491ac6af207843126c",
          "expected": "edc5df64e9c1469a202dfb9c02ebe579f59d0bbcadd117491ac6af207843126c",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "b45ac07f-fafd-4943-8ece-a00441df8d81",
                "reason": "available-area-exhausted"
              },
              {
                "nodeId": "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
                "reason": "available-area-exhausted"
              },
              {
                "nodeId": "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e",
                "reason": "available-area-exhausted"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "324-299"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [
            "dd5a8db3-7a02-481b-b234-3c1947b6d844",
            "23beec29-3f2a-4c56-9273-a18673e209ad",
            "482c7b14-f308-415a-9289-f39ef6012102",
            "c79f1945-9df2-49c3-97ac-a84e0da52139",
            "85864396-2662-43d5-a5a5-fcdf8ea56136",
            "f4016626-206f-4bf3-8544-2f4d19ce6861"
          ],
          "immovable": []
        },
        {
          "kind": "badge-width",
          "id": "dd5a8db3-7a02-481b-b234-3c1947b6d844",
          "frame": {
            "left": 451.87001140999996,
            "top": 384.3639,
            "width": 22.95009139,
            "height": 44.36303571
          },
          "width": 34.66673994475239
        },
        {
          "kind": "badge-region",
          "id": "dd5a8db3-7a02-481b-b234-3c1947b6d844",
          "wanted": {
            "left": 446.01168713262376,
            "top": 384.3639,
            "width": 34.66673994475239,
            "height": 45.39228948994889
          },
          "region": {
            "left": 443.69462546892646,
            "top": 382.5602602034996,
            "width": 39.30100754214698,
            "height": 49.315389833000836
          },
          "contains": true
        },
        {
          "kind": "badge-gates",
          "id": "dd5a8db3-7a02-481b-b234-3c1947b6d844",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "23beec29-3f2a-4c56-9273-a18673e209ad",
          "frame": {
            "left": 816.37801741,
            "top": 384.10058993999996,
            "width": 23.24364563,
            "height": 7.57212075
          },
          "width": 40.273817784671834
        },
        {
          "kind": "badge-region",
          "id": "23beec29-3f2a-4c56-9273-a18673e209ad",
          "wanted": {
            "left": 807.8629313326641,
            "top": 384.10058993999996,
            "width": 40.273817784671834,
            "height": 45.686074455207084
          },
          "region": {
            "left": 808.2019793604575,
            "top": 384.39726429706303,
            "width": 39.595468049085184,
            "height": 45.37608183587395
          },
          "contains": true
        },
        {
          "kind": "badge-gates",
          "id": "23beec29-3f2a-4c56-9273-a18673e209ad",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "482c7b14-f308-415a-9289-f39ef6012102",
          "frame": {
            "left": 1180.47547195,
            "top": 384.06278471999997,
            "width": 23.02988031,
            "height": 29.38261683
          },
          "width": 40.656400733655644
        },
        {
          "kind": "badge-region",
          "id": "482c7b14-f308-415a-9289-f39ef6012102",
          "wanted": {
            "left": 1171.6622117381721,
            "top": 384.06278471999997,
            "width": 40.656400733655644,
            "height": 45.47196924188281
          },
          "region": {
            "left": 1172.3009857751665,
            "top": 384.62815884793946,
            "width": 39.380124449667164,
            "height": 44.64899292412099
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "c79f1945-9df2-49c3-97ac-a84e0da52139",
          "frame": {
            "left": 453.00814757999996,
            "top": 610.62351354,
            "width": 21.7353499,
            "height": 43.69421489
          },
          "width": 40.75979115021612
        },
        {
          "kind": "badge-region",
          "id": "c79f1945-9df2-49c3-97ac-a84e0da52139",
          "wanted": {
            "left": 443.4959269548919,
            "top": 610.62351354,
            "width": 40.75979115021612,
            "height": 44.88859703333555
          },
          "region": {
            "left": 444.82352160942986,
            "top": 610.8402134936831,
            "width": 38.10441449114012,
            "height": 43.499854602633604
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "85864396-2662-43d5-a5a5-fcdf8ea56136",
          "frame": {
            "left": 817.3649326899999,
            "top": 610.13602515,
            "width": 22.33021839,
            "height": 44.69824201
          },
          "width": 40.59248746887693
        },
        {
          "kind": "badge-region",
          "id": "85864396-2662-43d5-a5a5-fcdf8ea56136",
          "wanted": {
            "left": 808.2337981505615,
            "top": 610.13602515,
            "width": 40.59248746887693,
            "height": 45.68601228242878
          },
          "region": {
            "left": 809.1823060206455,
            "top": 609.9120058935893,
            "width": 38.69601394870915,
            "height": 45.09097000282145
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "f4016626-206f-4bf3-8544-2f4d19ce6861",
          "frame": {
            "left": 1181.43718375,
            "top": 610.09821992,
            "width": 22.16427337,
            "height": 30.13892025
          },
          "width": 40.65640073365567
        },
        {
          "kind": "badge-region",
          "id": "f4016626-206f-4bf3-8544-2f4d19ce6861",
          "wanted": {
            "left": 1172.1911200681723,
            "top": 610.09821992,
            "width": 40.65640073365567,
            "height": 45.471969241882974
          },
          "region": {
            "left": 1173.2525398337634,
            "top": 610.0018847551579,
            "width": 38.53821557247329,
            "height": 44.64591248968418
          },
          "contains": false
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": true
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [
            "dd5a8db3-7a02-481b-b234-3c1947b6d844",
            "23beec29-3f2a-4c56-9273-a18673e209ad",
            "482c7b14-f308-415a-9289-f39ef6012102",
            "c79f1945-9df2-49c3-97ac-a84e0da52139",
            "85864396-2662-43d5-a5a5-fcdf8ea56136",
            "f4016626-206f-4bf3-8544-2f4d19ce6861"
          ],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "324-299",
          "hash": "d77b52259e9bb6c4f7bb923545a0183861af1508ed3ca34c733bc55b4c193030",
          "expected": "d77b52259e9bb6c4f7bb923545a0183861af1508ed3ca34c733bc55b4c193030",
          "report": {
            "basis": "predicted",
            "status": "resolved",
            "issues": [],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "329-142"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": true
        },
        {
          "kind": "result",
          "key": "329-142",
          "hash": "8612db66d62ee32b761ecc6d7abbe0247079f399401548c66b75a0ef328f0185",
          "expected": "8612db66d62ee32b761ecc6d7abbe0247079f399401548c66b75a0ef328f0185",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "325-101"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": true
        },
        {
          "kind": "result",
          "key": "325-101",
          "hash": "50cdf815b7a5fc85d97b66364f3cd5d523332e016e05ffc81628b04f2cb7c69e",
          "expected": "50cdf815b7a5fc85d97b66364f3cd5d523332e016e05ffc81628b04f2cb7c69e",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        }
      ],
      "overlap-trace.jsonl": [
        {
          "kind": "case",
          "key": "329-142"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "overlap-candidates",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "obstacleId": "911510c5-636d-4b4f-b5f0-0cc68b4f9089",
          "ink": {
            "left": 302.8481846340871,
            "top": 526.8997882475072,
            "width": 355.9135150100654,
            "height": 24.641222195574755
          },
          "obstacle": {
            "left": 292.19478152,
            "top": 498.30082618999995,
            "width": 83.39838365,
            "height": 83.39838365
          },
          "moves": [
            {
              "dx": 0,
              "dy": -45.63606493410485
            },
            {
              "dx": 0,
              "dy": 47.372241101469385
            },
            {
              "dx": 74.70701352008608,
              "dy": 0
            },
            {
              "dx": -368.342224475908,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 45.63608739033941,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 45.63608739033941,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 6.528123417507231,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 6.528123417507231,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 47.3639670868975,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 47.3639670868975,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 8.079064276917961,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 8.079064276917961,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": 74.70701352008608,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": 377.5551981541732,
            "top": 526.8997882475072,
            "width": 355.9135150100654,
            "height": 24.641222195574755
          },
          "margin": 8.412720848056537
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -368.342224475908,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": -65.49403984182089,
            "top": 526.8997882475072,
            "width": 355.9135150100654,
            "height": 24.641222195574755
          },
          "margin": 8.412720848056537
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -368.342224475908,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 67.19999999999999,
            "top": 478.2411927416128,
            "width": 608.6077738565693,
            "height": 123.5175920705397
          },
          "span": {
            "left": -65.49403984182089,
            "top": 526.8997882475072,
            "width": 355.9135150100654,
            "height": 24.641222195574755
          },
          "margin": 8.412720848056537
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "overlap-candidates",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "obstacleId": "911510c5-636d-4b4f-b5f0-0cc68b4f9089",
          "ink": {
            "left": 312.2213895256447,
            "top": 526.5763968932125,
            "width": 339.32567619974094,
            "height": 23.56780858124101
          },
          "obstacle": {
            "left": 292.19478152,
            "top": 498.30082618999995,
            "width": 83.39838365,
            "height": 83.39838365
          },
          "moves": [
            {
              "dx": 0,
              "dy": -43.81862392307358
            },
            {
              "dx": 0,
              "dy": 47.27499641336126
            },
            {
              "dx": 64.91317258612561,
              "dy": 0
            },
            {
              "dx": -360.7069545147383,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 43.81864637930812,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 43.81864637930812,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 6.204732063212532,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 6.204732063212532,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 45.31470826850676,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 45.31470826850676,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 7.523855115263814,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 7.523855115263814,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": 64.91317258612561,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": 377.1345621117703,
            "top": 526.5763968932125,
            "width": 339.32567619974094,
            "height": 23.56780858124101
          },
          "margin": 7.99208480565371
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -360.7069545147383,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": -48.485564989093575,
            "top": 526.5763968932125,
            "width": 339.32567619974094,
            "height": 23.56780858124101
          },
          "margin": 7.99208480565371
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -360.7069545147383,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 67.19999999999999,
            "top": 478.2411927416128,
            "width": 608.6077738565693,
            "height": 123.5175920705397
          },
          "span": {
            "left": -48.485564989093575,
            "top": 526.5763968932125,
            "width": 339.32567619974094,
            "height": 23.56780858124101
          },
          "margin": 7.99208480565371
        },
        {
          "kind": "overlap-candidates",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "obstacleId": "911510c5-636d-4b4f-b5f0-0cc68b4f9089",
          "ink": {
            "left": 320.6954083886125,
            "top": 526.266160290052,
            "width": 322.35939238975385,
            "height": 22.389418152178955
          },
          "obstacle": {
            "left": 292.19478152,
            "top": 498.30082618999995,
            "width": 83.39838365,
            "height": 83.39838365
          },
          "moves": [
            {
              "dx": 0,
              "dy": -41.930392650568294
            },
            {
              "dx": 0,
              "dy": 47.18562877623912
            },
            {
              "dx": 56.03954948287514,
              "dy": 0
            },
            {
              "dx": -351.81508532743635,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 41.930415106802855,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 41.930415106802855,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 5.894495460051985,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 5.894495460051985,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 43.360520843398774,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 43.360520843398774,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 7.1476623595006,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 7.1476623595006,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": 56.03954948287514,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": 376.73495787148767,
            "top": 526.266160290052,
            "width": 322.35939238975385,
            "height": 22.389418152178955
          },
          "margin": 7.592480565371024
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -351.81508532743635,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": -31.11967693882383,
            "top": 526.266160290052,
            "width": 322.35939238975385,
            "height": 22.389418152178955
          },
          "margin": 7.592480565371024
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -351.81508532743635,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 67.19999999999999,
            "top": 478.2411927416128,
            "width": 608.6077738565693,
            "height": 123.5175920705397
          },
          "span": {
            "left": -31.11967693882383,
            "top": 526.266160290052,
            "width": 322.35939238975385,
            "height": 22.389418152178955
          },
          "margin": 7.592480565371024
        },
        {
          "kind": "overlap-candidates",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "obstacleId": "911510c5-636d-4b4f-b5f0-0cc68b4f9089",
          "ink": {
            "left": 328.7457263084319,
            "top": 525.9714355170494,
            "width": 306.24142277026607,
            "height": 21.269947244570005
          },
          "obstacle": {
            "left": 292.19478152,
            "top": 498.30082618999995,
            "width": 83.39838365,
            "height": 83.39838365
          },
          "moves": [
            {
              "dx": 0,
              "dy": -40.13657294168819
            },
            {
              "dx": 0,
              "dy": 47.10072952097317
            },
            {
              "dx": 47.60960753478718,
              "dy": 0
            },
            {
              "dx": -343.3678095994994,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 40.13659539792275,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 40.13659539792275,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 5.599770687049386,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 5.599770687049386,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 41.50404278954619,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 41.50404278954619,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 6.790279241525468,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 6.790279241525468,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": 47.60960753478718,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": 376.3553338432191,
            "top": 525.9714355170494,
            "width": 306.24142277026607,
            "height": 21.269947244570005
          },
          "margin": 7.212856537102472
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -343.3678095994994,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": -14.622083291067497,
            "top": 525.9714355170494,
            "width": 306.24142277026607,
            "height": 21.269947244570005
          },
          "margin": 7.212856537102472
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -343.3678095994994,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 67.19999999999999,
            "top": 478.2411927416128,
            "width": 608.6077738565693,
            "height": 123.5175920705397
          },
          "span": {
            "left": -14.622083291067497,
            "top": 525.9714355170494,
            "width": 306.24142277026607,
            "height": 21.269947244570005
          },
          "margin": 7.212856537102472
        },
        {
          "kind": "overlap-candidates",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "obstacleId": "911510c5-636d-4b4f-b5f0-0cc68b4f9089",
          "ink": {
            "left": 336.3935283322603,
            "top": 525.6914469826969,
            "width": 290.92935163175287,
            "height": 20.20644988234151
          },
          "obstacle": {
            "left": 292.19478152,
            "top": 498.30082618999995,
            "width": 83.39838365,
            "height": 83.39838365
          },
          "moves": [
            {
              "dx": 0,
              "dy": -38.43116163976339
            },
            {
              "dx": 39.60116268410368,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 47.02007522847051
            },
            {
              "dx": -335.34289765795944,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 38.431184095997935,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 38.431184095997935,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 5.3197821526969165,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 5.3197821526969165,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:right",
          "error": 39.60116268410377,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:right",
          "error": 39.60116268410377,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 39.74038863838638,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 39.74038863838638,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 6.450765279449229,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 6.450765279449229,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -335.34289765795944,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": 1.0506306743008622,
            "top": 525.6914469826969,
            "width": 290.92935163175287,
            "height": 20.20644988234151
          },
          "margin": 6.852213710247349
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -335.34289765795944,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 67.19999999999999,
            "top": 478.2411927416128,
            "width": 608.6077738565693,
            "height": 123.5175920705397
          },
          "span": {
            "left": 1.0506306743008622,
            "top": 525.6914469826969,
            "width": 290.92935163175287,
            "height": 20.20644988234151
          },
          "margin": 6.852213710247349
        },
        {
          "kind": "overlap-candidates",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "obstacleId": "911510c5-636d-4b4f-b5f0-0cc68b4f9089",
          "ink": {
            "left": 343.6589402548973,
            "top": 525.4254578750621,
            "width": 276.38288405016516,
            "height": 19.196127388224436
          },
          "obstacle": {
            "left": 292.19478152,
            "top": 498.30082618999995,
            "width": 83.39838365,
            "height": 83.39838365
          },
          "moves": [
            {
              "dx": 31.993140075954326,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": -36.81223935249913
            },
            {
              "dx": 0,
              "dy": 46.943453650592964
            },
            {
              "dx": -327.71117500847436,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:right",
          "error": 31.99314007595433,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:right",
          "error": 31.99314007595433,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 36.812261808733695,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 36.812261808733695,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 5.053793045062093,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 5.053793045062093,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 38.0649171947843,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 38.0649171947843,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 6.128227015476682,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 6.128227015476682,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -327.71117500847436,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": 15.947765246422932,
            "top": 525.4254578750621,
            "width": 276.38288405016516,
            "height": 19.196127388224436
          },
          "margin": 6.509603024734981
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -327.71117500847436,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 67.19999999999999,
            "top": 478.2411927416128,
            "width": 608.6077738565693,
            "height": 123.5175920705397
          },
          "span": {
            "left": 15.947765246422932,
            "top": 525.4254578750621,
            "width": 276.38288405016516,
            "height": 19.196127388224436
          },
          "margin": 6.509603024734981
        },
        {
          "kind": "overlap-candidates",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "obstacleId": "911510c5-636d-4b4f-b5f0-0cc68b4f9089",
          "ink": {
            "left": 344.2867028377659,
            "top": 525.4024752815076,
            "width": 275.12600719887746,
            "height": 19.10883121490478
          },
          "obstacle": {
            "left": 292.19478152,
            "top": 498.30082618999995,
            "width": 83.39838365,
            "height": 83.39838365
          },
          "moves": [
            {
              "dx": 31.335139616389977,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": -36.672357560889985
            },
            {
              "dx": 0,
              "dy": 46.93683321941249
            },
            {
              "dx": -327.04925980825385,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:right",
          "error": 31.335139616389938,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:right",
          "error": 31.335139616389938,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 36.67238001712457,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 36.67238001712457,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 5.030810451507648,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:top",
          "error": 5.030810451507648,
          "before": 2.2456234546552878e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 37.92014931484067,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 37.92014931484067,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 6.100358333587678,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:d692832a-dbea-4f97-bb55-9d83aba9638a:81510785-d3fc-4ff3-923e-ce1ea6c03d2c:bottom",
          "error": 6.100358333587678,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -327.04925980825385,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 478.24121404675,
            "width": 459.80777385,
            "height": 123.51757191649995
          },
          "span": {
            "left": 17.237443029512065,
            "top": 525.4024752815076,
            "width": 275.12600719887746,
            "height": 19.10883121490478
          },
          "margin": 6.480000000000001
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
          "move": {
            "dx": -327.04925980825385,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 67.19999999999999,
            "top": 478.2411927416128,
            "width": 608.6077738565693,
            "height": 123.5175920705397
          },
          "span": {
            "left": 17.237443029512065,
            "top": 525.4024752815076,
            "width": 275.12600719887746,
            "height": 19.10883121490478
          },
          "margin": 6.480000000000001
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": true
        },
        {
          "kind": "result",
          "key": "329-142",
          "hash": "8612db66d62ee32b761ecc6d7abbe0247079f399401548c66b75a0ef328f0185",
          "expected": "8612db66d62ee32b761ecc6d7abbe0247079f399401548c66b75a0ef328f0185",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "81510785-d3fc-4ff3-923e-ce1ea6c03d2c",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "325-101"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "overlap-candidates",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "obstacleId": "c42778bd-7b11-4d97-8588-c9b48c714ecd",
          "ink": {
            "left": 280.7253896254178,
            "top": 413.3816650055729,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "obstacle": {
            "left": 899.91881435,
            "top": 481.01962249,
            "width": 113.09896457,
            "height": 113.09896457
          },
          "moves": [
            {
              "dx": -48.81731494853612,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 186.61812376605403
            },
            {
              "dx": 0,
              "dy": -246.21981898261512
            },
            {
              "dx": 738.93514301817,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:6e169033-a8df-40cc-ac06-0b456d6530c1:e5795e51-4e98-4b08-bd6f-2ffeac0f9204:left",
          "error": 48.817358032210706,
          "before": 4.308367456928863e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:6e169033-a8df-40cc-ac06-0b456d6530c1:e5795e51-4e98-4b08-bd6f-2ffeac0f9204:left",
          "error": 48.817358032210706,
          "before": 4.308367456928863e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:6e169033-a8df-40cc-ac06-0b456d6530c1:e5795e51-4e98-4b08-bd6f-2ffeac0f9204:left",
          "error": 22.889723885417766,
          "before": 4.308367456928863e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:6e169033-a8df-40cc-ac06-0b456d6530c1:e5795e51-4e98-4b08-bd6f-2ffeac0f9204:left",
          "error": 22.889723885417766,
          "before": 4.308367456928863e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 186.61812376605403
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 280.7253896254178,
            "top": 599.999788771627,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 186.61812376605403
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 275.9077622500001,
            "width": 683.9188574353343,
            "height": 673.9043101007169
          },
          "span": {
            "left": 280.7253896254178,
            "top": 599.999788771627,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -246.21981898261512
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 280.7253896254178,
            "top": 167.1618460229578,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -246.21981898261512
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 118.90215606338074,
            "width": 683.9188574353343,
            "height": 685.1900816866194
          },
          "span": {
            "left": 280.7253896254178,
            "top": 167.1618460229578,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 738.93514301817,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 946.56916327,
            "top": 413.3816650055729,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1019.6605326435879,
            "top": 413.3816650055729,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-candidates",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "obstacleId": "b0a1b4f2-423f-4512-a41a-4c3bdd055fcc",
          "ink": {
            "left": 280.7253896254178,
            "top": 413.3816650055729,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "obstacle": {
            "left": 919.1421664,
            "top": 533.2874875,
            "width": 74.65226047,
            "height": 42.50878466
          },
          "moves": [
            {
              "dx": -29.593962898535988,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 169.0573608780147
            },
            {
              "dx": 0,
              "dy": -194.7135059845759
            },
            {
              "dx": 719.7117909681699,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": -29.593962898535988,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 251.1314267268818,
            "top": 413.3816650055729,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": -29.593962898535988,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 209.29571790320728,
            "top": 275.90776225,
            "width": 690.6230964484525,
            "height": 528.1844755
          },
          "span": {
            "left": 251.1314267268818,
            "top": 413.3816650055729,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 169.0573608780147
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 280.7253896254178,
            "top": 582.4390258835876,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 169.0573608780147
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 275.9077622500001,
            "width": 683.9188574353343,
            "height": 656.3435472126775
          },
          "span": {
            "left": 280.7253896254178,
            "top": 582.4390258835876,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -194.7135059845759
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 280.7253896254178,
            "top": 218.66815902099702,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -194.7135059845759
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 170.40846906141996,
            "width": 683.9188574353343,
            "height": 633.6837686885801
          },
          "span": {
            "left": 280.7253896254178,
            "top": 218.66815902099702,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 719.7117909681699,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 946.56916327,
            "top": 413.3816650055729,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1000.4371805935878,
            "top": 413.3816650055729,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-candidates",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "obstacleId": "ad319caa-4cbd-419e-a133-95ba4ad59d8d",
          "ink": {
            "left": 280.7253896254178,
            "top": 413.3816650055729,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "obstacle": {
            "left": 919.1421664,
            "top": 499.34193737,
            "width": 74.65226047,
            "height": 42.50878466
          },
          "moves": [
            {
              "dx": -29.593962898536216,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 115.81119822098695
            },
            {
              "dx": 0,
              "dy": -209.7854676263265
            },
            {
              "dx": 719.7117909681699,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": -29.593962898536216,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 251.13142672688159,
            "top": 413.3816650055729,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": -29.593962898536216,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 209.29571790320693,
            "top": 275.90776225,
            "width": 690.6230964484528,
            "height": 528.1844755
          },
          "span": {
            "left": 251.13142672688159,
            "top": 413.3816650055729,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 115.81119822098695
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 280.7253896254178,
            "top": 529.1928632265599,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 115.81119822098695
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 275.9077622500001,
            "width": 683.9188574353343,
            "height": 603.0973845556496
          },
          "span": {
            "left": 280.7253896254178,
            "top": 529.1928632265599,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -209.7854676263265
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 280.7253896254178,
            "top": 203.59619737924643,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -209.7854676263265
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 155.33650741966937,
            "width": 683.9188574353343,
            "height": 648.7557303303306
          },
          "span": {
            "left": 280.7253896254178,
            "top": 203.59619737924643,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 719.7117909681699,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 946.56916327,
            "top": 413.3816650055729,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1000.4371805935878,
            "top": 413.3816650055729,
            "width": 661.3679859495306,
            "height": 307.9765747554153
          },
          "margin": 6.642753723587686
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "overlap-candidates",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "obstacleId": "c42778bd-7b11-4d97-8588-c9b48c714ecd",
          "ink": {
            "left": 279.85884501924113,
            "top": 408.35549118000006,
            "width": 655.028038571616,
            "height": 311.04
          },
          "obstacle": {
            "left": 899.91881435,
            "top": 481.01962249,
            "width": 113.09896457,
            "height": 113.09896457
          },
          "moves": [
            {
              "dx": -41.448069240857066,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 189.9221483551531
            },
            {
              "dx": 0,
              "dy": -242.53492116515312
            },
            {
              "dx": 739.638933900759,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:6e169033-a8df-40cc-ac06-0b456d6530c1:e5795e51-4e98-4b08-bd6f-2ffeac0f9204:left",
          "error": 41.44811232453165,
          "before": 4.308367456928863e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:6e169033-a8df-40cc-ac06-0b456d6530c1:e5795e51-4e98-4b08-bd6f-2ffeac0f9204:left",
          "error": 41.44811232453165,
          "before": 4.308367456928863e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:6e169033-a8df-40cc-ac06-0b456d6530c1:e5795e51-4e98-4b08-bd6f-2ffeac0f9204:left",
          "error": 22.023179279241106,
          "before": 4.308367456928863e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:6e169033-a8df-40cc-ac06-0b456d6530c1:e5795e51-4e98-4b08-bd6f-2ffeac0f9204:left",
          "error": 22.023179279241106,
          "before": 4.308367456928863e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 189.9221483551531
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 279.85884501924113,
            "top": 598.2776395351532,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 189.9221483551531
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 275.90776224999996,
            "width": 683.9188574353343,
            "height": 675.2455861088279
          },
          "span": {
            "left": 279.85884501924113,
            "top": 598.2776395351532,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -242.53492116515312
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 279.85884501924113,
            "top": 165.82057001484694,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -242.53492116515312
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 117.56088005526988,
            "width": 683.9188574353343,
            "height": 686.5313576947301
          },
          "span": {
            "left": 279.85884501924113,
            "top": 165.82057001484694,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 739.638933900759,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 946.56916327,
            "top": 408.35549118000006,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1019.4977789200001,
            "top": 408.35549118000006,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-candidates",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "obstacleId": "b0a1b4f2-423f-4512-a41a-4c3bdd055fcc",
          "ink": {
            "left": 279.85884501924113,
            "top": 408.35549118000006,
            "width": 655.028038571616,
            "height": 311.04
          },
          "obstacle": {
            "left": 919.1421664,
            "top": 533.2874875,
            "width": 74.65226047,
            "height": 42.50878466
          },
          "moves": [
            {
              "dx": -22.224717190857046,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 173.92078097999988
            },
            {
              "dx": 0,
              "dy": -192.58800368000007
            },
            {
              "dx": 720.4155818507589,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": -22.224717190857046,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 257.63412782838407,
            "top": 408.35549118000006,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 173.92078097999988
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 279.85884501924113,
            "top": 582.27627216,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 173.92078097999988
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 275.90776224999996,
            "width": 683.9188574353343,
            "height": 659.2442187336746
          },
          "span": {
            "left": 279.85884501924113,
            "top": 582.27627216,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -192.58800368000007
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 279.85884501924113,
            "top": 215.7674875,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -192.58800368000007
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 167.50779754042293,
            "width": 683.9188574353343,
            "height": 636.5844402095772
          },
          "span": {
            "left": 279.85884501924113,
            "top": 215.7674875,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 720.4155818507589,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 946.56916327,
            "top": 408.35549118000006,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1000.2744268700001,
            "top": 408.35549118000006,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-candidates",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "obstacleId": "ad319caa-4cbd-419e-a133-95ba4ad59d8d",
          "ink": {
            "left": 279.85884501924113,
            "top": 408.35549118000006,
            "width": 655.028038571616,
            "height": 311.04
          },
          "obstacle": {
            "left": 919.1421664,
            "top": 499.34193737,
            "width": 74.65226047,
            "height": 42.50878466
          },
          "moves": [
            {
              "dx": -22.22471719085716,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 120.67368066251116
            },
            {
              "dx": 0,
              "dy": -207.65388662021113
            },
            {
              "dx": 720.4155818507588,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": -22.22471719085716,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 257.63412782838395,
            "top": 408.35549118000006,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 120.67368066251116
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 279.85884501924113,
            "top": 529.0291718425112,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": 120.67368066251116
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 275.90776224999996,
            "width": 683.9188574353343,
            "height": 605.9971184161859
          },
          "span": {
            "left": 279.85884501924113,
            "top": 529.0291718425112,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -207.65388662021113
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 275.90776225,
            "width": 683.9188143516598,
            "height": 528.1844755
          },
          "span": {
            "left": 279.85884501924113,
            "top": 200.70160455978893,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 0,
            "dy": -207.65388662021113
          },
          "allowGrow": true,
          "region": {
            "left": 215.9999569163254,
            "top": 152.44191460021182,
            "width": 683.9188574353343,
            "height": 651.6503231497882
          },
          "span": {
            "left": 279.85884501924113,
            "top": 200.70160455978893,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
          "move": {
            "dx": 720.4155818507588,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 946.56916327,
            "top": 408.35549118000006,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1000.27442687,
            "top": 408.35549118000006,
            "width": 655.028038571616,
            "height": 311.04
          },
          "margin": 6.48
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": true
        },
        {
          "kind": "result",
          "key": "325-101",
          "hash": "50cdf815b7a5fc85d97b66364f3cd5d523332e016e05ffc81628b04f2cb7c69e",
          "expected": "50cdf815b7a5fc85d97b66364f3cd5d523332e016e05ffc81628b04f2cb7c69e",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "e5795e51-4e98-4b08-bd6f-2ffeac0f9204",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        }
      ],
      "lost-trace.jsonl": [
        {
          "kind": "case",
          "key": "323-143"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "attempt-gates",
          "intent": true,
          "improves": false
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "323-143",
          "hash": "30912e369162e3ab9ae3597f2b48c7cf1a45f276a3a2dc779808c16b31e7c0b5",
          "expected": "30912e369162e3ab9ae3597f2b48c7cf1a45f276a3a2dc779808c16b31e7c0b5",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "b7936c75-ba78-4b9c-ac53-77c9f62d0659",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "323-279"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [
            "6c5a4e74-05d1-4576-be34-8e8c246b4834",
            "b5a26073-1084-48fb-b85f-44279edc49c5",
            "44e54687-8ae2-4cab-abe2-4fcf6f622b3c",
            "fa13729f-7bd7-42a5-a4c8-45e60312444a",
            "3287d1b1-14f5-4297-92cb-77e6d62e05a2"
          ],
          "immovable": [
            "18c05bcf-1377-4b06-aa4b-886234f87b9c",
            "bbd0894c-b6b7-468d-908d-5985ca7c27dd",
            "f6504cbc-6bc0-45fd-b013-e13d55f67ddb",
            "f89e213d-dfe2-4869-8502-574eaf2a4d7a",
            "87b1b7a1-5d55-48e3-bd7d-1c7539a8d4cd",
            "717f5afd-6001-4249-8f03-549e5c6ed8ac",
            "2e4cb475-8fc8-4a08-add1-271d2cca21cb",
            "9a71bc26-ec69-4a98-af18-ebb6b9fa33f5",
            "502fd6e3-53f5-48a1-aee5-9f6f8adf9670",
            "3fdab8ed-1a23-43b4-b706-6180b248ba2d"
          ]
        },
        {
          "kind": "badge-width",
          "id": "6c5a4e74-05d1-4576-be34-8e8c246b4834",
          "frame": {
            "left": 922.25273912,
            "top": 347.48089942,
            "width": 75.42865598,
            "height": 62.35172098
          },
          "width": 95.82781955293169
        },
        {
          "kind": "badge-region",
          "id": "6c5a4e74-05d1-4576-be34-8e8c246b4834",
          "wanted": {
            "left": 912.0531573335342,
            "top": 347.48089942,
            "width": 95.82781955293169,
            "height": 90.77379698379775
          },
          "region": {
            "left": 931.357924925705,
            "top": 333.1088962687294,
            "width": 57.21756159859001,
            "height": 91.09564273254125
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "b5a26073-1084-48fb-b85f-44279edc49c5",
          "frame": {
            "left": 1504.41571252,
            "top": 347.48089942,
            "width": 75.42865598,
            "height": 62.35172098
          },
          "width": 94.30827316509475
        },
        {
          "kind": "badge-region",
          "id": "b5a26073-1084-48fb-b85f-44279edc49c5",
          "wanted": {
            "left": 1494.9759039274525,
            "top": 347.48089942,
            "width": 94.30827316509475,
            "height": 90.77379698379775
          },
          "region": {
            "left": 1513.5245622357047,
            "top": 332.3257630909142,
            "width": 57.21756159859024,
            "height": 92.66190908817157
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "44e54687-8ae2-4cab-abe2-4fcf6f622b3c",
          "frame": {
            "left": 340.08553814,
            "top": 347.48089942,
            "width": 75.42865598,
            "height": 62.35172098
          },
          "width": 80.66395160853978
        },
        {
          "kind": "badge-region",
          "id": "44e54687-8ae2-4cab-abe2-4fcf6f622b3c",
          "wanted": {
            "left": 337.4678903257301,
            "top": 347.48089942,
            "width": 80.66395160853978,
            "height": 90.77379698379775
          },
          "region": {
            "left": 349.19128761570494,
            "top": 326.27640814065285,
            "width": 57.21756159859012,
            "height": 104.76061898869432
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "fa13729f-7bd7-42a5-a4c8-45e60312444a",
          "frame": {
            "left": 631.16913863,
            "top": 670.16772697,
            "width": 75.42865598,
            "height": 62.35172098
          },
          "width": 94.2449522814855
        },
        {
          "kind": "badge-region",
          "id": "fa13729f-7bd7-42a5-a4c8-45e60312444a",
          "wanted": {
            "left": 621.7609904792573,
            "top": 670.16772697,
            "width": 94.2449522814855,
            "height": 90.77379698379775
          },
          "region": {
            "left": 640.2751537594731,
            "top": 654.9768488605513,
            "width": 57.21646661105365,
            "height": 92.73286702889754
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "3287d1b1-14f5-4297-92cb-77e6d62e05a2",
          "frame": {
            "left": 1213.3380306499998,
            "top": 670.16772697,
            "width": 75.42865598,
            "height": 62.35172098
          },
          "width": 97.88554476043342
        },
        {
          "kind": "badge-region",
          "id": "3287d1b1-14f5-4297-92cb-77e6d62e05a2",
          "wanted": {
            "left": 1202.109586259783,
            "top": 670.16772697,
            "width": 97.88554476043342,
            "height": 90.77374106041924
          },
          "region": {
            "left": 1222.441674567114,
            "top": 656.905033673723,
            "width": 57.216699615772086,
            "height": 88.87649740255415
          },
          "contains": false
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [
            "6c5a4e74-05d1-4576-be34-8e8c246b4834",
            "b5a26073-1084-48fb-b85f-44279edc49c5",
            "44e54687-8ae2-4cab-abe2-4fcf6f622b3c",
            "fa13729f-7bd7-42a5-a4c8-45e60312444a",
            "3287d1b1-14f5-4297-92cb-77e6d62e05a2"
          ],
          "immovable": [
            "18c05bcf-1377-4b06-aa4b-886234f87b9c",
            "bbd0894c-b6b7-468d-908d-5985ca7c27dd",
            "f6504cbc-6bc0-45fd-b013-e13d55f67ddb",
            "f89e213d-dfe2-4869-8502-574eaf2a4d7a",
            "87b1b7a1-5d55-48e3-bd7d-1c7539a8d4cd",
            "717f5afd-6001-4249-8f03-549e5c6ed8ac",
            "2e4cb475-8fc8-4a08-add1-271d2cca21cb",
            "9a71bc26-ec69-4a98-af18-ebb6b9fa33f5",
            "502fd6e3-53f5-48a1-aee5-9f6f8adf9670",
            "3fdab8ed-1a23-43b4-b706-6180b248ba2d"
          ]
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "323-279",
          "hash": "8aee004fc29f4958049132da04818c698d8033edb2d9ab01b7e122878471b4a3",
          "expected": "8aee004fc29f4958049132da04818c698d8033edb2d9ab01b7e122878471b4a3",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "6c5a4e74-05d1-4576-be34-8e8c246b4834",
                "reason": "available-area-exhausted"
              },
              {
                "nodeId": "b5a26073-1084-48fb-b85f-44279edc49c5",
                "reason": "available-area-exhausted"
              },
              {
                "nodeId": "fa13729f-7bd7-42a5-a4c8-45e60312444a",
                "reason": "available-area-exhausted"
              },
              {
                "nodeId": "3287d1b1-14f5-4297-92cb-77e6d62e05a2",
                "reason": "available-area-exhausted"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "323-321"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": [
            "3aab479b-fb6d-4219-90fc-93e03a803ae5"
          ]
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": [
            "3aab479b-fb6d-4219-90fc-93e03a803ae5"
          ]
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "323-321",
          "hash": "0d5cc605c5646d2d68bf063704b2f5094d674032e362ed690da93aef16a11e4f",
          "expected": "0d5cc605c5646d2d68bf063704b2f5094d674032e362ed690da93aef16a11e4f",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "3aab479b-fb6d-4219-90fc-93e03a803ae5",
                "reason": "container-unresolved"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "323-369"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "323-369",
          "hash": "614cb61ad5733eb018e74e2ee2195339c45a6185d097bf02444b22311d708231",
          "expected": "614cb61ad5733eb018e74e2ee2195339c45a6185d097bf02444b22311d708231",
          "report": {
            "basis": "predicted",
            "status": "resolved",
            "issues": [],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "323-400"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "overlap-candidates",
          "moverId": "c2fb4efd-9ae5-4ad8-bbf6-c99be49f9fb3",
          "obstacleId": "45429313-4a75-427f-ac33-1f843f4cac4c",
          "ink": {
            "left": 401.40282407671094,
            "top": 456.6691103776179,
            "width": 951.7438377459729,
            "height": 58.314345609907335
          },
          "obstacle": {
            "left": 315.74652922060994,
            "top": 405.2499228876604,
            "width": 118.87052280543735,
            "height": 114.81653936329502
          },
          "moves": [
            {
              "dx": 52.9878791844258,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 83.1710031084269
            },
            {
              "dx": 0,
              "dy": -129.50718433495433
            },
            {
              "dx": -1057.1737838371632,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "c2fb4efd-9ae5-4ad8-bbf6-c99be49f9fb3",
          "move": {
            "dx": 52.9878791844258,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 509.0250418787886,
            "top": 578.6283212750166,
            "width": 1194.8776121112114,
            "height": 202.94533914498345
          },
          "span": {
            "left": 454.39070326113676,
            "top": 456.6691103776179,
            "width": 951.7438377459729,
            "height": 58.314345609907335
          },
          "margin": 19.77365123508944
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "c2fb4efd-9ae5-4ad8-bbf6-c99be49f9fb3",
          "move": {
            "dx": 0,
            "dy": 83.1710031084269
          },
          "allowGrow": false,
          "region": {
            "left": 509.0250418787886,
            "top": 578.6283212750166,
            "width": 1194.8776121112114,
            "height": 202.94533914498345
          },
          "span": {
            "left": 401.40282407671094,
            "top": 539.8401134860449,
            "width": 1262.634645213289,
            "height": 257.1058983726376
          },
          "margin": 19.77365123508944
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "c2fb4efd-9ae5-4ad8-bbf6-c99be49f9fb3",
          "move": {
            "dx": 0,
            "dy": 83.1710031084269
          },
          "allowGrow": true,
          "region": {
            "left": 509.0250418787886,
            "top": 578.6283212750166,
            "width": 1194.8776121112114,
            "height": 265.11273357137156
          },
          "span": {
            "left": 401.40282407671094,
            "top": 539.8401134860449,
            "width": 1262.634645213289,
            "height": 257.1058983726376
          },
          "margin": 19.77365123508944
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "c2fb4efd-9ae5-4ad8-bbf6-c99be49f9fb3",
          "move": {
            "dx": 0,
            "dy": -129.50718433495433
          },
          "allowGrow": false,
          "region": {
            "left": 401.40282407671094,
            "top": 331.71329634,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 401.40282407671094,
            "top": 327.1619260426636,
            "width": 951.7438377459729,
            "height": 58.314345609907335
          },
          "margin": 19.77365123508944
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "c2fb4efd-9ae5-4ad8-bbf6-c99be49f9fb3",
          "move": {
            "dx": 0,
            "dy": -129.50718433495433
          },
          "allowGrow": true,
          "region": {
            "left": 509.0250418787886,
            "top": 532.2184367603263,
            "width": 1194.8776121112114,
            "height": 249.3552236596737
          },
          "span": {
            "left": 401.40282407671094,
            "top": 327.1619260426636,
            "width": 951.7438377459729,
            "height": 58.314345609907335
          },
          "margin": 19.77365123508944
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "c2fb4efd-9ae5-4ad8-bbf6-c99be49f9fb3",
          "move": {
            "dx": -1057.1737838371632,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 509.0250418787886,
            "top": 578.6283212750166,
            "width": 1194.8776121112114,
            "height": 202.94533914498345
          },
          "span": {
            "left": -655.7709597604523,
            "top": 456.6691103776179,
            "width": 951.7438377459729,
            "height": 58.314345609907335
          },
          "margin": 19.77365123508944
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "c2fb4efd-9ae5-4ad8-bbf6-c99be49f9fb3",
          "move": {
            "dx": -1057.1737838371632,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 357.8240196787886,
            "top": 578.6283212750166,
            "width": 1346.0786343112115,
            "height": 202.94533914498345
          },
          "span": {
            "left": -655.7709597604523,
            "top": 456.6691103776179,
            "width": 951.7438377459729,
            "height": 58.314345609907335
          },
          "margin": 19.77365123508944
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "overlap-candidates",
          "moverId": "45429313-4a75-427f-ac33-1f843f4cac4c",
          "obstacleId": "29aae4c2-6836-4aa5-b709-d64a22d20e3d",
          "ink": {
            "left": 264.18493462427375,
            "top": 419.63160588460477,
            "width": 133.51020892572626,
            "height": 106.79420878663463
          },
          "obstacle": {
            "left": 218.4010222,
            "top": 300.94123728,
            "width": 290.62401967,
            "height": 277.68708399
          },
          "moves": [
            {
              "dx": 0,
              "dy": 139.2661275108384
            },
            {
              "dx": 150.94264227072685,
              "dy": 0
            },
            {
              "dx": -195.1917984448907,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": -239.5018917841068
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "45429313-4a75-427f-ac33-1f843f4cac4c",
          "move": {
            "dx": 0,
            "dy": 139.2661275108384
          },
          "allowGrow": false,
          "region": {
            "left": 509.0250418787886,
            "top": 578.6283212750166,
            "width": 1194.8776121112114,
            "height": 202.94533914498345
          },
          "span": {
            "left": 264.18493462427375,
            "top": 558.8977333954432,
            "width": 1399.8525346657261,
            "height": 294.1434028656507
          },
          "margin": 14.192010491370938
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "45429313-4a75-427f-ac33-1f843f4cac4c",
          "move": {
            "dx": 0,
            "dy": 139.2661275108384
          },
          "allowGrow": true,
          "region": {
            "left": 509.0250418787886,
            "top": 578.6283212750166,
            "width": 1194.8776121112114,
            "height": 321.20785797378323
          },
          "span": {
            "left": 264.18493462427375,
            "top": 558.8977333954432,
            "width": 1399.8525346657261,
            "height": 294.1434028656507
          },
          "margin": 14.192010491370938
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "45429313-4a75-427f-ac33-1f843f4cac4c",
          "move": {
            "dx": 150.94264227072685,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 509.0250418787886,
            "top": 578.6283212750166,
            "width": 1194.8776121112114,
            "height": 202.94533914498345
          },
          "span": {
            "left": 415.12757689500063,
            "top": 419.63160588460477,
            "width": 133.51020892572626,
            "height": 106.79420878663463
          },
          "margin": 14.192010491370938
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "45429313-4a75-427f-ac33-1f843f4cac4c",
          "move": {
            "dx": -195.1917984448907,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 232.78349477,
            "top": 419.63160588460477,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 68.99313617938304,
            "top": 419.63160588460477,
            "width": 133.51020892572626,
            "height": 106.79420878663463
          },
          "margin": 14.192010491370938
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "45429313-4a75-427f-ac33-1f843f4cac4c",
          "move": {
            "dx": -195.1917984448907,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 357.8240196787886,
            "top": 578.6283212750166,
            "width": 1346.0786343112115,
            "height": 202.94533914498345
          },
          "span": {
            "left": 68.99313617938304,
            "top": 419.63160588460477,
            "width": 133.51020892572626,
            "height": 106.79420878663463
          },
          "margin": 14.192010491370938
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "45429313-4a75-427f-ac33-1f843f4cac4c",
          "move": {
            "dx": 0,
            "dy": -239.5018917841068
          },
          "allowGrow": false,
          "region": {
            "left": 264.18493462427375,
            "top": 331.71329634,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 264.18493462427375,
            "top": 180.12971410049798,
            "width": 133.51020892572626,
            "height": 106.79420878663463
          },
          "margin": 14.192010491370938
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "45429313-4a75-427f-ac33-1f843f4cac4c",
          "move": {
            "dx": 0,
            "dy": -239.5018917841068
          },
          "allowGrow": true,
          "region": {
            "left": 509.0250418787886,
            "top": 385.18622481816067,
            "width": 1194.8776121112114,
            "height": 396.38743560183946
          },
          "span": {
            "left": 264.18493462427375,
            "top": 180.12971410049798,
            "width": 133.51020892572626,
            "height": 106.79420878663463
          },
          "margin": 14.192010491370938
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "323-400",
          "hash": "6a1c63289e65dd8949e3a0b87a29e33c69ec18a646915c11ce29e5558f7d7dd5",
          "expected": "6a1c63289e65dd8949e3a0b87a29e33c69ec18a646915c11ce29e5558f7d7dd5",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "45429313-4a75-427f-ac33-1f843f4cac4c",
                "reason": "available-area-exhausted"
              },
              {
                "nodeId": "c2fb4efd-9ae5-4ad8-bbf6-c99be49f9fb3",
                "reason": "available-area-exhausted"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "324-11"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [
            "1c444d75-110b-4677-a106-dc1d9a270a39",
            "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
            "62564cbb-93ef-434b-8556-538957426446"
          ],
          "immovable": [
            "09dae99f-57a9-4d25-9102-cb606b904df5",
            "72e9e437-32aa-4f87-bd9f-d7ffdbf71588",
            "51e7d43e-1c64-4c03-9807-7c2a4fadc5f9",
            "8da71516-208a-4601-9965-619d5178d283",
            "5409617f-7381-4b42-b1c8-85e3867e145e",
            "cdbd4cad-6fb6-4906-9571-b2180d1ebca7"
          ]
        },
        {
          "kind": "badge-width",
          "id": "1c444d75-110b-4677-a106-dc1d9a270a39",
          "frame": {
            "left": 412.26438151,
            "top": 227.28257255,
            "width": 17.422555,
            "height": 53.74503025
          },
          "width": 33.75465400588256
        },
        {
          "kind": "badge-region",
          "id": "1c444d75-110b-4677-a106-dc1d9a270a39",
          "wanted": {
            "left": 412.26438151,
            "top": 227.28257255,
            "width": 33.75465400588256,
            "height": 27.877258393944874
          },
          "region": {
            "left": 398.38055495294316,
            "top": 231.30995611039074,
            "width": 45.119309404113665,
            "height": 25.770991609218555
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
          "frame": {
            "left": 412.26447939,
            "top": 463.59701883,
            "width": 17.422555,
            "height": 53.74503025
          },
          "width": 39.42107929317329
        },
        {
          "kind": "badge-region",
          "id": "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
          "wanted": {
            "left": 412.26447939,
            "top": 463.59701883,
            "width": 39.42107929317329,
            "height": 27.877258393944874
          },
          "region": {
            "left": 412.26447939,
            "top": 463.59701883,
            "width": 0,
            "height": 0
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "62564cbb-93ef-434b-8556-538957426446",
          "frame": {
            "left": 412.26438151,
            "top": 699.9114651,
            "width": 17.422555,
            "height": 53.74503025
          },
          "width": 40.24048968601156
        },
        {
          "kind": "badge-region",
          "id": "62564cbb-93ef-434b-8556-538957426446",
          "wanted": {
            "left": 412.26438151,
            "top": 699.9114651,
            "width": 40.24048968601156,
            "height": 27.877258393944874
          },
          "region": {
            "left": 412.26438151,
            "top": 699.9114651,
            "width": 0,
            "height": 0
          },
          "contains": false
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [
            "1c444d75-110b-4677-a106-dc1d9a270a39",
            "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
            "62564cbb-93ef-434b-8556-538957426446"
          ],
          "immovable": [
            "09dae99f-57a9-4d25-9102-cb606b904df5",
            "72e9e437-32aa-4f87-bd9f-d7ffdbf71588",
            "51e7d43e-1c64-4c03-9807-7c2a4fadc5f9",
            "8da71516-208a-4601-9965-619d5178d283",
            "5409617f-7381-4b42-b1c8-85e3867e145e",
            "cdbd4cad-6fb6-4906-9571-b2180d1ebca7"
          ]
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "324-11",
          "hash": "e1a13888979111b90eef073fc1f7b6451a223aaa85506c73fe2ea73745c24f39",
          "expected": "e1a13888979111b90eef073fc1f7b6451a223aaa85506c73fe2ea73745c24f39",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "1c444d75-110b-4677-a106-dc1d9a270a39",
                "reason": "font-floor-reached"
              },
              {
                "nodeId": "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
                "reason": "font-floor-reached"
              },
              {
                "nodeId": "62564cbb-93ef-434b-8556-538957426446",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "324-118"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:f0be6456-8031-4a66-b2fc-4db68e9dd815:43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4:left",
          "error": 52.72707679539758,
          "before": 45.07621543707205,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:f0be6456-8031-4a66-b2fc-4db68e9dd815:43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4:left",
          "error": 52.72707679539758,
          "before": 45.07621543707205,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:f0be6456-8031-4a66-b2fc-4db68e9dd815:43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4:top",
          "error": 4.309266065602344,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:f0be6456-8031-4a66-b2fc-4db68e9dd815:43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4:top",
          "error": 4.309266065602344,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-candidates",
          "moverId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
          "obstacleId": "de0ff0b3-4ed6-496c-b811-32a794d7a69d",
          "ink": {
            "left": 512.37149287444,
            "top": 328.92644523600336,
            "width": 808.4871198905598,
            "height": 102.66635514346535
          },
          "obstacle": {
            "left": 307.99043068,
            "top": 232.38947565,
            "width": 1201.86530928,
            "height": 631.61052435
          },
          "moves": [
            {
              "dx": 0,
              "dy": -214.790608294635
            },
            {
              "dx": 0,
              "dy": 550.660838329163
            },
            {
              "dx": 1013.0715306507262,
              "dy": 0
            },
            {
              "dx": -1028.4554656501662,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
          "move": {
            "dx": 0,
            "dy": -214.790608294635
          },
          "allowGrow": false,
          "region": {
            "left": 512.37149287444,
            "top": 281.66173561,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 512.37149287444,
            "top": 114.13583694136835,
            "width": 808.4871198905598,
            "height": 102.66635514346535
          },
          "margin": 15.587283565166313
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
          "move": {
            "dx": 0,
            "dy": -214.790608294635
          },
          "allowGrow": true,
          "region": {
            "left": 512.37149287444,
            "top": 281.66173560922437,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 512.37149287444,
            "top": 114.13583694136835,
            "width": 808.4871198905598,
            "height": 102.66635514346535
          },
          "margin": 15.587283565166313
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
          "move": {
            "dx": 0,
            "dy": 550.660838329163
          },
          "allowGrow": false,
          "region": {
            "left": 512.37149287444,
            "top": 443.18237759,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 512.37149287444,
            "top": 879.5872835651663,
            "width": 808.4871198905598,
            "height": 102.66635514346535
          },
          "margin": 15.587283565166313
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
          "move": {
            "dx": 0,
            "dy": 550.660838329163
          },
          "allowGrow": true,
          "region": {
            "left": 512.37149287444,
            "top": 443.18237759197166,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 512.37149287444,
            "top": 879.5872835651663,
            "width": 808.4871198905598,
            "height": 102.66635514346535
          },
          "margin": 15.587283565166313
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
          "move": {
            "dx": 1013.0715306507262,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 1337.35543718,
            "top": 328.92644523600336,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1525.4430235251662,
            "top": 328.92644523600336,
            "width": 808.4871198905598,
            "height": 102.66635514346535
          },
          "margin": 15.587283565166313
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
          "move": {
            "dx": 1013.0715306507262,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 1364.6314009378,
            "top": 328.92644523600336,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1525.4430235251662,
            "top": 328.92644523600336,
            "width": 808.4871198905598,
            "height": 102.66635514346535
          },
          "margin": 15.587283565166313
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
          "move": {
            "dx": -1028.4554656501662,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 480.49073346,
            "top": 328.92644523600336,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -516.0839727757261,
            "top": 328.92644523600336,
            "width": 808.4871198905598,
            "height": 102.66635514346535
          },
          "margin": 15.587283565166313
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
          "move": {
            "dx": -1028.4554656501662,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 453.21476970220016,
            "top": 328.92644523600336,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -516.0839727757261,
            "top": 328.92644523600336,
            "width": 808.4871198905598,
            "height": 102.66635514346535
          },
          "margin": 15.587283565166313
        },
        {
          "kind": "overlap-candidates",
          "moverId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
          "obstacleId": "fa5a06be-a628-4926-9afa-47abad3037de",
          "ink": {
            "left": 496.524849575536,
            "top": 561.9721445975761,
            "width": 825.5522304905725,
            "height": 120.17213304928457
          },
          "obstacle": {
            "left": 1326.6798612,
            "top": 284.6934789,
            "width": 211.84682792,
            "height": 316.97779739
          },
          "moves": [
            {
              "dx": 0,
              "dy": 31.378502429209515
            },
            {
              "dx": -44.51324795027661,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": -210.67899585050282
            },
            {
              "dx": 888.0101732680562,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:c0a531dc-2fdc-447b-8422-33a022f78879:073d42dd-1ca8-4f43-8470-f6f64408d932:bottom",
          "error": 31.378774205577628,
          "before": 0.00027177636806641203,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:c0a531dc-2fdc-447b-8422-33a022f78879:073d42dd-1ca8-4f43-8470-f6f64408d932:bottom",
          "error": 31.378774205577628,
          "before": 0.00027177636806641203,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
          "move": {
            "dx": -44.51324795027661,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 453.2147696999999,
            "top": 512.9041999694922,
            "width": 911.4166312399999,
            "height": 222.27283448101548
          },
          "span": {
            "left": 452.0116016252594,
            "top": 561.9721445975761,
            "width": 825.5522304905725,
            "height": 120.17213304928457
          },
          "margin": 17.062164031298675
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
          "move": {
            "dx": 0,
            "dy": -210.67899585050282
          },
          "allowGrow": false,
          "region": {
            "left": 496.524849575536,
            "top": 501.91268746,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 496.524849575536,
            "top": 351.29314874707325,
            "width": 825.5522304905725,
            "height": 120.17213304928457
          },
          "margin": 17.062164031298675
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
          "move": {
            "dx": 888.0101732680562,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 1364.63140094,
            "top": 561.9721445975761,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1384.5350228435923,
            "top": 561.9721445975761,
            "width": 825.5522304905725,
            "height": 120.17213304928457
          },
          "margin": 17.062164031298675
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "324-118",
          "hash": "1680f6ba312e9ad4776a186c69297474f852665a45da6f9bb78e44a730f24f16",
          "expected": "1680f6ba312e9ad4776a186c69297474f852665a45da6f9bb78e44a730f24f16",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "43b61ccd-48af-46a3-84e8-a8fcbd3ac9c4",
                "reason": "font-floor-reached"
              },
              {
                "nodeId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
                "reason": "available-area-exhausted"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "324-172"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [
            "5631452c-6f94-4f17-9a11-6df5ce3f7341",
            "fc4ad465-9b9e-4034-a877-aba05523aea6",
            "e45ea7d4-250e-4221-b677-e983d22ee2f9"
          ],
          "immovable": []
        },
        {
          "kind": "badge-width",
          "id": "5631452c-6f94-4f17-9a11-6df5ce3f7341",
          "frame": {
            "left": 430.17034112,
            "top": 232.42096141000002,
            "width": 29.70254835,
            "height": 0
          },
          "width": 33.5231400783576
        },
        {
          "kind": "badge-region",
          "id": "5631452c-6f94-4f17-9a11-6df5ce3f7341",
          "wanted": {
            "left": 428.2600452558212,
            "top": 232.42096141000002,
            "width": 33.5231400783576,
            "height": 86.13144662763429
          },
          "region": {
            "left": 429.57904539145125,
            "top": 232.9122096676731,
            "width": 30.88606424709758,
            "height": 85.97925545465387
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "fc4ad465-9b9e-4034-a877-aba05523aea6",
          "frame": {
            "left": 948.62520757,
            "top": 231.36637934,
            "width": 22.74961183,
            "height": 0
          },
          "width": 45.6882840591742
        },
        {
          "kind": "badge-region",
          "id": "fc4ad465-9b9e-4034-a877-aba05523aea6",
          "wanted": {
            "left": 937.1558714554129,
            "top": 231.36637934,
            "width": 45.6882840591742,
            "height": 86.13169631227703
          },
          "region": {
            "left": 947.9307500936242,
            "top": 235.81170922551536,
            "width": 24.138499822751555,
            "height": 80.18025633896934
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "e45ea7d4-250e-4221-b677-e983d22ee2f9",
          "frame": {
            "left": 1454.35598702,
            "top": 234.85759454,
            "width": 41.2472487,
            "height": 0
          },
          "width": 44.6670154283933
        },
        {
          "kind": "badge-region",
          "id": "e45ea7d4-250e-4221-b677-e983d22ee2f9",
          "wanted": {
            "left": 1452.6461036558032,
            "top": 234.85759454,
            "width": 44.6670154283933,
            "height": 86.13169631227703
          },
          "region": {
            "left": 1465.16999924255,
            "top": 235.5259434672225,
            "width": 19.615846484899976,
            "height": 80.75178785555502
          },
          "contains": false
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [
            "5631452c-6f94-4f17-9a11-6df5ce3f7341",
            "fc4ad465-9b9e-4034-a877-aba05523aea6",
            "e45ea7d4-250e-4221-b677-e983d22ee2f9"
          ],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "324-172",
          "hash": "13bc1f121bf70b3546e22500821781778379f06c11c02a730ed6767d86a2cdfb",
          "expected": "13bc1f121bf70b3546e22500821781778379f06c11c02a730ed6767d86a2cdfb",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "fc4ad465-9b9e-4034-a877-aba05523aea6",
                "reason": "available-area-exhausted"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "324-378"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "overlap-candidates",
          "moverId": "ec302cec-20ec-4d62-b786-68ffe4fb383e",
          "obstacleId": "43833ad1-034c-4879-9506-9d96bf37a720",
          "ink": {
            "left": 409.4119546581081,
            "top": 512.2590607337702,
            "width": 1103.287508211892,
            "height": 125.32160050038259
          },
          "obstacle": {
            "left": 348.17750979,
            "top": 216,
            "width": 1223.64498043,
            "height": 648
          },
          "moves": [
            {
              "dx": 0,
              "dy": 362.64834047732285
            },
            {
              "dx": 0,
              "dy": -432.489155439955
            },
            {
              "dx": 1172.9467619161744,
              "dy": 0
            },
            {
              "dx": -1174.9292632937543,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "ec302cec-20ec-4d62-b786-68ffe4fb383e",
          "move": {
            "dx": 0,
            "dy": 362.64834047732285
          },
          "allowGrow": false,
          "region": {
            "left": 409.4119546581081,
            "top": 584.64983345,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 409.4119546581081,
            "top": 874.907401211093,
            "width": 1103.287508211892,
            "height": 125.32160050038259
          },
          "margin": 10.932821724183865
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "ec302cec-20ec-4d62-b786-68ffe4fb383e",
          "move": {
            "dx": 0,
            "dy": -432.489155439955
          },
          "allowGrow": false,
          "region": {
            "left": 409.4119546581081,
            "top": 495.35016656,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 409.4119546581081,
            "top": 79.76990529381516,
            "width": 1103.287508211892,
            "height": 125.32160050038259
          },
          "margin": 10.932821724183865
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "ec302cec-20ec-4d62-b786-68ffe4fb383e",
          "move": {
            "dx": 1172.9467619161744,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 1571.82249022,
            "top": 512.2590607337702,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1582.3587165742824,
            "top": 512.2590607337702,
            "width": 1103.287508211892,
            "height": 125.32160050038259
          },
          "margin": 10.932821724183865
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "ec302cec-20ec-4d62-b786-68ffe4fb383e",
          "move": {
            "dx": -1174.9292632937543,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 348.17750979,
            "top": 512.2590607337702,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -765.5173086356463,
            "top": 512.2590607337702,
            "width": 1103.287508211892,
            "height": 125.32160050038259
          },
          "margin": 10.932821724183865
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "324-378",
          "hash": "9f4c0304633a903f945b18f70937f7d6eb58768c1bff2211e59ad7ceea8205ae",
          "expected": "9f4c0304633a903f945b18f70937f7d6eb58768c1bff2211e59ad7ceea8205ae",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "ec302cec-20ec-4d62-b786-68ffe4fb383e",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "326-113"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "attempt-gates",
          "intent": true,
          "improves": false
        },
        {
          "kind": "overlap-candidates",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "obstacleId": "5bdd199e-642f-4b93-989f-2ba0f46ee506",
          "ink": {
            "left": 245.71160648252,
            "top": 350.12639963828633,
            "width": 324.75571487799766,
            "height": 139.5901300511185
          },
          "obstacle": {
            "left": 216,
            "top": 371.12448438,
            "width": 1488,
            "height": 390.10618725
          },
          "moves": [
            {
              "dx": 0,
              "dy": -132.23111211720504
            },
            {
              "dx": -368.10638816831784,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 424.7433387995138
            },
            {
              "dx": 1471.9274603252802,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": -132.23111211720504
          },
          "allowGrow": false,
          "region": {
            "left": 274.768421515,
            "top": 326.45518077858844,
            "width": 269.27006622,
            "height": 102.1651382328231
          },
          "span": {
            "left": 245.71160648252,
            "top": 217.8952875210813,
            "width": 324.75571487799766,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": -132.23111211720504
          },
          "allowGrow": true,
          "region": {
            "left": 274.768421515,
            "top": 326.45518077858844,
            "width": 312.2163060146994,
            "height": 102.1651382328231
          },
          "span": {
            "left": 245.71160648252,
            "top": 217.8952875210813,
            "width": 324.75571487799766,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": -368.10638816831784,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 350.12639963828633,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -122.39478168579782,
            "top": 350.12639963828633,
            "width": 324.75571487799766,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": -368.10638816831784,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 216,
            "top": 350.12639963828633,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -122.39478168579782,
            "top": 350.12639963828633,
            "width": 324.75571487799766,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": 424.7433387995138
          },
          "allowGrow": false,
          "region": {
            "left": 245.71160648252,
            "top": 436.30617141,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 245.71160648252,
            "top": 774.8697384378002,
            "width": 324.75571487799766,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": 424.7433387995138
          },
          "allowGrow": true,
          "region": {
            "left": 245.71160648252,
            "top": 436.30617141,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 245.71160648252,
            "top": 774.8697384378002,
            "width": 324.75571487799766,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 1471.9274603252802,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 602.80690925,
            "top": 350.12639963828633,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1717.6390668078002,
            "top": 350.12639963828633,
            "width": 324.75571487799766,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 1471.9274603252802,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 1385.8099573752893,
            "top": 350.12639963828633,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1717.6390668078002,
            "top": 350.12639963828633,
            "width": 324.75571487799766,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "326-113",
          "hash": "8b7f3a9feaae7e46d1333a163ab6b4bf230890422a70d14a5e2394fba806a524",
          "expected": "8b7f3a9feaae7e46d1333a163ab6b4bf230890422a70d14a5e2394fba806a524",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "326-209"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": [
            "3742dbeb-428a-4c36-a70b-4e6bf87899eb",
            "4694a24a-5c4c-4f6f-ab15-9caf23bc472b"
          ]
        },
        {
          "kind": "overlap-candidates",
          "moverId": "46855bc0-5b50-4e7f-8f72-f7b896001f25",
          "obstacleId": "c8d1c922-6825-4753-a755-8b3d1ec84704",
          "ink": {
            "left": 262.4863583807171,
            "top": 519.1328430395158,
            "width": 631.8639277187729,
            "height": 69.77621041121476
          },
          "obstacle": {
            "left": 893.0842434,
            "top": 518.87142407,
            "width": 133.83151321,
            "height": 89.60803586
          },
          "moves": [
            {
              "dx": -9.691260331433485,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": -64.26694452330646
            },
            {
              "dx": 0,
              "dy": 83.57736431331207
            },
            {
              "dx": 772.8546158612264,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:e588ffb4-c964-4413-92dd-a5b396575313:46855bc0-5b50-4e7f-8f72-f7b896001f25:left",
          "error": 9.691302404297687,
          "before": 4.207286423252299e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:e588ffb4-c964-4413-92dd-a5b396575313:46855bc0-5b50-4e7f-8f72-f7b896001f25:left",
          "error": 9.691302404297687,
          "before": 4.207286423252299e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "intent-reject",
          "line": 411
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "gap:e7612ed1-2671-4561-8a4c-1a1883e25202:46855bc0-5b50-4e7f-8f72-f7b896001f25:y",
          "error": 64.26713743570036,
          "before": 0.00019291239391350246,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "gap:e7612ed1-2671-4561-8a4c-1a1883e25202:46855bc0-5b50-4e7f-8f72-f7b896001f25:y",
          "error": 64.26713743570036,
          "before": 0.00019291239391350246,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "intent-reject",
          "line": 351
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "intent-reject",
          "line": 351
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "46855bc0-5b50-4e7f-8f72-f7b896001f25",
          "move": {
            "dx": 772.8546158612264,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 917.67636442,
            "top": 519.1328430395158,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1035.3409742419435,
            "top": 519.1328430395158,
            "width": 631.8639277187729,
            "height": 69.77621041121476
          },
          "margin": 8.425217631943527
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "46855bc0-5b50-4e7f-8f72-f7b896001f25",
          "move": {
            "dx": 772.8546158612264,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 917.67636442,
            "top": 519.1328430395158,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1035.3409742419435,
            "top": 519.1328430395158,
            "width": 631.8639277187729,
            "height": 69.77621041121476
          },
          "margin": 8.425217631943527
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": [
            "3742dbeb-428a-4c36-a70b-4e6bf87899eb",
            "4694a24a-5c4c-4f6f-ab15-9caf23bc472b"
          ]
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "326-209",
          "hash": "dd4c82f5f02bbbe1152ab4d1a32ded9c2b1614026a4750dc06c5c3cd50dc0194",
          "expected": "dd4c82f5f02bbbe1152ab4d1a32ded9c2b1614026a4750dc06c5c3cd50dc0194",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "3742dbeb-428a-4c36-a70b-4e6bf87899eb",
                "reason": "container-unresolved"
              },
              {
                "nodeId": "46855bc0-5b50-4e7f-8f72-f7b896001f25",
                "reason": "available-area-exhausted"
              },
              {
                "nodeId": "4694a24a-5c4c-4f6f-ab15-9caf23bc472b",
                "reason": "container-unresolved"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "326-384"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "overlap-candidates",
          "moverId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
          "obstacleId": "7578b278-dd2e-404b-90d9-8579e6e5cdd1",
          "ink": {
            "left": 629.4218121497229,
            "top": 274.9317309658908,
            "width": 727.6053839944926,
            "height": 66.12826768555448
          },
          "obstacle": {
            "left": 1351.11406395,
            "top": 283.14433636,
            "width": 47.52275888,
            "height": 40.66292252
          },
          "moves": [
            {
              "dx": -14.702231176294742,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 57.66462689618841
            },
            {
              "dx": 0,
              "dy": -66.20944873077634
            },
            {
              "dx": 778.0041096623563,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:left",
          "error": 14.702526705438174,
          "before": 0.00029552914344321835,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:left",
          "error": 14.702526705438174,
          "before": 0.00029552914344321835,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:left",
          "error": 10.597417879722911,
          "before": 0.00029552914344321835,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:left",
          "error": 10.597417879722911,
          "before": 0.00029552914344321835,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:bottom",
          "error": 56.193523406305474,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:bottom",
          "error": 56.193523406305474,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:bottom",
          "error": 10.311870668554775,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:bottom",
          "error": 10.311870668554775,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
          "move": {
            "dx": 0,
            "dy": -66.20944873077634
          },
          "allowGrow": false,
          "region": {
            "left": 550.991577772762,
            "top": 216,
            "width": 890.669970927238,
            "height": 648
          },
          "span": {
            "left": 629.4218121497229,
            "top": 208.72228223511445,
            "width": 727.6053839944926,
            "height": 66.12826768555448
          },
          "margin": 8.789098982079178
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:top",
          "error": 4.130655875890795,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:top",
          "error": 4.130655875890795,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
          "move": {
            "dx": 778.0041096623563,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 1407.4259218120792,
            "top": 274.9317309658908,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1407.4259218120792,
            "top": 274.9317309658908,
            "width": 727.6053839944926,
            "height": 66.12826768555448
          },
          "margin": 8.789098982079178
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
          "move": {
            "dx": 778.0041096623563,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 546.5537719567391,
            "top": 238.67999643167747,
            "width": 1306.246228043261,
            "height": 602.6400071366452
          },
          "span": {
            "left": 1407.4259218120792,
            "top": 274.9317309658908,
            "width": 727.6053839944926,
            "height": 66.12826768555448
          },
          "margin": 8.789098982079178
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "326-384",
          "hash": "a2c03b500932e06bdd04fa04712d891f0815f031682db62aebac03f74dd40c10",
          "expected": "a2c03b500932e06bdd04fa04712d891f0815f031682db62aebac03f74dd40c10",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
                "reason": "available-area-exhausted"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "327-296"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "attempt-gates",
          "intent": true,
          "improves": false
        },
        {
          "kind": "overlap-candidates",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "obstacleId": "5bdd199e-642f-4b93-989f-2ba0f46ee506",
          "ink": {
            "left": 246.00847572451588,
            "top": 350.22057060425607,
            "width": 323.14490567388117,
            "height": 90.40220908514877
          },
          "obstacle": {
            "left": 216,
            "top": 371.12448438,
            "width": 1488,
            "height": 390.10618725
          },
          "moves": [
            {
              "dx": 0,
              "dy": -83.13736211720504
            },
            {
              "dx": -366.79244820619726,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 424.6491678335441
            },
            {
              "dx": 1471.6305910832843,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": -83.13736211720504
          },
          "allowGrow": false,
          "region": {
            "left": 274.768421515,
            "top": 326.28745345202196,
            "width": 269.27006622,
            "height": 102.50059288595605
          },
          "span": {
            "left": 246.00847572451588,
            "top": 267.083208487051,
            "width": 323.14490567388117,
            "height": 90.40220908514877
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": -83.13736211720504
          },
          "allowGrow": true,
          "region": {
            "left": 274.768421515,
            "top": 326.28745345202196,
            "width": 304.03442710061563,
            "height": 102.50059288595605
          },
          "span": {
            "left": 246.00847572451588,
            "top": 267.083208487051,
            "width": 323.14490567388117,
            "height": 90.40220908514877
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": -366.79244820619726,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 350.22057060425607,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -120.78397248168139,
            "top": 350.22057060425607,
            "width": 323.14490567388117,
            "height": 90.40220908514877
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": -366.79244820619726,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 216,
            "top": 350.22057060425607,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -120.78397248168139,
            "top": 350.22057060425607,
            "width": 323.14490567388117,
            "height": 90.40220908514877
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": 424.6491678335441
          },
          "allowGrow": false,
          "region": {
            "left": 246.00847572451588,
            "top": 436.30617141,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 246.00847572451588,
            "top": 774.8697384378002,
            "width": 323.14490567388117,
            "height": 90.40220908514877
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": 424.6491678335441
          },
          "allowGrow": true,
          "region": {
            "left": 246.00847572451588,
            "top": 436.30617141,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 246.00847572451588,
            "top": 774.8697384378002,
            "width": 323.14490567388117,
            "height": 90.40220908514877
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 1471.6305910832843,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 602.80690925,
            "top": 350.22057060425607,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1717.6390668078002,
            "top": 350.22057060425607,
            "width": 323.14490567388117,
            "height": 90.40220908514877
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 1471.6305910832843,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 1385.8099573752893,
            "top": 350.22057060425607,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1717.6390668078002,
            "top": 350.22057060425607,
            "width": 323.14490567388117,
            "height": 90.40220908514877
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "327-296",
          "hash": "1a707fc00379c6b05e6d026235abb1fbd16c0f360c2e405e15fe0c01c0463ca7",
          "expected": "1a707fc00379c6b05e6d026235abb1fbd16c0f360c2e405e15fe0c01c0463ca7",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "327-437"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "attempt-gates",
          "intent": true,
          "improves": false
        },
        {
          "kind": "overlap-candidates",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "obstacleId": "5bdd199e-642f-4b93-989f-2ba0f46ee506",
          "ink": {
            "left": 251.3046522181971,
            "top": 350.1891802822662,
            "width": 316.6656187604748,
            "height": 139.5901300511185
          },
          "obstacle": {
            "left": 216,
            "top": 371.12448438,
            "width": 1488,
            "height": 390.10618725
          },
          "moves": [
            {
              "dx": 0,
              "dy": -132.2938927611849
            },
            {
              "dx": -365.6093377864721,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 424.68055815553396
            },
            {
              "dx": 1466.334414589603,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": -132.2938927611849
          },
          "allowGrow": false,
          "region": {
            "left": 274.768421515,
            "top": 323.8628291391887,
            "width": 269.27006622,
            "height": 107.34984151162257
          },
          "span": {
            "left": 251.3046522181971,
            "top": 217.8952875210813,
            "width": 316.6656187604748,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": -132.2938927611849
          },
          "allowGrow": true,
          "region": {
            "left": 274.768421515,
            "top": 323.656594583044,
            "width": 308.8697789503725,
            "height": 107.76231062391196
          },
          "span": {
            "left": 251.3046522181971,
            "top": 217.8952875210813,
            "width": 316.6656187604748,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": -365.6093377864721,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 350.1891802822662,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -114.304685568275,
            "top": 350.1891802822662,
            "width": 316.6656187604748,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": -365.6093377864721,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 216,
            "top": 350.1891802822662,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -114.304685568275,
            "top": 350.1891802822662,
            "width": 316.6656187604748,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": 424.68055815553396
          },
          "allowGrow": false,
          "region": {
            "left": 251.3046522181971,
            "top": 436.30617141,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 251.3046522181971,
            "top": 774.8697384378002,
            "width": 316.6656187604748,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": 424.68055815553396
          },
          "allowGrow": true,
          "region": {
            "left": 251.3046522181971,
            "top": 436.30617141,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 251.3046522181971,
            "top": 774.8697384378002,
            "width": 316.6656187604748,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 1466.334414589603,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 602.80690925,
            "top": 350.1891802822662,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1717.6390668078002,
            "top": 350.1891802822662,
            "width": 316.6656187604748,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 1466.334414589603,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 1385.8099573752893,
            "top": 350.1891802822662,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1717.6390668078002,
            "top": 350.1891802822662,
            "width": 316.6656187604748,
            "height": 139.5901300511185
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "327-437",
          "hash": "4ad5d937460a93dd46288dd9a2713aece83877bfeb5ab48708a2f04cfee2d0a9",
          "expected": "4ad5d937460a93dd46288dd9a2713aece83877bfeb5ab48708a2f04cfee2d0a9",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "328-328"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": [
            "3454b5dd-8151-4539-a9f0-02d521ff35a2",
            "ed644ca1-1163-4a96-964d-27f439065543"
          ]
        },
        {
          "kind": "overlap-candidates",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "obstacleId": "8921d6cd-b71c-40ab-9fa7-2fd0b188deac",
          "ink": {
            "left": 365.94092613816326,
            "top": 786.7172226078924,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "obstacle": {
            "left": 575.65292687,
            "top": 775.29824641,
            "width": 228.89140714,
            "height": 51.49583987
          },
          "moves": [
            {
              "dx": 0,
              "dy": -42.02219989273452
            },
            {
              "dx": 0,
              "dy": 43.32143714698559
            },
            {
              "dx": -73.25951448103028,
              "dy": 0
            },
            {
              "dx": 447.83314718762307,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": 0,
            "dy": -42.02219989273452
          },
          "allowGrow": false,
          "region": {
            "left": 223.46248404381464,
            "top": 736.76542687,
            "width": 595.9451802923709,
            "height": 127.23457312999994
          },
          "span": {
            "left": 365.94092613816326,
            "top": 744.6950227151578,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": 0,
            "dy": 43.32143714698559
          },
          "allowGrow": false,
          "region": {
            "left": 224.32078673041246,
            "top": 736.76542687,
            "width": 594.2285749191751,
            "height": 127.23457312999994
          },
          "span": {
            "left": 365.94092613816326,
            "top": 830.0386597548779,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:bottom",
          "error": 7.982491492197255,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:bottom",
          "error": 7.982491492197255,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:left",
          "error": 73.25925002353037,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:left",
          "error": 73.25925002353037,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "intent-reject",
          "line": 351
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "intent-reject",
          "line": 351
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": 447.83314718762307,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 218.57040462000003,
            "top": 758.3953025500884,
            "width": 605.7293391399999,
            "height": 83.97482176982317
          },
          "span": {
            "left": 813.7740733257863,
            "top": 786.7172226078924,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": 447.83314718762307,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 217.058139054913,
            "top": 758.3953042956349,
            "width": 607.241604705087,
            "height": 83.97481827094089
          },
          "span": {
            "left": 813.7740733257863,
            "top": 786.7172226078924,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "overlap-candidates",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "obstacleId": "149569ad-b184-4f0e-8606-587c9fe01896",
          "ink": {
            "left": 365.94092613816326,
            "top": 786.7172226078924,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "obstacle": {
            "left": 238.32581437,
            "top": 775.29824641,
            "width": 228.89140714,
            "height": 51.49583987
          },
          "moves": [
            {
              "dx": 0,
              "dy": -47.66667641358889
            },
            {
              "dx": 0,
              "dy": 49.07049967472214
            },
            {
              "dx": 110.50596114892384,
              "dy": 0
            },
            {
              "dx": -410.5867005197294,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": 0,
            "dy": -47.66667641358889
          },
          "allowGrow": false,
          "region": {
            "left": 230.52392263967073,
            "top": 736.76542687,
            "width": 581.8223031006587,
            "height": 127.23457312999994
          },
          "span": {
            "left": 365.94092613816326,
            "top": 739.0505461943035,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": 0,
            "dy": -47.66667641358889
          },
          "allowGrow": true,
          "region": {
            "left": 229.79437951282745,
            "top": 736.7654268622107,
            "width": 582.5397005996736,
            "height": 127.32810082829064
          },
          "span": {
            "left": 365.94092613816326,
            "top": 739.0505461943035,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": 0,
            "dy": 49.07049967472214
          },
          "allowGrow": false,
          "region": {
            "left": 233.1123020793811,
            "top": 736.76542687,
            "width": 576.6455442212377,
            "height": 127.23457312999994
          },
          "span": {
            "left": 365.94092613816326,
            "top": 835.7877222826145,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:bottom",
          "error": 7.982491492197255,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:bottom",
          "error": 7.982491492197255,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:right",
          "error": 110.50622560759336,
          "before": 0.0002644586696760598,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:right",
          "error": 110.50622560759336,
          "before": 0.0002644586696760598,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": -410.5867005197294,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 218.57040462,
            "top": 786.7172226078924,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -44.64577438156613,
            "top": 786.7172226078924,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": -410.5867005197294,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 67.19999999999999,
            "top": 758.3953042956349,
            "width": 757.0997437599999,
            "height": 83.97481827094089
          },
          "span": {
            "left": -44.64577438156613,
            "top": 786.7172226078924,
            "width": 273.74184943577984,
            "height": 27.017960899910296
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "overlap-candidates",
          "moverId": "9d1a34d4-c90f-4e8e-8144-f80e310ebb82",
          "obstacleId": "8273cdb3-3e22-41ee-af64-506ee1dabbe8",
          "ink": {
            "left": 364.7323895855739,
            "top": 525.9942671613959,
            "width": 82.72494538225561,
            "height": 27.01796260865387
          },
          "obstacle": {
            "left": 238.32581437,
            "top": 514.9155329800001,
            "width": 228.89140714,
            "height": 51.49583987
          },
          "moves": [
            {
              "dx": 0,
              "dy": -47.32643610583595
            },
            {
              "dx": 0,
              "dy": 49.41074169121866
            },
            {
              "dx": 111.7144977015132,
              "dy": 0
            },
            {
              "dx": -218.3612599136158,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "9d1a34d4-c90f-4e8e-8144-f80e310ebb82",
          "move": {
            "dx": 0,
            "dy": -47.32643610583595
          },
          "allowGrow": false,
          "region": {
            "left": 230.52392603576106,
            "top": 476.3827134300001,
            "width": 581.8222963084779,
            "height": 127.23457312999994
          },
          "span": {
            "left": 364.7323895855739,
            "top": 478.66783105555993,
            "width": 82.72494538225561,
            "height": 27.01796260865387
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "9d1a34d4-c90f-4e8e-8144-f80e310ebb82",
          "move": {
            "dx": 0,
            "dy": -47.32643610583595
          },
          "allowGrow": true,
          "region": {
            "left": 229.78223711604124,
            "top": 476.3827134300001,
            "width": 583.3056741479177,
            "height": 127.23457313778931
          },
          "span": {
            "left": 364.7323895855739,
            "top": 478.66783105555993,
            "width": 82.72494538225561,
            "height": 27.01796260865387
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "9d1a34d4-c90f-4e8e-8144-f80e310ebb82",
          "move": {
            "dx": 0,
            "dy": 49.41074169121866
          },
          "allowGrow": false,
          "region": {
            "left": 233.11230703474234,
            "top": 476.3827134300001,
            "width": 576.6455343105154,
            "height": 127.23457312999994
          },
          "span": {
            "left": 364.7323895855739,
            "top": 575.4050088526145,
            "width": 82.72494538225561,
            "height": 27.01796260865387
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "9d1a34d4-c90f-4e8e-8144-f80e310ebb82",
          "move": {
            "dx": 0,
            "dy": 49.41074169121866
          },
          "allowGrow": true,
          "region": {
            "left": 232.26426728931142,
            "top": 476.3827134300001,
            "width": 578.3416138013772,
            "height": 127.23457313778931
          },
          "span": {
            "left": 364.7323895855739,
            "top": 575.4050088526145,
            "width": 82.72494538225561,
            "height": 27.01796260865387
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:c7845c8e-e2f6-45ba-8097-af72d407cfa0:9d1a34d4-c90f-4e8e-8144-f80e310ebb82:right",
          "error": 111.71476216018289,
          "before": 0.0002644586696760598,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:c7845c8e-e2f6-45ba-8097-af72d407cfa0:9d1a34d4-c90f-4e8e-8144-f80e310ebb82:right",
          "error": 111.71476216018289,
          "before": 0.0002644586696760598,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "9d1a34d4-c90f-4e8e-8144-f80e310ebb82",
          "move": {
            "dx": -218.3612599136158,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 218.57040462,
            "top": 525.9942671613959,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 146.3711296719581,
            "top": 525.9942671613959,
            "width": 82.72494538225561,
            "height": 27.01796260865387
          },
          "margin": 9.229739315786265
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:c7845c8e-e2f6-45ba-8097-af72d407cfa0:9d1a34d4-c90f-4e8e-8144-f80e310ebb82:left",
          "error": 66.99059083611593,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:c7845c8e-e2f6-45ba-8097-af72d407cfa0:9d1a34d4-c90f-4e8e-8144-f80e310ebb82:left",
          "error": 66.99059083611593,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": [
            "3454b5dd-8151-4539-a9f0-02d521ff35a2",
            "ed644ca1-1163-4a96-964d-27f439065543"
          ]
        },
        {
          "kind": "overlap-candidates",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "obstacleId": "8921d6cd-b71c-40ab-9fa7-2fd0b188deac",
          "ink": {
            "left": 363.8130851891322,
            "top": 788.239474226956,
            "width": 289.6699940398374,
            "height": 21.94495320443906
          },
          "obstacle": {
            "left": 575.65292687,
            "top": 775.29824641,
            "width": 228.89140714,
            "height": 51.49583987
          },
          "moves": [
            {
              "dx": 0,
              "dy": -43.654433371391924
            },
            {
              "dx": 0,
              "dy": 47.08676108986925
            },
            {
              "dx": -86.59833117026746,
              "dy": 0
            },
            {
              "dx": 449.4995011708648,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:top",
          "error": 43.6544698722098,
          "before": 3.650081782780035e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:top",
          "error": 43.6544698722098,
          "before": 3.650081782780035e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": 0,
            "dy": 47.08676108986925
          },
          "allowGrow": false,
          "region": {
            "left": 224.52195844333505,
            "top": 736.76542687,
            "width": 593.8262314933299,
            "height": 127.23457312999994
          },
          "span": {
            "left": 363.8130851891322,
            "top": 835.3262353168252,
            "width": 289.6699940398374,
            "height": 21.94495320443906
          },
          "margin": 8.768252349996951
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:bottom",
          "error": 9.381321495257339,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:bottom",
          "error": 9.381321495257339,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:left",
          "error": 86.59806671276758,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:1980b887-9d63-4816-8267-bea061f1d320:70ee7a32-39e6-44f7-b4a0-ca79914185da:left",
          "error": 86.59806671276758,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "intent-reject",
          "line": 351
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "intent-reject",
          "line": 351
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": 449.4995011708648,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 218.57040462000003,
            "top": 758.3953025500884,
            "width": 605.7293391399999,
            "height": 83.97482176982317
          },
          "span": {
            "left": 813.312586359997,
            "top": 788.239474226956,
            "width": 289.6699940398374,
            "height": 21.94495320443906
          },
          "margin": 8.768252349996951
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
          "move": {
            "dx": 449.4995011708648,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 217.00567553558335,
            "top": 758.3953042956349,
            "width": 607.2940682244166,
            "height": 83.97481827094089
          },
          "span": {
            "left": 813.312586359997,
            "top": 788.239474226956,
            "width": 289.6699940398374,
            "height": 21.94495320443906
          },
          "margin": 8.768252349996951
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "328-328",
          "hash": "850b5088e3fdf33d0f4c7fc2e44d90c081b0d980deef3cb5d511605c8311f3ec",
          "expected": "850b5088e3fdf33d0f4c7fc2e44d90c081b0d980deef3cb5d511605c8311f3ec",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "70ee7a32-39e6-44f7-b4a0-ca79914185da",
                "reason": "available-area-exhausted"
              },
              {
                "nodeId": "9d1a34d4-c90f-4e8e-8144-f80e310ebb82",
                "reason": "available-area-exhausted"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "328-38"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "attempt-gates",
          "intent": true,
          "improves": false
        },
        {
          "kind": "overlap-candidates",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "obstacleId": "5bdd199e-642f-4b93-989f-2ba0f46ee506",
          "ink": {
            "left": 246.03986534568594,
            "top": 350.1891802822662,
            "width": 326.660588697339,
            "height": 139.52734940713867
          },
          "obstacle": {
            "left": 216,
            "top": 371.12448438,
            "width": 1488,
            "height": 390.10618725
          },
          "moves": [
            {
              "dx": 0,
              "dy": -132.23111211720507
            },
            {
              "dx": -370.3395208508251,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 424.68055815553396
            },
            {
              "dx": 1471.5992014621143,
              "dy": 0
            }
          ]
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": -132.23111211720507
          },
          "allowGrow": false,
          "region": {
            "left": 274.768421515,
            "top": 326.26985128591633,
            "width": 269.27006622,
            "height": 102.53579721816732
          },
          "span": {
            "left": 246.03986534568594,
            "top": 217.95806816506112,
            "width": 326.660588697339,
            "height": 139.52734940713867
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": -132.23111211720507
          },
          "allowGrow": true,
          "region": {
            "left": 274.768421515,
            "top": 326.26985128591633,
            "width": 314.63942192274135,
            "height": 102.53579721816732
          },
          "span": {
            "left": 246.03986534568594,
            "top": 217.95806816506112,
            "width": 326.660588697339,
            "height": 139.52734940713867
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": -370.3395208508251,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 216,
            "top": 350.1891802822662,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -124.29965550513919,
            "top": 350.1891802822662,
            "width": 326.660588697339,
            "height": 139.52734940713867
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": -370.3395208508251,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 216,
            "top": 350.1891802822662,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": -124.29965550513919,
            "top": 350.1891802822662,
            "width": 326.660588697339,
            "height": 139.52734940713867
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": 424.68055815553396
          },
          "allowGrow": false,
          "region": {
            "left": 246.03986534568594,
            "top": 436.30617141,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 246.03986534568594,
            "top": 774.8697384378002,
            "width": 326.660588697339,
            "height": 139.52734940713867
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 0,
            "dy": 424.68055815553396
          },
          "allowGrow": true,
          "region": {
            "left": 246.03986534568594,
            "top": 436.30617141,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 246.03986534568594,
            "top": 774.8697384378002,
            "width": 326.660588697339,
            "height": 139.52734940713867
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 1471.5992014621143,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 602.80690925,
            "top": 350.1891802822662,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1717.6390668078002,
            "top": 350.1891802822662,
            "width": 326.660588697339,
            "height": 139.52734940713867
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
          "move": {
            "dx": 1471.5992014621143,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 1385.8099573752893,
            "top": 350.1891802822662,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1717.6390668078002,
            "top": 350.1891802822662,
            "width": 326.660588697339,
            "height": 139.52734940713867
          },
          "margin": 13.63906680780022
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "328-38",
          "hash": "3ff461b3e034239d83e540afcd9c842202eb6f5281fcd025ae4ed955283082b5",
          "expected": "3ff461b3e034239d83e540afcd9c842202eb6f5281fcd025ae4ed955283082b5",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "6d07028a-4bab-4535-b803-4c9c26b2ead0",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "328-396"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "overlap-candidates",
          "moverId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
          "obstacleId": "fa5a06be-a628-4926-9afa-47abad3037de",
          "ink": {
            "left": 480.2029128503143,
            "top": 561.9721445975761,
            "width": 857.6426408865167,
            "height": 122.04880366657493
          },
          "obstacle": {
            "left": 1326.6798612,
            "top": 284.6934789,
            "width": 211.84682792,
            "height": 316.97779739
          },
          "moves": [
            {
              "dx": 0,
              "dy": 31.378502429209515
            },
            {
              "dx": -60.281721620999136,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": -220.2058965512103
            },
            {
              "dx": 904.3321099932779,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:c0a531dc-2fdc-447b-8422-33a022f78879:073d42dd-1ca8-4f43-8470-f6f64408d932:bottom",
          "error": 31.378774205577628,
          "before": 0.00027177636806641203,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:c0a531dc-2fdc-447b-8422-33a022f78879:073d42dd-1ca8-4f43-8470-f6f64408d932:bottom",
          "error": 31.378774205577628,
          "before": 0.00027177636806641203,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
          "move": {
            "dx": -60.281721620999136,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 453.2147696999999,
            "top": 512.9041999694922,
            "width": 911.4166312399999,
            "height": 222.27283448101548
          },
          "span": {
            "left": 419.9211912293152,
            "top": 561.9721445975761,
            "width": 857.6426408865167,
            "height": 122.04880366657493
          },
          "margin": 17.062164031298675
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
          "move": {
            "dx": 0,
            "dy": -220.2058965512103
          },
          "allowGrow": false,
          "region": {
            "left": 480.2029128503143,
            "top": 501.91268746,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 480.2029128503143,
            "top": 341.7662480463658,
            "width": 857.6426408865167,
            "height": 122.04880366657493
          },
          "margin": 17.062164031298675
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
          "move": {
            "dx": 904.3321099932779,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 1364.63140094,
            "top": 561.9721445975761,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1384.5350228435923,
            "top": 561.9721445975761,
            "width": 857.6426408865167,
            "height": 122.04880366657493
          },
          "margin": 17.062164031298675
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "328-396",
          "hash": "05f220914c794ca4af10fecc700b85a8819cc452741188a657bcf2476ceeb32a",
          "expected": "05f220914c794ca4af10fecc700b85a8819cc452741188a657bcf2476ceeb32a",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "073d42dd-1ca8-4f43-8470-f6f64408d932",
                "reason": "available-area-exhausted"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "328-437"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:f799f89e-3340-4991-826c-6dcaa94f4b58:875bcdd6-1b59-4e3a-bee6-b7171bc489e8:bottom",
          "error": 17.54490815345946,
          "before": 6.020059117872734e-09,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:f799f89e-3340-4991-826c-6dcaa94f4b58:875bcdd6-1b59-4e3a-bee6-b7171bc489e8:bottom",
          "error": 17.54490815345946,
          "before": 6.020059117872734e-09,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "328-437",
          "hash": "5b2b267d0c82b7cfa173ba3f4f26cbe1ce71aef9a63eebed747faeed180e134e",
          "expected": "5b2b267d0c82b7cfa173ba3f4f26cbe1ce71aef9a63eebed747faeed180e134e",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "ad729899-1d2c-48cb-9056-e4fdd24c1c9a",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "328-78"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": [
            "e2a7a20b-2443-4577-8bd8-c4454ffb3622",
            "e1e758b8-44a6-4bdf-9937-470b4ed59a7d"
          ]
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": [
            "e2a7a20b-2443-4577-8bd8-c4454ffb3622",
            "e1e758b8-44a6-4bdf-9937-470b4ed59a7d"
          ]
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "328-78",
          "hash": "f6071f2ac996e7f1195a6eaba1de8fe65fba18e22f1def8a34922c5faed3ff0b",
          "expected": "f6071f2ac996e7f1195a6eaba1de8fe65fba18e22f1def8a34922c5faed3ff0b",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "e1e758b8-44a6-4bdf-9937-470b4ed59a7d",
                "reason": "container-unresolved"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "329-11"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [
            "1c444d75-110b-4677-a106-dc1d9a270a39",
            "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
            "62564cbb-93ef-434b-8556-538957426446"
          ],
          "immovable": [
            "09dae99f-57a9-4d25-9102-cb606b904df5",
            "72e9e437-32aa-4f87-bd9f-d7ffdbf71588",
            "51e7d43e-1c64-4c03-9807-7c2a4fadc5f9",
            "8da71516-208a-4601-9965-619d5178d283",
            "5409617f-7381-4b42-b1c8-85e3867e145e",
            "cdbd4cad-6fb6-4906-9571-b2180d1ebca7"
          ]
        },
        {
          "kind": "badge-width",
          "id": "1c444d75-110b-4677-a106-dc1d9a270a39",
          "frame": {
            "left": 412.26438151,
            "top": 227.28257255,
            "width": 17.422555,
            "height": 53.74503025
          },
          "width": 33.75465400588256
        },
        {
          "kind": "badge-region",
          "id": "1c444d75-110b-4677-a106-dc1d9a270a39",
          "wanted": {
            "left": 412.26438151,
            "top": 227.28257255,
            "width": 33.75465400588256,
            "height": 27.877258393944874
          },
          "region": {
            "left": 398.38055495294316,
            "top": 231.30995611039074,
            "width": 45.119309404113665,
            "height": 25.770991609218555
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
          "frame": {
            "left": 412.26447939,
            "top": 463.59701883,
            "width": 17.422555,
            "height": 53.74503025
          },
          "width": 39.42107929317329
        },
        {
          "kind": "badge-region",
          "id": "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
          "wanted": {
            "left": 412.26447939,
            "top": 463.59701883,
            "width": 39.42107929317329,
            "height": 27.877258393944874
          },
          "region": {
            "left": 412.26447939,
            "top": 463.59701883,
            "width": 0,
            "height": 0
          },
          "contains": false
        },
        {
          "kind": "badge-width",
          "id": "62564cbb-93ef-434b-8556-538957426446",
          "frame": {
            "left": 412.26438151,
            "top": 699.9114651,
            "width": 17.422555,
            "height": 53.74503025
          },
          "width": 40.24048968601156
        },
        {
          "kind": "badge-region",
          "id": "62564cbb-93ef-434b-8556-538957426446",
          "wanted": {
            "left": 412.26438151,
            "top": 699.9114651,
            "width": 40.24048968601156,
            "height": 27.877258393944874
          },
          "region": {
            "left": 412.26438151,
            "top": 699.9114651,
            "width": 0,
            "height": 0
          },
          "contains": false
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [
            "1c444d75-110b-4677-a106-dc1d9a270a39",
            "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
            "62564cbb-93ef-434b-8556-538957426446"
          ],
          "immovable": [
            "09dae99f-57a9-4d25-9102-cb606b904df5",
            "72e9e437-32aa-4f87-bd9f-d7ffdbf71588",
            "51e7d43e-1c64-4c03-9807-7c2a4fadc5f9",
            "8da71516-208a-4601-9965-619d5178d283",
            "5409617f-7381-4b42-b1c8-85e3867e145e",
            "cdbd4cad-6fb6-4906-9571-b2180d1ebca7"
          ]
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "329-11",
          "hash": "a08e2d17480ed5207ac9140980ee382173ba62085506afb66df90e4378a093b5",
          "expected": "a08e2d17480ed5207ac9140980ee382173ba62085506afb66df90e4378a093b5",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "1c444d75-110b-4677-a106-dc1d9a270a39",
                "reason": "font-floor-reached"
              },
              {
                "nodeId": "06837c73-992b-497d-9e0e-ae7c45c7c7fe",
                "reason": "font-floor-reached"
              },
              {
                "nodeId": "62564cbb-93ef-434b-8556-538957426446",
                "reason": "font-floor-reached"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "329-209"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": [
            "3742dbeb-428a-4c36-a70b-4e6bf87899eb",
            "4694a24a-5c4c-4f6f-ab15-9caf23bc472b"
          ]
        },
        {
          "kind": "overlap-candidates",
          "moverId": "46855bc0-5b50-4e7f-8f72-f7b896001f25",
          "obstacleId": "c8d1c922-6825-4753-a755-8b3d1ec84704",
          "ink": {
            "left": 290.5257020250737,
            "top": 518.9770301358387,
            "width": 617.5804624773375,
            "height": 133.9029196542438
          },
          "obstacle": {
            "left": 893.0842434,
            "top": 518.87142407,
            "width": 133.83151321,
            "height": 89.60803586
          },
          "moves": [
            {
              "dx": -23.447138734354695,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 83.73317721698916
            },
            {
              "dx": 0,
              "dy": -128.2378408626584
            },
            {
              "dx": 744.8152722168697,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:e588ffb4-c964-4413-92dd-a5b396575313:46855bc0-5b50-4e7f-8f72-f7b896001f25:left",
          "error": 23.4471808072189,
          "before": 4.207286423252299e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:e588ffb4-c964-4413-92dd-a5b396575313:46855bc0-5b50-4e7f-8f72-f7b896001f25:left",
          "error": 23.4471808072189,
          "before": 4.207286423252299e-05,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "intent-reject",
          "line": 351
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "intent-reject",
          "line": 351
        },
        {
          "kind": "intent-reject",
          "line": 351
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "intent-reject",
          "line": 351
        },
        {
          "kind": "spacing-reject",
          "equation": "gap:e7612ed1-2671-4561-8a4c-1a1883e25202:46855bc0-5b50-4e7f-8f72-f7b896001f25:y",
          "error": 128.23803377505232,
          "before": 0.00019291239391350246,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "gap:e7612ed1-2671-4561-8a4c-1a1883e25202:46855bc0-5b50-4e7f-8f72-f7b896001f25:y",
          "error": 128.23803377505232,
          "before": 0.00019291239391350246,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "gap:e7612ed1-2671-4561-8a4c-1a1883e25202:46855bc0-5b50-4e7f-8f72-f7b896001f25:y",
          "error": 128.23803377505232,
          "before": 0.00019291239391350246,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "gap:e7612ed1-2671-4561-8a4c-1a1883e25202:46855bc0-5b50-4e7f-8f72-f7b896001f25:y",
          "error": 128.23803377505232,
          "before": 0.00019291239391350246,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "46855bc0-5b50-4e7f-8f72-f7b896001f25",
          "move": {
            "dx": 744.8152722168697,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 917.67636442,
            "top": 518.9770301358387,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1035.3409742419435,
            "top": 518.9770301358387,
            "width": 617.5804624773375,
            "height": 133.9029196542438
          },
          "margin": 8.425217631943527
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "46855bc0-5b50-4e7f-8f72-f7b896001f25",
          "move": {
            "dx": 744.8152722168697,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 917.67636442,
            "top": 518.9770301358387,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1035.3409742419435,
            "top": 518.9770301358387,
            "width": 617.5804624773375,
            "height": 133.9029196542438
          },
          "margin": 8.425217631943527
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": [
            "3742dbeb-428a-4c36-a70b-4e6bf87899eb",
            "4694a24a-5c4c-4f6f-ab15-9caf23bc472b"
          ]
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "329-209",
          "hash": "9c0277f48fcc659a8111d0dae24f18f08135b1d092db6159f6e606ebe299eb6e",
          "expected": "9c0277f48fcc659a8111d0dae24f18f08135b1d092db6159f6e606ebe299eb6e",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "46855bc0-5b50-4e7f-8f72-f7b896001f25",
                "reason": "available-area-exhausted"
              },
              {
                "nodeId": "4694a24a-5c4c-4f6f-ab15-9caf23bc472b",
                "reason": "container-unresolved"
              },
              {
                "nodeId": "3742dbeb-428a-4c36-a70b-4e6bf87899eb",
                "reason": "container-unresolved"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "329-320"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "overlap-candidates",
          "moverId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
          "obstacleId": "7578b278-dd2e-404b-90d9-8579e6e5cdd1",
          "ink": {
            "left": 624.6406450061451,
            "top": 276.39631459280696,
            "width": 739.2396040967095,
            "height": 67.82718660037426
          },
          "obstacle": {
            "left": 1351.11406395,
            "top": 283.14433636,
            "width": 47.52275888,
            "height": 40.66292252
          },
          "moves": [
            {
              "dx": -21.55528413493381,
              "dy": 0
            },
            {
              "dx": 0,
              "dy": 56.20004326927223
            },
            {
              "dx": 0,
              "dy": -69.86826381526039
            },
            {
              "dx": 782.7852768059341,
              "dy": 0
            }
          ]
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:left",
          "error": 21.555579664077243,
          "before": 0.00029552914344321835,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:left",
          "error": 21.555579664077243,
          "before": 0.00029552914344321835,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:left",
          "error": 5.8162507361450935,
          "before": 0.00029552914344321835,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:left",
          "error": 5.8162507361450935,
          "before": 0.00029552914344321835,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:bottom",
          "error": 54.72893977938935,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:bottom",
          "error": 54.72893977938935,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:bottom",
          "error": 7.148368126818809,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": false
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:bottom",
          "error": 7.148368126818809,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
          "move": {
            "dx": 0,
            "dy": -69.86826381526039
          },
          "allowGrow": false,
          "region": {
            "left": 550.991577772762,
            "top": 216,
            "width": 890.669970927238,
            "height": 648
          },
          "span": {
            "left": 624.6406450061451,
            "top": 206.52805077754658,
            "width": 739.2396040967095,
            "height": 67.82718660037426
          },
          "margin": 8.789098982079178
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:top",
          "error": 5.595239502806976,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "attempt-gates",
          "intent": false,
          "improves": true
        },
        {
          "kind": "spacing-reject",
          "equation": "padding:7b7e5d3f-0239-4467-bfc0-639deb06390c:f5424d5f-63db-45de-9234-f2172f6b04b1:top",
          "error": 5.595239502806976,
          "before": 0,
          "tolerance": 4
        },
        {
          "kind": "intent-reject",
          "line": 330
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
          "move": {
            "dx": 782.7852768059341,
            "dy": 0
          },
          "allowGrow": false,
          "region": {
            "left": 1407.4259218120792,
            "top": 276.39631459280696,
            "width": 0,
            "height": 0
          },
          "span": {
            "left": 1407.4259218120792,
            "top": 276.39631459280696,
            "width": 739.2396040967095,
            "height": 67.82718660037426
          },
          "margin": 8.789098982079178
        },
        {
          "kind": "overlap-region-reject",
          "moverId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
          "move": {
            "dx": 782.7852768059341,
            "dy": 0
          },
          "allowGrow": true,
          "region": {
            "left": 546.5028029818803,
            "top": 238.67999643167747,
            "width": 1306.2971970181197,
            "height": 602.6400071366452
          },
          "span": {
            "left": 1407.4259218120792,
            "top": 276.39631459280696,
            "width": 739.2396040967095,
            "height": 67.82718660037426
          },
          "margin": 8.789098982079178
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": false
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "329-320",
          "hash": "32d58396c7a29d77a62d94d5865d86b5f5746076fb0fb178ca8748341f3294b9",
          "expected": "32d58396c7a29d77a62d94d5865d86b5f5746076fb0fb178ca8748341f3294b9",
          "report": {
            "basis": "predicted",
            "status": "unresolved",
            "issues": [
              {
                "nodeId": "f5424d5f-63db-45de-9234-f2172f6b04b1",
                "reason": "available-area-exhausted"
              }
            ],
            "rejected": [],
            "measurementRequests": 0
          }
        }
      ],
      "bypass-trace.jsonl": [
        {
          "kind": "case",
          "key": "324-70"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [
            "809789cc-2e0c-4413-aee6-feae380b56fb",
            "b45ac07f-fafd-4943-8ece-a00441df8d81",
            "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
            "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e"
          ],
          "immovable": [
            "c51c9bfe-9129-44bc-a047-26cad51886b8",
            "f65a9a71-2346-44d6-9af0-7000c1a911fc",
            "b7b9a138-6a7e-41c8-bed2-81fdf603d478",
            "1ed4b51f-67af-43cd-92f8-57bb08523d0e",
            "309400d7-b3a6-428c-898c-6884e26c7810",
            "5d6f6e5e-7faf-4309-86a4-e94e9d78f70c",
            "265f1706-bd42-4207-888a-5c3149052c09",
            "8a366cb7-b192-4c92-9504-2da02866fb1f"
          ]
        },
        {
          "kind": "badge-width",
          "id": "809789cc-2e0c-4413-aee6-feae380b56fb",
          "frame": {
            "left": 323.16983190999997,
            "top": 232.35920538,
            "width": 44.78181261,
            "height": 75.9201777
          },
          "width": 63.98985798502761
        },
        {
          "kind": "badge-region",
          "id": "809789cc-2e0c-4413-aee6-feae380b56fb",
          "wanted": {
            "left": 313.56580922248617,
            "top": 232.3592053798281,
            "width": 63.98985798502761,
            "height": 75.92017770034377
          },
          "region": {
            "left": 308.2515482067359,
            "top": 226.57658330515312,
            "width": 74.61845226652827,
            "height": 86.2106081096938
          },
          "contains": true
        },
        {
          "kind": "badge-gates",
          "id": "809789cc-2e0c-4413-aee6-feae380b56fb",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "b45ac07f-fafd-4943-8ece-a00441df8d81",
          "frame": {
            "left": 323.16983190999997,
            "top": 403.09431825,
            "width": 44.78181261,
            "height": 75.9201777
          },
          "width": 80.0415552564314
        },
        {
          "kind": "badge-region",
          "id": "b45ac07f-fafd-4943-8ece-a00441df8d81",
          "wanted": {
            "left": 305.5399605867843,
            "top": 403.0943182498281,
            "width": 80.0415552564314,
            "height": 75.92017770034377
          },
          "region": {
            "left": 308.2521571093854,
            "top": 404.6382130320346,
            "width": 74.61723446122926,
            "height": 71.55639725593073
          },
          "contains": false
        },
        {
          "kind": "badge-gates",
          "id": "b45ac07f-fafd-4943-8ece-a00441df8d81",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
          "frame": {
            "left": 324.61995659999997,
            "top": 572.14489056,
            "width": 41.88168647,
            "height": 75.9201777
          },
          "width": 80.09577297208122
        },
        {
          "kind": "badge-region",
          "id": "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
          "wanted": {
            "left": 305.51291334895933,
            "top": 572.1448905598281,
            "width": 80.09577297208122,
            "height": 75.92017770034377
          },
          "region": {
            "left": 309.52321062719994,
            "top": 576.1844496569536,
            "width": 72.07512742560016,
            "height": 71.49572788609294
          },
          "contains": false
        },
        {
          "kind": "badge-gates",
          "id": "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e",
          "frame": {
            "left": 324.61995659999997,
            "top": 742.73605089,
            "width": 41.88168647,
            "height": 75.9201777
          },
          "width": 83.29527170413296
        },
        {
          "kind": "badge-region",
          "id": "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e",
          "wanted": {
            "left": 303.9131639829335,
            "top": 742.7360508898281,
            "width": 83.29527170413296,
            "height": 75.92017770034377
          },
          "region": {
            "left": 309.523639888121,
            "top": 748.653265822774,
            "width": 72.07426890375802,
            "height": 67.74119381445212
          },
          "contains": false
        },
        {
          "kind": "badge-gates",
          "id": "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": true
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [
            "809789cc-2e0c-4413-aee6-feae380b56fb",
            "b45ac07f-fafd-4943-8ece-a00441df8d81",
            "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
            "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e"
          ],
          "immovable": [
            "c51c9bfe-9129-44bc-a047-26cad51886b8",
            "f65a9a71-2346-44d6-9af0-7000c1a911fc",
            "b7b9a138-6a7e-41c8-bed2-81fdf603d478",
            "1ed4b51f-67af-43cd-92f8-57bb08523d0e",
            "309400d7-b3a6-428c-898c-6884e26c7810",
            "5d6f6e5e-7faf-4309-86a4-e94e9d78f70c",
            "265f1706-bd42-4207-888a-5c3149052c09",
            "8a366cb7-b192-4c92-9504-2da02866fb1f"
          ]
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "324-70",
          "hash": "cf698fb02b437ca4c2e256c94661f5d917792489e0b8ffe2f8d992ad4af6f8e6",
          "expected": "edc5df64e9c1469a202dfb9c02ebe579f59d0bbcadd117491ac6af207843126c",
          "report": {
            "basis": "predicted",
            "status": "resolved",
            "issues": [],
            "rejected": [],
            "measurementRequests": 0
          }
        },
        {
          "kind": "case",
          "key": "324-299"
        },
        {
          "kind": "safety",
          "phase": "expand",
          "badges": [
            "dd5a8db3-7a02-481b-b234-3c1947b6d844",
            "23beec29-3f2a-4c56-9273-a18673e209ad",
            "482c7b14-f308-415a-9289-f39ef6012102",
            "c79f1945-9df2-49c3-97ac-a84e0da52139",
            "85864396-2662-43d5-a5a5-fcdf8ea56136",
            "f4016626-206f-4bf3-8544-2f4d19ce6861"
          ],
          "immovable": []
        },
        {
          "kind": "badge-width",
          "id": "dd5a8db3-7a02-481b-b234-3c1947b6d844",
          "frame": {
            "left": 451.87001140999996,
            "top": 384.3639,
            "width": 22.95009139,
            "height": 44.36303571
          },
          "width": 34.66673994475239
        },
        {
          "kind": "badge-region",
          "id": "dd5a8db3-7a02-481b-b234-3c1947b6d844",
          "wanted": {
            "left": 446.01168713262376,
            "top": 384.3639,
            "width": 34.66673994475239,
            "height": 45.39228948994889
          },
          "region": {
            "left": 443.69462546892646,
            "top": 382.5602602034996,
            "width": 39.30100754214698,
            "height": 49.315389833000836
          },
          "contains": true
        },
        {
          "kind": "badge-gates",
          "id": "dd5a8db3-7a02-481b-b234-3c1947b6d844",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "23beec29-3f2a-4c56-9273-a18673e209ad",
          "frame": {
            "left": 816.37801741,
            "top": 384.10058993999996,
            "width": 23.24364563,
            "height": 7.57212075
          },
          "width": 40.273817784671834
        },
        {
          "kind": "badge-region",
          "id": "23beec29-3f2a-4c56-9273-a18673e209ad",
          "wanted": {
            "left": 807.8629313326641,
            "top": 384.10058993999996,
            "width": 40.273817784671834,
            "height": 45.686074455207084
          },
          "region": {
            "left": 808.2019793604575,
            "top": 384.39726429706303,
            "width": 39.595468049085184,
            "height": 45.37608183587395
          },
          "contains": true
        },
        {
          "kind": "badge-gates",
          "id": "23beec29-3f2a-4c56-9273-a18673e209ad",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "482c7b14-f308-415a-9289-f39ef6012102",
          "frame": {
            "left": 1180.47547195,
            "top": 384.06278471999997,
            "width": 23.02988031,
            "height": 29.38261683
          },
          "width": 40.656400733655644
        },
        {
          "kind": "badge-region",
          "id": "482c7b14-f308-415a-9289-f39ef6012102",
          "wanted": {
            "left": 1171.6622117381721,
            "top": 384.06278471999997,
            "width": 40.656400733655644,
            "height": 45.47196924188281
          },
          "region": {
            "left": 1172.3009857751665,
            "top": 384.62815884793946,
            "width": 39.380124449667164,
            "height": 44.64899292412099
          },
          "contains": false
        },
        {
          "kind": "badge-gates",
          "id": "482c7b14-f308-415a-9289-f39ef6012102",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "c79f1945-9df2-49c3-97ac-a84e0da52139",
          "frame": {
            "left": 453.00814757999996,
            "top": 610.62351354,
            "width": 21.7353499,
            "height": 43.69421489
          },
          "width": 40.75979115021612
        },
        {
          "kind": "badge-region",
          "id": "c79f1945-9df2-49c3-97ac-a84e0da52139",
          "wanted": {
            "left": 443.4959269548919,
            "top": 610.62351354,
            "width": 40.75979115021612,
            "height": 44.88859703333555
          },
          "region": {
            "left": 444.82352160942986,
            "top": 610.8402134936831,
            "width": 38.10441449114012,
            "height": 43.499854602633604
          },
          "contains": false
        },
        {
          "kind": "badge-gates",
          "id": "c79f1945-9df2-49c3-97ac-a84e0da52139",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "85864396-2662-43d5-a5a5-fcdf8ea56136",
          "frame": {
            "left": 817.3649326899999,
            "top": 610.13602515,
            "width": 22.33021839,
            "height": 44.69824201
          },
          "width": 40.59248746887693
        },
        {
          "kind": "badge-region",
          "id": "85864396-2662-43d5-a5a5-fcdf8ea56136",
          "wanted": {
            "left": 808.2337981505615,
            "top": 610.13602515,
            "width": 40.59248746887693,
            "height": 45.68601228242878
          },
          "region": {
            "left": 809.1823060206455,
            "top": 609.9120058935893,
            "width": 38.69601394870915,
            "height": 45.09097000282145
          },
          "contains": false
        },
        {
          "kind": "badge-gates",
          "id": "85864396-2662-43d5-a5a5-fcdf8ea56136",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "badge-width",
          "id": "f4016626-206f-4bf3-8544-2f4d19ce6861",
          "frame": {
            "left": 1181.43718375,
            "top": 610.09821992,
            "width": 22.16427337,
            "height": 30.13892025
          },
          "width": 40.65640073365567
        },
        {
          "kind": "badge-region",
          "id": "f4016626-206f-4bf3-8544-2f4d19ce6861",
          "wanted": {
            "left": 1172.1911200681723,
            "top": 610.09821992,
            "width": 40.65640073365567,
            "height": 45.471969241882974
          },
          "region": {
            "left": 1173.2525398337634,
            "top": 610.0018847551579,
            "width": 38.53821557247329,
            "height": 44.64591248968418
          },
          "contains": false
        },
        {
          "kind": "badge-gates",
          "id": "f4016626-206f-4bf3-8544-2f4d19ce6861",
          "intent": true,
          "metrics": true
        },
        {
          "kind": "phase",
          "phase": "expand",
          "changed": true
        },
        {
          "kind": "safety",
          "phase": "shrink",
          "badges": [
            "dd5a8db3-7a02-481b-b234-3c1947b6d844",
            "23beec29-3f2a-4c56-9273-a18673e209ad",
            "482c7b14-f308-415a-9289-f39ef6012102",
            "c79f1945-9df2-49c3-97ac-a84e0da52139",
            "85864396-2662-43d5-a5a5-fcdf8ea56136",
            "f4016626-206f-4bf3-8544-2f4d19ce6861"
          ],
          "immovable": []
        },
        {
          "kind": "phase",
          "phase": "shrink",
          "changed": false
        },
        {
          "kind": "result",
          "key": "324-299",
          "hash": "39fa3b494c7ff48074d9a537a23c38475dd693f926f7e6174f90c2f64fe55569",
          "expected": "d77b52259e9bb6c4f7bb923545a0183861af1508ed3ca34c733bc55b4c193030",
          "report": {
            "basis": "predicted",
            "status": "resolved",
            "issues": [],
            "rejected": [],
            "measurementRequests": 0
          }
        }
      ],
      "shapes.jsonl": [
        {
          "key": "324-70",
          "node": "809789cc-2e0c-4413-aee6-feae380b56fb",
          "owner": "05c5f1be-1b1e-49fc-8673-73e36c8351c0",
          "wanted": {
            "left": 313.56580922248617,
            "top": 232.3592053798281,
            "width": 63.98985798502761,
            "height": 75.92017770034377
          },
          "syntheticRegion": {
            "left": 291.87888698,
            "top": 216.00000000000003,
            "width": 107.36377472000004,
            "height": 107.36377472000001
          },
          "syntheticContains": true,
          "actualRegion": {
            "left": 308.2515482067359,
            "top": 226.57658330515312,
            "width": 74.61845226652827,
            "height": 86.2106081096938
          },
          "actualContains": true,
          "actualMode": "outer-envelope"
        },
        {
          "key": "324-70",
          "node": "b45ac07f-fafd-4943-8ece-a00441df8d81",
          "owner": "324ed881-f8e1-415b-9470-b253391a202d",
          "wanted": {
            "left": 305.5399605867843,
            "top": 403.0943182498281,
            "width": 80.0415552564314,
            "height": 75.92017770034377
          },
          "syntheticRegion": {
            "left": 291.87888698,
            "top": 386.7345243,
            "width": 107.36377472000004,
            "height": 107.36377472000004
          },
          "syntheticContains": true,
          "actualRegion": {
            "left": 308.2521571093854,
            "top": 404.6382130320346,
            "width": 74.61723446122926,
            "height": 71.55639725593073
          },
          "actualContains": false,
          "actualMode": "outer-envelope"
        },
        {
          "key": "324-70",
          "node": "5eaa5c62-5bb3-4106-be58-9a17b964c90a",
          "owner": "f0b8d0cd-2abc-471a-9fd8-2c58b8247a2c",
          "wanted": {
            "left": 305.51291334895933,
            "top": 572.1448905598281,
            "width": 80.09577297208122,
            "height": 75.92017770034377
          },
          "syntheticRegion": {
            "left": 291.87888698,
            "top": 558.25042624,
            "width": 107.36377472000004,
            "height": 107.36377472000004
          },
          "syntheticContains": true,
          "actualRegion": {
            "left": 309.52321062719994,
            "top": 576.1844496569536,
            "width": 72.07512742560016,
            "height": 71.49572788609294
          },
          "actualContains": false,
          "actualMode": "outer-envelope"
        },
        {
          "key": "324-70",
          "node": "6a65ecc5-e830-47ec-bc98-4dc6bec98e7e",
          "owner": "b91cc2c6-27ee-40c0-871d-59fd33797c44",
          "wanted": {
            "left": 303.9131639829335,
            "top": 742.7360508898281,
            "width": 83.29527170413296,
            "height": 75.92017770034377
          },
          "syntheticRegion": {
            "left": 291.87888698,
            "top": 728.84197537,
            "width": 107.36377472000004,
            "height": 107.36377472000004
          },
          "syntheticContains": true,
          "actualRegion": {
            "left": 309.523639888121,
            "top": 748.653265822774,
            "width": 72.07426890375802,
            "height": 67.74119381445212
          },
          "actualContains": false,
          "actualMode": "outer-envelope"
        },
        {
          "key": "324-299",
          "node": "dd5a8db3-7a02-481b-b234-3c1947b6d844",
          "owner": "4097fe29-3b40-4c80-8d56-13d5aa946b79",
          "wanted": {
            "left": 446.01168713262376,
            "top": 384.3639,
            "width": 34.66673994475239,
            "height": 45.39228948994889
          },
          "syntheticRegion": {
            "left": 433.20462270999997,
            "top": 377.07744859,
            "width": 60.281013059999964,
            "height": 60.281013059999964
          },
          "syntheticContains": true,
          "actualRegion": {
            "left": 443.69462546892646,
            "top": 382.5602602034996,
            "width": 39.30100754214698,
            "height": 49.315389833000836
          },
          "actualContains": true,
          "actualMode": "outer-envelope"
        },
        {
          "key": "324-299",
          "node": "23beec29-3f2a-4c56-9273-a18673e209ad",
          "owner": "63ef35f2-d7e1-4635-81d5-a3fbb60323d2",
          "wanted": {
            "left": 807.8629313326641,
            "top": 384.10058993999996,
            "width": 40.273817784671834,
            "height": 45.686074455207084
          },
          "syntheticRegion": {
            "left": 797.66413347,
            "top": 376.7497253,
            "width": 60.67115983000008,
            "height": 60.671159829999965
          },
          "syntheticContains": true,
          "actualRegion": {
            "left": 808.2019793604575,
            "top": 384.39726429706303,
            "width": 39.595468049085184,
            "height": 45.37608183587395
          },
          "actualContains": true,
          "actualMode": "outer-envelope"
        },
        {
          "key": "324-299",
          "node": "482c7b14-f308-415a-9289-f39ef6012102",
          "owner": "b18c65f6-7e8b-4f7b-8fd0-0ab68b9eb71d",
          "wanted": {
            "left": 1171.6622117381721,
            "top": 384.06278471999997,
            "width": 40.656400733655644,
            "height": 45.47196924188281
          },
          "syntheticRegion": {
            "left": 1161.79759298,
            "top": 376.75920028999997,
            "width": 60.3869100400002,
            "height": 60.386910039999975
          },
          "syntheticContains": true,
          "actualRegion": {
            "left": 1172.3009857751665,
            "top": 384.62815884793946,
            "width": 39.380124449667164,
            "height": 44.64899292412099
          },
          "actualContains": false,
          "actualMode": "outer-envelope"
        },
        {
          "key": "324-299",
          "node": "c79f1945-9df2-49c3-97ac-a84e0da52139",
          "owner": "2e8d97ac-82d7-4ec3-a07a-b6a0e5dade5b",
          "wanted": {
            "left": 443.4959269548919,
            "top": 610.62351354,
            "width": 40.75979115021612,
            "height": 44.88859703333555
          },
          "syntheticRegion": {
            "left": 434.06963384999995,
            "top": 602.7840457899999,
            "width": 59.61219000999995,
            "height": 59.61219000999995
          },
          "syntheticContains": true,
          "actualRegion": {
            "left": 444.82352160942986,
            "top": 610.8402134936831,
            "width": 38.10441449114012,
            "height": 43.499854602633604
          },
          "actualContains": false,
          "actualMode": "outer-envelope"
        },
        {
          "key": "324-299",
          "node": "85864396-2662-43d5-a5a5-fcdf8ea56136",
          "owner": "2cf74ec3-2529-4de5-b7b2-494033bee6d0",
          "wanted": {
            "left": 808.2337981505615,
            "top": 610.13602515,
            "width": 40.59248746887693,
            "height": 45.68601228242878
          },
          "syntheticRegion": {
            "left": 798.19473308,
            "top": 602.1219109799999,
            "width": 60.67115983000008,
            "height": 60.67115983000008
          },
          "syntheticContains": true,
          "actualRegion": {
            "left": 809.1823060206455,
            "top": 609.9120058935893,
            "width": 38.69601394870915,
            "height": 45.09097000282145
          },
          "actualContains": false,
          "actualMode": "outer-envelope"
        },
        {
          "key": "324-299",
          "node": "f4016626-206f-4bf3-8544-2f4d19ce6861",
          "owner": "281f9aeb-512e-477b-a755-98da9d5b643b",
          "wanted": {
            "left": 1172.1911200681723,
            "top": 610.09821992,
            "width": 40.65640073365567,
            "height": 45.471969241882974
          },
          "syntheticRegion": {
            "left": 1162.3281926,
            "top": 602.13138598,
            "width": 60.3869100400002,
            "height": 60.386910039999975
          },
          "syntheticContains": true,
          "actualRegion": {
            "left": 1173.2525398337634,
            "top": 610.0018847551579,
            "width": 38.53821557247329,
            "height": 44.64591248968418
          },
          "actualContains": false,
          "actualMode": "outer-envelope"
        }
      ]
    },
    "findings": {
      "title": "코드·저장 입력 재현으로 좁힌 원인",
      "scope": "번호 배지·아이콘·화살표 4페이지와 이전 개선이 사라진 고유 22페이지를 네트워크 없이 재실행했습니다. 26페이지 모두 저장 출력 SHA-256과 일치했습니다. 원본 알고리즘은 수정하지 않았습니다.",
      "findings": [
        "번호 배지: 324:70의 02~04, 324:299의 03~06은 모두 배지로 인식됐으나 넓힌 글상자 전체가 도형 안쪽 영역에 들어가지 않아 거절됐습니다. 이전 합성 사각형에서는 통과하던 후보가 실제 외곽선에서는 막힙니다. 배지 탐지 실패나 그래픽 도형의 변형이 원인은 아닙니다.",
        "아이콘 가림: 329:142의 제목을 약 45.6px 위로 옮기는 후보는 기하 지표가 개선되지만 원안 위쪽 padding 감소가 허용 오차 4px를 넘어 거절됩니다. 이동 대신 축소가 적용돼 입력 대비 글꼴 배율 0.7703과 겹침 1쌍이 남습니다. 325:101의 왼쪽 회피도 padding 검사에 걸리며, 이 후보는 다른 기하 조건도 충족하지 못하므로 여백만 풀면 해결된다고 단정할 수 없습니다.",
        "이전 개선 상실: 입력 유지 전환에서 A 13장·B 14장, 중복 제거 22페이지가 비-BAD에서 원판정 BAD로 돌아갑니다. 그중 21페이지는 현재 실행도 unresolved이고 8페이지에서는 padding 검사에 걸린 후보를 재현했습니다. 이는 후보 제한의 근거이지, 제한 해제 시 22페이지가 모두 개선된다는 뜻은 아닙니다.",
        "완료 조건의 빈틈: 최신 A 또는 B가 BAD인 고유 52페이지 중 26페이지는 예측 기하 상태가 resolved입니다. 가독성 축의 감소와 달리 공통 페이지의 디자인 완결성 BAD는 A·B 각각 6장 늘었습니다. 번호의 한 줄 여부·위계·전체 구도는 현재 완료 상태로 보장되지 않습니다.",
        "판정 변동: A/B 163페이지는 출력 JSON과 이미지가 모두 같고 BAD 여부가 17페이지에서 다릅니다. 328:416은 직전 이미지까지 같으므로 이번 재배치가 순서 문제를 새로 만들었다고 해석하지 않습니다.",
        "범위: a67456043 결과와 cb1447b79 결과 사이에는 원시 글자 측정·실제 외곽선·padding·실행 경로 변경이 함께 있습니다. BAD 증가 전체를 cb1447b79 마지막 9줄 변경 하나의 효과로 귀속하지 않습니다."
      ],
      "priorities": [
        [
          "P0",
          "번호 한 줄 보정 복구",
          "실제 외곽선을 유지하되 글상자 전체와 실제 글자 영역을 구분합니다. 배경 도형·폰트·정렬 중심을 고정한 글상자 확장 후보를 검증합니다.",
          "두 배지 사례의 7개 번호 한 줄, 실제 글자 넘침·겹침 증가 0."
        ],
        [
          "P0",
          "여백 보존과 장애물 회피 충돌 해소",
          "물리적 경계·읽는 순서는 엄격히 유지하고 원안 padding은 제한된 조정 후보를 허용합니다. 이동·폭 조정을 먼저 비교하고 가림이 남는 축소의 손실도 평가합니다.",
          "329:142 아이콘 가림 제거·불필요한 축소 방지; 325:101 화살표 가림 제거·두 열 정렬 유지."
        ],
        [
          "P1",
          "기존 개선이 사라진 22페이지 점검",
          "후보별 거절 원인을 가용영역·padding·이동 한도·글꼴 하한·컨테이너 미확정으로 남깁니다. 안전 조건을 만족하는 기존 개선부터 복구합니다.",
          "새 출력으로 재판정하기 전 복구 장수를 성과로 계산하지 않음."
        ],
        [
          "P1",
          "시각 품질 조건 추가",
          "짧은 번호 줄바꿈, 제목/본문 위계, 장식 상대 위치와 실제 글자 가림을 별도로 검사합니다. resolved와 시각적 통과를 구분합니다.",
          "52개 BAD와 정상 대조군에서 규칙·이미지·총평을 함께 확인."
        ],
        [
          "평가",
          "효과와 판정 변동 분리",
          "같은 D.O.·같은 입력으로 전체 3,114장 판정을 재구성합니다. 같은 이미지의 A/B는 반복 판정으로 다루고 경계 사례는 반복별 결과를 남깁니다.",
          "전체 BAD뿐 아니라 새 BAD·탈출·입력 유지 전환, 실제 이미지 변경분을 함께 비교."
        ]
      ],
      "experiment_note": "진단용 임시 복사본에서 배지 글상자 포함 검사만 건너뛴 경우, 두 페이지의 모든 배지 확장이 나머지 예측 안전 검사를 통과했습니다. 새 렌더·LLM 판정은 수행하지 않았으며, 이 실험은 조건 삭제를 확정한 수정안이 아닙니다."
    },
    "counterfactual_scope": "Only the badge contains(region,wanted) precheck bypassed in a temporary copy; downstream predicted safety checks retained. Not rendered, judged, or applied as a fix.",
    "reproduction_files": {
      "run-bypass.ts": "import { readFileSync } from 'node:fs';\nimport { createHash } from 'node:crypto';\nimport { runSimpleRelayoutVerified } from './simpleRelayoutVerified-bypass.ts';\nconst root='/Users/miridih/Documents/miricanvas-iui-simple-relayout/eval-out/runs/simple-cb1447b79-20261018-full/cases';\nglobalThis.fetch=async()=>{throw Error('Network forbidden in diagnostic replay')};\nfor(const key of process.argv.slice(2)) {\n console.log(JSON.stringify({kind:'case',key}));\n const read=(name:string)=>JSON.parse(readFileSync(`${root}/${key}/${name}.json`,'utf8'));\n const c=read('context');\n const r=await runSimpleRelayoutVerified(read('input'),{...c,tight:c.inputTight});\n const hash=createHash('sha256').update(JSON.stringify(r.doc)).digest('hex');\n console.log(JSON.stringify({kind:'result',key,hash,expected:read('result').A.outputSha256,report:r.report}));\n}\n",
      "run.ts": "import { readFileSync } from 'node:fs';\nimport { createHash } from 'node:crypto';\nimport { runSimpleRelayoutVerified } from './simpleRelayoutVerified.ts';\nconst root='/Users/miridih/Documents/miricanvas-iui-simple-relayout/eval-out/runs/simple-cb1447b79-20261018-full/cases';\nglobalThis.fetch=async()=>{throw Error('Network forbidden in diagnostic replay')};\nfor(const key of process.argv.slice(2)) {\n console.log(JSON.stringify({kind:'case',key}));\n const read=(name:string)=>JSON.parse(readFileSync(`${root}/${key}/${name}.json`,'utf8'));\n const c=read('context');\n const r=await runSimpleRelayoutVerified(read('input'),{...c,tight:c.inputTight});\n const hash=createHash('sha256').update(JSON.stringify(r.doc)).digest('hex');\n console.log(JSON.stringify({kind:'result',key,hash,expected:read('result').A.outputSha256,report:r.report}));\n}\n",
      "shapes.ts": "import {readFileSync} from 'node:fs';\nimport {outlinesFromDoc} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/docOutlines.ts';\nimport {fitRectIn} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/containerShape.ts';\nimport {absBoxMap} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/metrics.ts';\nconst root='/Users/miridih/Documents/miricanvas-iui-simple-relayout/eval-out/runs/simple-cb1447b79-20261018-full/cases';\nconst rows=readFileSync('/tmp/cb1447-diagnostic/trace.jsonl','utf8').trim().split('\\n').map(JSON.parse);\nlet key='';\nfor(const r of rows) {\n if(r.kind==='case') key=r.key;\n if(r.kind!=='badge-region')continue;\n const read=(f)=>JSON.parse(readFileSync(`${root}/${key}/${f}.json`,'utf8'));\n const input=read('input'),context=read('context'),result=read('result');\n const owner=result.A.metrics.nodes.find(n=>n.nodeId===r.id).containerId;\n const outlines=outlinesFromDoc(input,read('original'));\n const region=fitRectIn({byId:new Map(input.nodes.map(n=>[n.id,n])),abs:absBoxMap(input),outlines},owner,r.wanted);\n const contains=(o,i)=>i.left>=o.left-.5&&i.top>=o.top-.5&&i.left+i.width<=o.left+o.width+.5&&i.top+i.height<=o.top+o.height+.5;\n console.log(JSON.stringify({key,node:r.id,owner,wanted:r.wanted,syntheticRegion:region,syntheticContains:contains(region,r.wanted),actualRegion:r.region,actualContains:r.contains,actualMode:context.outlines.quality.resources[context.outlines.nodes[owner]].silhouetteMode}));\n}\n",
      "simpleRelayout-bypass.ts": "/**\n * **간소 재배치** — 렌더 없이, 컨테이너를 옮기지 않고 대치가 남긴 결함만 고친다.\n *\n * Adaptive Relayout 은 후보를 고칠 때마다 렌더해서 다시 잰다. 프로덕션 썸네일에서는 그\n * 왕복이 너무 느리다. 이 후보는 렌더를 한 번도 안 하고 합성 판정 박스\n * (`../relayout-core/syntheticTight.ts`)로만 판단한다. 그 대신 손대는 범위를 좁힌다.\n *\n * | 결함 | 고치는 법 |\n * | --- | --- |\n * | 글이 컨테이너 밖으로 넘친다 | 컨테이너 안에서 옮겨 담기면 옮긴다. 안 되면 **컨테이너를 제자리에서 키운다** |\n * | 글이 장식·다른 글과 새로 겹친다 | 글을 컨테이너 안에서 비킨다. 모자라면 그쪽으로 컨테이너를 키운다 |\n * | 컨테이너 없는 글이 이미지·장식과 겹친다 | 글의 위치·크기·폰트를 고정하고 그래픽 묶음만 최소 이동한다 |\n * | 글이 페이지 밖으로 나간다 | 컨테이너가 있는 글만 컨테이너와 페이지의 교집합 안으로 옮긴다 |\n * | 위로 못 푼다 | 가독성 하한까지 5%씩 줄인다. 원안의 반복 역할은 함께 줄인다 |\n * | 짧은 숫자 배지가 줄바꿈됐다 | 도형·폰트·정렬 앵커를 지키며 글상자 폭만 연다 |\n *\n * ## 하지 않는 것\n *\n * - **컨테이너를 옮기지 않는다.** 키운 상자는 언제나 옛 상자를 포함한다. 그래서 카드끼리 새로\n *   겹친 것(유닛 사이 겹침)은 못 푼다 — 키우는 한계를 이웃 앞에서 멈춰 새로 만들지 않을 뿐이다.\n * - 컨테이너 없는 글은 입력의 x/y 를 고정한다. 컨테이너가 있어도 입력에서 max(24px, 3em), 최대 64px 까지만\n *   옮기며 원안의 읽는 순서를 뒤집지 않는다. 글에 붙은 장식은 같은 후보에서 따라오게 한다.\n * - 정렬선·컨테이너 크기 묶음·중앙 복원을 투영하지 않는다. 정렬선은 바닥만 지킨다(아래 게이트).\n * - 원안의 글을 거의 담지 않던 도형(밑줄 등)은 컨테이너라는 소속만으로 키우지 않는다.\n *\n * ## 장식\n *\n * 컨테이너 변에 붙은 장식은 두 가지로 반영한다. 안쪽으로 파고든 깊이는 쓸 수 있는 영역에서\n * 빼고(`fitRectIn`), 바깥으로 내민 몫만큼은 성장 상한을 페이지에서 떼어 놓는다\n * (`decorationOverhangOf`). 코너·중앙에 앉은 장식(카드 안 아이콘)은 영역에서 빠지지 않으므로,\n * 글이 그 위에 새로 겹치면 겹침으로 잡혀 글이 비킨다. 끝에서 `carryDecorations` 가 장식을 키운\n * 변과 옮긴 글에 다시 붙인다(글에 붙은 머리 아이콘은 글을 따라간다).\n *\n * ## 게이트\n *\n * 고치기 하나마다 같은 합성 자로 지표를 다시 잰다. 넘침·신규 겹침·잘림·글상자 이탈이 하나도\n * 나빠지지 않고 하나라도 나아졌을 때만 받는다. 정렬선은 판정 바닥(`EXCESSIVE_GUIDE_KEPT`)\n * 밑으로 떨어뜨리는 고치기만 거절한다. 원안의 지지 도형·이동 한도·읽는 순서·장식 동행도\n * 후보, 축소 후 정리, 최종 결과에서 모두 검사한다. 자가 예측이라 경계에 걸친 판정은 틀릴 수 있다.\n */\nimport type {\n  Doc,\n  Node,\n  TextTree,\n} from '@miri-unicorn/miricanvas-iui-color-mapper';\n\nimport type { AbsBox } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/packages/comp-sign/src/comp-match/docLayout';\nimport {\n  boundsMinusOverhang,\n  boxForInnerRect,\n  type CaseOutlines,\n  decorationInsetOf,\n  decorationOverhangOf,\n  fitRectIn,\n  inscribedRectIn,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/containerShape';\nimport { carryDecorations } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/decorations';\nimport {\n  type BoxView,\n  canWidenByBox,\n  groupsFittingChildren,\n  maxStretchHeight,\n  refitGroupBoxes,\n  resizeNode,\n  translateNode,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/geometry';\nimport {\n  absBoxMap,\n  buildContainerParentAssignments,\n  buildTextContainerAssignments,\n  classifyDecorations,\n  computeLayoutMetrics,\n  type ContainerParentAssignments,\n  type DecorationBindings,\n  judgeBoxOf,\n  type LayoutMetrics,\n  OVERLAP_MIN_AREA,\n  obstacleAvoidanceMoves,\n  type TextContainerAssignments,\n  type TightBoxMap,\n  validContainerOf,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/metrics';\nimport { neighborsOf } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/neighbors';\nimport { renderedFontRange } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/renderedFont';\nimport {\n  buildRlscContainerAssignments,\n  type RlscAssignmentReport,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/rlscAssignments';\nimport {\n  createSyntheticRuler,\n  type SyntheticRuler,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/syntheticTight';\nimport {\n  boxHeightOf,\n  flowAt,\n  growAnchorOf,\n  maxContentWidth,\n  pageBoxOf,\n  textBlocksOf,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/textOverflow';\nimport {\n  EXCESSIVE_FONT_SCALE,\n  EXCESSIVE_GUIDE_KEPT,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/verdict';\nimport { authoredBoxMap } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/authoredLayoutConstraints';\nimport { PAGE_MIN_FONT_RATIO } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/shrinkFontToReadableFloor';\nimport { graphicAvoidanceMoves } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/simpleRelayoutObstacles';\nimport {\n  authoredSupportAssignments,\n  followTextMoves,\n  freezeSimpleSafety,\n  preservesSimpleIntent,\n  type SimpleSafety,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/simpleRelayoutSafety';\nimport { simplePaddingOf, simpleSpacingBounds } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/simpleRelayoutSpacing';\nimport type { RelayoutMethod, RelayoutRunContext } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/types';\n\nexport const SIMPLE_RELAYOUT_KEY = 'simple-relayout';\n\n/** 좌표 반올림 잡음. 이보다 작은 이동·확장은 하지 않는다. */\nconst MOVE_EPS = 0.5;\n/** 넘침 면적이 이보다 작으면 결함으로 안 본다(`actualOutlineFit` 과 같다). */\nconst OVERFLOW_EPS = 1;\n/** 비켜 설 때 장애물과 띄우는 간격 — 글자 크기에 대한 비율. */\nconst AVOID_GAP_EM = 0.25;\n/** 컨테이너를 키울 때 이웃 앞에 남길 간격(px). */\nconst NEIGHBOR_GAP = 4;\n/** 한 번에 줄이는 글자 크기 비율. */\nconst SHRINK_STEP = 0.05;\n/**\n * 글자를 줄일 만큼 확실한 결함의 깊이 — 글자 크기에 대한 비율. 합성 자의 변별 오차가\n * p90 7px 안팎(16px 글자의 0.45em)이라, 그보다 얕은 넘침·겹침은 자가 잘못 본 것일 수 있다.\n * 기하 보정(옮기기·키우기)은 얕은 것도 고치지만, 되돌릴 수 없는 축소는 깊은 것에만 건다.\n */\nconst SHRINK_DEPTH_EM = 0.5;\n/**\n * 옮기거나 키울 때 남기는 여유 — 글자 크기에 대한 비율. 합성 자는 아래 변을 p90 7px 안팎\n * 틀리는데, 여유 없이 「딱 맞게」 옮기면 실제로는 몇 px 넘친다(5613032: 겹침을 비키려고 내린\n * 글이 실제로 4.7px 넘쳤다).\n */\nconst SAFETY_EM = 0.3;\n/** 이보다 얕은 새 겹침은 자의 오차일 수 있어 건드리지 않는다 — 글자 크기에 대한 비율. */\nconst OVERLAP_DEPTH_EM = 0.15;\nconst MAX_PASSES = 6;\n\nexport type SimpleRelayoutReport = {\n  passes: number;\n  moved: number;\n  grown: number;\n  shrunk: number;\n  /** Short numeric badge frames restored to one line, without scaling their glyphs. */\n  widened: number;\n  /** 게이트가 거절한 고치기 수. */\n  rejected: number;\n  /** 끝에 남은 결함 — 합성 자로 잰 값이다. */\n  remaining: {\n    overflowNodes: number;\n    newOverlapPairs: number;\n    clippedTextNodes: number;\n  };\n  /** 결과가 입력보다 낫지 않아 입력을 돌려줬나. */\n  revertedToInput: boolean;\n  /** RLSC 로 컨테이너 소속을 정했으면 그 내역. */\n  rlsc?: RlscAssignmentReport;\n};\n\n/**\n * 간소 재배치의 입력. `rlsc` 가 있으면 기하 소속을 먼저 보존하고, 컨테이너를 못 찾은 글만\n * Background로 보완한다(`relayout-core/rlscAssignments.ts`). 장식은 이 소속 위에서 다시 분류한다.\n */\nexport type SimpleRelayoutContext = RelayoutRunContext & {\n  /** Checked callers validate expansion before attempting a shrink. */\n  phase?: 'expand' | 'shrink';\n  /** Keep cumulative movement/attachment constraints anchored to the first input. */\n  safety?: SimpleSafety;\n  /** Only expand/shrink text with a trusted container; fixed text may move a graphic obstacle. */\n  requireContainer?: boolean;\n};\n\ntype Context = {\n  safety: SimpleSafety;\n  requireContainer?: boolean;\n  base: Doc;\n  containers: TextContainerAssignments;\n  authoredGraphics: ReadonlySet<string>;\n  containerParents: ContainerParentAssignments;\n  decorations: DecorationBindings;\n  outlines?: CaseOutlines;\n  ruler: SyntheticRuler;\n  baseTight: TightBoxMap;\n  baseClipped: Map<string, number>;\n  report: SimpleRelayoutReport;\n};\n\nconst rightOf = (b: AbsBox) => b.left + b.width;\nconst bottomOf = (b: AbsBox) => b.top + b.height;\n\nconst unionBox = (a: AbsBox, b: AbsBox): AbsBox => {\n  const left = Math.min(a.left, b.left);\n  const top = Math.min(a.top, b.top);\n  return {\n    left,\n    top,\n    width: Math.max(rightOf(a), rightOf(b)) - left,\n    height: Math.max(bottomOf(a), bottomOf(b)) - top,\n  };\n};\n\nconst contains = (outer: AbsBox, inner: AbsBox, eps = MOVE_EPS): boolean =>\n  inner.left >= outer.left - eps &&\n  inner.top >= outer.top - eps &&\n  rightOf(inner) <= rightOf(outer) + eps &&\n  bottomOf(inner) <= bottomOf(outer) + eps;\n\nconst viewOf = (\n  doc: Doc,\n  outlines?: CaseOutlines,\n  decorations?: DecorationBindings,\n): BoxView => ({\n  byId: new Map(doc.nodes.map(node => [node.id, node])),\n  abs: absBoxMap(doc),\n  outlines,\n  decorations,\n});\n\n/** Crop frames are masks, not snug groups. Refitting them changes the image crop. */\nfunction groupsToRefit(doc: Doc) {\n  const fitted = groupsFittingChildren(doc);\n  for (const node of doc.nodes)\n    if (node.data.nodeType === 'FrameLayoutItem') fitted.delete(node.id);\n  return fitted;\n}\n\n/** Optional decoration restoration must not alter a crop or undo its accepted move. */\nfunction cropFramesUnchanged(before: Doc, after: Doc): boolean {\n  const oldNodes = new Map(before.nodes.map(node => [node.id, node]));\n  const newNodes = new Map(after.nodes.map(node => [node.id, node]));\n  const oldBoxes = absBoxMap(before);\n  const newBoxes = absBoxMap(after);\n  const checked = new Set<string>();\n  const unchanged = (id: string): boolean => {\n    if (checked.has(id)) return true;\n    checked.add(id);\n    const node = oldNodes.get(id);\n    const next = newNodes.get(id);\n    return (\n      !!node &&\n      !!next &&\n      JSON.stringify(node.data.props) === JSON.stringify(next.data.props) &&\n      (node.childNodeIds ?? []).every(unchanged)\n    );\n  };\n  return before.nodes.every(\n    node =>\n      node.data.nodeType !== 'FrameLayoutItem' ||\n      (unchanged(node.id) &&\n        JSON.stringify(oldBoxes.get(node.id)) ===\n          JSON.stringify(newBoxes.get(node.id))),\n  );\n}\n\nfunction measure(doc: Doc, ctx: Context): LayoutMetrics {\n  return computeLayoutMetrics(\n    doc,\n    ctx.ruler(doc),\n    ctx.base,\n    ctx.baseTight,\n    ctx.outlines,\n    ctx.containers,\n  );\n}\n\n/**\n * 넘침·겹침·잘림·글상자 이탈·구분선 침범·선 연결 끊김 — 폰트는 뺀다(축소가 일부러 내려 보내는\n * 값이다). 구분선 둘은 c4 회차 실측에서 넣었다 — 글을 비키거나 장식을 다시 붙이다가 구분선 너머로\n * 넘어간 장이 3,114장 중 15장 새로 생겼다.\n */\nconst fitOf = (m: LayoutMetrics): number[] => [\n  m.newOverlapPairs,\n  m.newOverlapArea,\n  m.overflowNodes,\n  m.overflowArea,\n  m.clippedNodes,\n  m.clippedArea,\n  m.frameSpillNodes,\n  m.frameSpillArea,\n  m.separatorViolations ?? 0,\n  m.brokenLineConnections ?? 0,\n];\n/** 개수 칸은 0, 면적 칸은 1px² 까지 같은 값으로 본다. */\nconst FIT_TOLERANCE = [0, 1, 0, 1, 0, 1, 0, 1, 0, 0];\n\nexport function simpleMetricsNoWorse(\n  next: LayoutMetrics,\n  previous: LayoutMetrics,\n): boolean {\n  const a = fitOf(next);\n  const b = fitOf(previous);\n  // 정렬선은 바닥(`EXCESSIVE_GUIDE_KEPT`) 밑으로 떨어뜨리지만 않으면 된다 — 글을 비키는 일은\n  // 정렬쌍 몇 개를 내주기 마련이지만, 바닥을 깨면 판정이 그것만으로 FAIL 이다.\n  const guideBroken =\n    previous.guideKeptRatio >= EXCESSIVE_GUIDE_KEPT &&\n    next.guideKeptRatio < EXCESSIVE_GUIDE_KEPT;\n  return (\n    !guideBroken &&\n    next.overlaps.every(\n      pair =>\n        pair.area <=\n        (previous.overlaps.find(p => p.a === pair.a && p.b === pair.b)?.area ??\n          0) +\n          1,\n    ) &&\n    a.every((value, i) => value <= (b[i] as number) + FIT_TOLERANCE[i]!)\n  );\n}\n\nfunction improves(next: LayoutMetrics, previous: LayoutMetrics): boolean {\n  const a = fitOf(next);\n  const b = fitOf(previous);\n  return (\n    simpleMetricsNoWorse(next, previous) &&\n    a.some((value, i) => value < (b[i] as number) - FIT_TOLERANCE[i]!)\n  );\n}\n\n/** 이 글의 합성 판정 박스(문서 좌표). 못 재면 `null`. */\nfunction inkOf(doc: Doc, view: BoxView, ctx: Context, id: string) {\n  const frame = view.abs.get(id);\n  if (!frame) return null;\n  return judgeBoxOf(id, frame, ctx.ruler(doc)) ?? null;\n}\n\nfunction fontOf(node: Node | undefined): number {\n  if (!node) return 0;\n  return Math.max(...textBlocksOf(node).map(b => b.fontSize), 0);\n}\n\n/** 이 글이 놓일 수 있는 영역 — 컨테이너의 장식 몫을 뺀 영역, 컨테이너가 없으면 페이지. */\nfunction regionOf(\n  doc: Doc,\n  view: BoxView,\n  ctx: Context,\n  textId: string,\n  ink: AbsBox,\n): AbsBox {\n  const page = pageBoxOf(doc);\n  const containerId = validContainerOf(ctx.containers.get(textId) ?? '');\n  const region = containerId\n    ? (fitRectIn(view, containerId, ink) ??\n      inscribedRectIn(view, containerId) ??\n      view.abs.get(containerId) ??\n      page)\n    : page;\n  return region;\n}\n\n/** 영역을 안쪽으로 `margin` 만큼 줄인다 — 글이 안 들어가면 그 축은 줄이지 않는다. */\nfunction insetFor(region: AbsBox, ink: AbsBox, margin: number): AbsBox {\n  const mx = region.width - ink.width >= 2 * margin ? margin : 0;\n  const my = region.height - ink.height >= 2 * margin ? margin : 0;\n  return {\n    left: region.left + mx,\n    top: region.top + my,\n    width: region.width - 2 * mx,\n    height: region.height - 2 * my,\n  };\n}\n\n/** 같은 크기로 들어가면 가장 짧은 이동을, 아니면 `null`. */\nfunction translationInto(\n  ink: AbsBox,\n  region: AbsBox,\n): { dx: number; dy: number } | null {\n  if (\n    ink.width > region.width + MOVE_EPS ||\n    ink.height > region.height + MOVE_EPS\n  )\n    return null;\n  const dx =\n    ink.left < region.left\n      ? region.left - ink.left\n      : rightOf(ink) > rightOf(region)\n        ? rightOf(region) - rightOf(ink)\n        : 0;\n  const dy =\n    ink.top < region.top\n      ? region.top - ink.top\n      : bottomOf(ink) > bottomOf(region)\n        ? bottomOf(region) - bottomOf(ink)\n        : 0;\n  return { dx, dy };\n}\n\n/** 이 컨테이너와 함께 움직이거나 컨테이너 안에 원래 있던 것 — 키울 때 이웃으로 안 센다. */\nfunction ownedBy(\n  doc: Doc,\n  view: BoxView,\n  ctx: Context,\n  containerId: string,\n): Set<string> {\n  const owned = new Set<string>([containerId]);\n  const walk = (id: string) => {\n    for (const child of view.byId.get(id)?.childNodeIds ?? []) {\n      owned.add(child);\n      walk(child);\n    }\n  };\n  walk(containerId);\n  for (const [textId, owner] of ctx.containers)\n    if (owner === containerId) owned.add(textId);\n  for (const [childId, parent] of ctx.containerParents) {\n    if (parent === containerId) owned.add(childId);\n    if (childId === containerId) owned.add(parent);\n  }\n  for (const [decoId, deco] of ctx.decorations)\n    if (owned.has(deco.ownerId)) owned.add(decoId);\n  const box = view.abs.get(containerId);\n  if (box) {\n    for (const node of doc.nodes) {\n      const other = view.abs.get(node.id);\n      if (other && contains(box, other)) owned.add(node.id);\n      // 컨테이너를 품은 판(부모 카드·배경)도 이웃이 아니다.\n      if (other && contains(other, box)) owned.add(node.id);\n    }\n  }\n  return owned;\n}\n\n/**\n * 컨테이너를 `wanted` 쪽으로 키운다 — 옛 상자를 언제나 포함한다. 페이지(장식이 내민 몫을 뺀 것)와\n * 이웃 앞에서 멈춘다. 키웠으면 `true`.\n */\nfunction growContainer(\n  doc: Doc,\n  view: BoxView,\n  ctx: Context,\n  containerId: string,\n  wanted: AbsBox,\n): boolean {\n  const container = view.byId.get(containerId);\n  const box = view.abs.get(containerId);\n  if (!container || !box || !ctx.safety.growable.has(containerId)) return false;\n  const target = unionBox(box, wanted);\n\n  // 장식이 바깥으로 내민 몫만큼 페이지에서 떼어 놓는다. 이미 넘은 변은 그 자리에 둔다.\n  const bounds = boundsMinusOverhang(\n    simpleSpacingBounds(\n      containerId,\n      authoredBoxMap(doc),\n      ctx.safety.spacing,\n      pageBoxOf(doc),\n    ),\n    decorationOverhangOf(containerId, box, view),\n  );\n  let left = Math.min(box.left, Math.max(target.left, bounds.left));\n  let top = Math.min(box.top, Math.max(target.top, bounds.top));\n  let right = Math.max(\n    rightOf(box),\n    Math.min(rightOf(target), rightOf(bounds)),\n  );\n  let bottom = Math.max(\n    bottomOf(box),\n    Math.min(bottomOf(target), bottomOf(bounds)),\n  );\n\n  // 이웃 앞에서 멈춘다 — 이미 겹쳐 있던 것은 원래 있던 겹침이라 한계로 안 센다.\n  const owned = ownedBy(doc, view, ctx, containerId);\n  for (const n of neighborsOf(doc, view.abs, owned)) {\n    const nb = n.box;\n    const overlapsNow =\n      Math.min(rightOf(nb), rightOf(box)) > Math.max(nb.left, box.left) &&\n      Math.min(bottomOf(nb), bottomOf(box)) > Math.max(nb.top, box.top);\n    if (overlapsNow) continue;\n    const spansY = Math.min(bottomOf(nb), bottom) > Math.max(nb.top, top);\n    const spansX = Math.min(rightOf(nb), right) > Math.max(nb.left, left);\n    if (spansY && nb.left >= rightOf(box))\n      right = Math.max(rightOf(box), Math.min(right, nb.left - NEIGHBOR_GAP));\n    if (spansY && rightOf(nb) <= box.left)\n      left = Math.min(box.left, Math.max(left, rightOf(nb) + NEIGHBOR_GAP));\n    if (spansX && nb.top >= bottomOf(box))\n      bottom = Math.max(bottomOf(box), Math.min(bottom, nb.top - NEIGHBOR_GAP));\n    if (spansX && bottomOf(nb) <= box.top)\n      top = Math.min(box.top, Math.max(top, bottomOf(nb) + NEIGHBOR_GAP));\n  }\n\n  // 도형이 허락하지 않는 축은 키우지 않는다(편집기에서 못 다루는 문서가 된다).\n  if (!canWidenByBox(container)) {\n    left = box.left;\n    right = rightOf(box);\n  }\n  const heightLimit = maxStretchHeight(container, right - left);\n  if (Number.isFinite(heightLimit) && bottom - top > heightLimit) {\n    const height = Math.max(box.height, heightLimit);\n    // 위 변을 먼저 지킨다 — 키운 몫은 아래에서 깎는다.\n    top = Math.min(box.top, Math.max(top, bottomOf(box) - height));\n    bottom = Math.max(bottomOf(box), top + height);\n  }\n  if (\n    right - left <= box.width + MOVE_EPS &&\n    bottom - top <= box.height + MOVE_EPS\n  )\n    return false;\n  resizeNode(\n    container,\n    { left, top, width: right - left, height: bottom - top },\n    view,\n  );\n  return true;\n}\n\n/**\n * 넘친 글을 담을 컨테이너 목표 — 글 상자에 여백을 두르고, 도형의 안쪽 인셋을 더한 bbox.\n * 원안 자식 슬롯 전체의 padding과 실루엣·장식 인셋을 각각 만족시키는 목표다.\n */\nfunction wantedContainerBox(\n  view: BoxView,\n  ctx: Context,\n  textId: string,\n  containerId: string,\n  ink: AbsBox,\n): AbsBox | null {\n  const container = view.byId.get(containerId);\n  const box = view.abs.get(containerId);\n  if (!container || !box || !ctx.safety.growableTexts.has(textId)) return null;\n  const authored = simplePaddingOf(ctx.safety.spacing, textId, containerId);\n  const inset = decorationInsetOf(containerId, box, view);\n  const safety = fontOf(view.byId.get(textId)) * SAFETY_EM;\n  const pad = (side: keyof typeof inset) => Math.max(inset[side], safety);\n  const needed: AbsBox = {\n    left: ink.left - pad('left'),\n    top: ink.top - pad('top'),\n    width: ink.width + pad('left') + pad('right'),\n    height: ink.height + pad('top') + pad('bottom'),\n  };\n  const inner = inscribedRectIn(view, containerId) ?? box;\n  const silhouetteTarget = boxForInnerRect(\n    container,\n    box,\n    unionBox(inner, needed),\n    view.outlines,\n  );\n  // Authored padding is relative to the container's physical box. Do not add the\n  // shape inset twice: independently satisfy silhouette clearance and slot padding.\n  const slot = unionBox(view.abs.get(textId) ?? ink, ink);\n  return unionBox(silhouetteTarget, {\n    left: slot.left - authored.left,\n    top: slot.top - authored.top,\n    width: slot.width + authored.left + authored.right,\n    height: slot.height + authored.top + authored.bottom,\n  });\n}\n\n/** 한 번 고쳐 보고 게이트를 넘으면 받는다. */\nfunction attempt(\n  doc: Doc,\n  current: LayoutMetrics,\n  ctx: Context,\n  edit: (draft: Doc, view: BoxView) => boolean,\n  rigidIds: ReadonlySet<string> = new Set(),\n): { doc: Doc; metrics: LayoutMetrics } | null {\n  const draft = structuredClone(doc) as Doc;\n  const fitted = groupsToRefit(draft);\n  for (const id of rigidIds) fitted.delete(id);\n  const view = viewOf(draft, ctx.outlines, ctx.decorations);\n  if (!edit(draft, view)) return null;\n  followTextMoves(doc, view, ctx.safety);\n  refitGroupBoxes(draft, fitted);\n  const metrics = measure(draft, ctx);\n  if (\n    !preservesSimpleIntent(draft, ctx.safety, ctx.ruler(draft), doc) ||\n    !improves(metrics, current)\n  ) {\n    ctx.report.rejected++;\n    return null;\n  }\n  return { doc: draft, metrics };\n}\n\n/** 넘친 글 하나 — 옮겨 담기 → 컨테이너 키우기(+ 키운 컨테이너 안으로 옮기기). */\nfunction fixOverflow(\n  doc: Doc,\n  current: LayoutMetrics,\n  ctx: Context,\n  textId: string,\n  containerId: string,\n) {\n  if (ctx.safety.badges.has(textId) || ctx.safety.immovable.has(textId))\n    return null;\n  const moved = attempt(doc, current, ctx, (draft, view) => {\n    const ink = inkOf(draft, view, ctx, textId);\n    const text = view.byId.get(textId);\n    if (!ink || !text) return false;\n    const margin = fontOf(text) * SAFETY_EM;\n    const region = regionOf(draft, view, ctx, textId, ink);\n    const shift = translationInto(ink, insetFor(region, ink, margin));\n    if (!shift || Math.hypot(shift.dx, shift.dy) < MOVE_EPS) return false;\n    translateNode(text, shift.dx, shift.dy, view);\n    return true;\n  });\n  if (moved) {\n    ctx.report.moved++;\n    return moved;\n  }\n  const grown = attempt(doc, current, ctx, (draft, view) => {\n    const ink = inkOf(draft, view, ctx, textId);\n    const text = view.byId.get(textId);\n    if (!ink || !text) return false;\n    const wanted = wantedContainerBox(view, ctx, textId, containerId, ink);\n    if (!wanted || !growContainer(draft, view, ctx, containerId, wanted))\n      return false;\n    // 키운 컨테이너 안에서 아직 삐져나온 몫은 글을 옮겨 담는다.\n    const shift = translationInto(\n      ink,\n      insetFor(\n        regionOf(draft, view, ctx, textId, ink),\n        ink,\n        fontOf(text) * SAFETY_EM,\n      ),\n    );\n    if (shift && Math.hypot(shift.dx, shift.dy) >= MOVE_EPS)\n      translateNode(text, shift.dx, shift.dy, view);\n    return true;\n  });\n  if (grown) ctx.report.grown++;\n  return grown;\n}\n\n/**\n * 새로 겹친 쌍 하나 — 글을 장애물에서 비킨다. 네 방향 중 짧은 쪽부터 해 보고, 컨테이너 안에\n * 안 들어가면 그 방향으로 컨테이너를 키운다. 아래로 비킬 때는 같은 컨테이너에서 그 아래에 있던 글도\n * 함께 내린다(다시 쌓기).\n */\nfunction fixOverlap(\n  doc: Doc,\n  current: LayoutMetrics,\n  ctx: Context,\n  moverId: string,\n  obstacleId: string,\n) {\n  if (ctx.safety.immovable.has(moverId)) {\n    const view = viewOf(doc, ctx.outlines, ctx.decorations);\n    const ink = inkOf(doc, view, ctx, moverId);\n    if (!ink) return null;\n    const protectedIds = new Set([\n      ...ctx.authoredGraphics,\n      ...ctx.containers.values(),\n      ...ctx.containerParents.values(),\n      ...ctx.containerParents.keys(),\n      ...ctx.safety.supports.values(),\n    ]);\n    const moves = graphicAvoidanceMoves(\n      doc,\n      obstacleId,\n      ink,\n      fontOf(view.byId.get(moverId)),\n      {\n        ...ctx,\n        tight: ctx.ruler(doc),\n        protectedIds,\n      },\n    );\n    for (const move of moves) {\n      const result = attempt(\n        doc,\n        current,\n        ctx,\n        (_draft, nextView) => {\n          for (const id of move.roots)\n            translateNode(nextView.byId.get(id)!, move.dx, move.dy, nextView);\n          return true;\n        },\n        move.members,\n      );\n      if (\n        result &&\n        !result.metrics.overlaps.some(\n          p =>\n            ((p.a === moverId && move.members.has(p.b)) ||\n              (p.b === moverId && move.members.has(p.a))) &&\n            p.area > p.baseArea + 1,\n        )\n      ) {\n        ctx.report.moved++;\n        return result;\n      }\n    }\n    return null;\n  }\n  if (ctx.safety.badges.has(moverId)) return null;\n  if (ctx.safety.supports.get(moverId) === obstacleId) return null;\n  const view0 = viewOf(doc, ctx.outlines, ctx.decorations);\n  const ink = inkOf(doc, view0, ctx, moverId);\n  const obstacle =\n    inkOf(doc, view0, ctx, obstacleId) ?? view0.abs.get(obstacleId) ?? null;\n  if (!ink || !obstacle) return null;\n  const gap =\n    fontOf(view0.byId.get(moverId)) * Math.max(AVOID_GAP_EM, SAFETY_EM);\n  const obstacleNode = view0.byId.get(obstacleId);\n  if (!obstacleNode) return null;\n  const moves = obstacleAvoidanceMoves(\n    obstacleNode,\n    obstacle,\n    ink,\n    gap,\n    ctx.outlines,\n  );\n  const containerId = validContainerOf(ctx.containers.get(moverId) ?? '');\n  const baseAbs = absBoxMap(ctx.base);\n  const moverBaseTop = baseAbs.get(moverId)?.top ?? ink.top;\n\n  for (const move of moves) {\n    for (const allowGrow of [false, true]) {\n      if (allowGrow && !containerId) continue;\n      const result = attempt(doc, current, ctx, (draft, view) => {\n        if (!view.byId.get(moverId)) return false;\n        // 같은 컨테이너에서 이 글 아래에 있던 글 — 아래로 비킬 때 함께 내린다.\n        const followers =\n          move.dy > 0 && containerId\n            ? [...ctx.containers]\n                .filter(\n                  ([id, owner]) =>\n                    owner === containerId &&\n                    id !== moverId &&\n                    id !== obstacleId &&\n                    (baseAbs.get(id)?.top ?? -Infinity) > moverBaseTop,\n                )\n                .map(([id]) => id)\n            : [];\n        const group = [moverId, ...followers];\n        if (\n          group.some(\n            id => ctx.safety.badges.has(id) || ctx.safety.immovable.has(id),\n          )\n        )\n          return false;\n        const inks = group\n          .map(id => inkOf(draft, view, ctx, id))\n          .filter((b): b is AbsBox => b !== null);\n        if (inks.length === 0) return false;\n        const span = inks\n          .map(b => ({ ...b, left: b.left + move.dx, top: b.top + move.dy }))\n          .reduce(unionBox);\n        if (allowGrow && containerId) {\n          const wanted = wantedContainerBox(\n            view,\n            ctx,\n            moverId,\n            containerId,\n            span,\n          );\n          if (!wanted || !growContainer(draft, view, ctx, containerId, wanted))\n            return false;\n        }\n        const region = regionOf(draft, view, ctx, moverId, span);\n        const margin = fontOf(view.byId.get(moverId)) * SAFETY_EM;\n        if (!contains(insetFor(region, span, margin), span, 1)) return false;\n        for (const id of group) {\n          const node = view.byId.get(id);\n          if (node) translateNode(node, move.dx, move.dy, view);\n        }\n        return true;\n      });\n      if (result) {\n        ctx.report.moved++;\n        if (allowGrow) ctx.report.grown++;\n        return result;\n      }\n    }\n  }\n  return null;\n}\n\n/** 페이지 밖으로 나간 글 하나 — 컨테이너 있는 글만 페이지와의 교집합 안으로 옮긴다. */\nfunction fixClipped(\n  doc: Doc,\n  current: LayoutMetrics,\n  ctx: Context,\n  textId: string,\n) {\n  if (ctx.safety.badges.has(textId) || ctx.safety.immovable.has(textId))\n    return null;\n  const result = attempt(doc, current, ctx, (draft, view) => {\n    const ink = inkOf(draft, view, ctx, textId);\n    const text = view.byId.get(textId);\n    if (!ink || !text) return false;\n    const page = pageBoxOf(draft);\n    const region = regionOf(draft, view, ctx, textId, ink);\n    const left = Math.max(page.left, region.left);\n    const top = Math.max(page.top, region.top);\n    const inside = {\n      left,\n      top,\n      width: Math.min(rightOf(page), rightOf(region)) - left,\n      height: Math.min(bottomOf(page), bottomOf(region)) - top,\n    };\n    const shift = translationInto(ink, inside);\n    if (!shift || Math.hypot(shift.dx, shift.dy) < MOVE_EPS) return false;\n    translateNode(text, shift.dx, shift.dy, view);\n    return true;\n  });\n  if (result) ctx.report.moved++;\n  return result;\n}\n\n/** 겹친 쌍에서 비킬 쪽 — 글과 비글이면 글, 글 둘이면 원안에서 아래(같으면 오른쪽)에 있던 글. */\nfunction moverOf(\n  baseAbs: Map<string, AbsBox>,\n  isText: Set<string>,\n  a: string,\n  b: string,\n): { mover: string; obstacle: string } | null {\n  if (isText.has(a) && !isText.has(b)) return { mover: a, obstacle: b };\n  if (isText.has(b) && !isText.has(a)) return { mover: b, obstacle: a };\n  if (!isText.has(a)) return null;\n  const ba = baseAbs.get(a);\n  const bb = baseAbs.get(b);\n  const later =\n    ba && bb && (bb.top > ba.top || (bb.top === ba.top && bb.left > ba.left));\n  return later ? { mover: b, obstacle: a } : { mover: a, obstacle: b };\n}\n\nconst isNewOverlap = (pair: LayoutMetrics['overlaps'][number]) =>\n  pair.area - pair.baseArea > (pair.minArea ?? OVERLAP_MIN_AREA);\n\n/**\n * 새 겹침 쌍의 깊이를 글자 크기로 나눈 값 — 두 판정 박스가 겹친 폭·높이 중 짧은 쪽.\n * 글이 아닌 쪽은 노드 상자로 잰다.\n */\nfunction overlapDepthsEm(doc: Doc, metrics: LayoutMetrics, ctx: Context) {\n  const abs = absBoxMap(doc);\n  const tight = ctx.ruler(doc);\n  const fontById = new Map(metrics.nodes.map(n => [n.nodeId, n.fontSize]));\n  const boxOf = (id: string) => {\n    const frame = abs.get(id);\n    return frame ? (judgeBoxOf(id, frame, tight) ?? frame) : null;\n  };\n  const out = new Map<LayoutMetrics['overlaps'][number], number>();\n  for (const pair of metrics.overlaps) {\n    if (!isNewOverlap(pair)) continue;\n    const a = boxOf(pair.a);\n    const b = boxOf(pair.b);\n    const font = Math.max(fontById.get(pair.a) ?? 0, fontById.get(pair.b) ?? 0);\n    if (!a || !b || !(font > 0)) continue;\n    const depth = Math.min(\n      Math.min(rightOf(a), rightOf(b)) - Math.max(a.left, b.left),\n      Math.min(bottomOf(a), bottomOf(b)) - Math.max(a.top, b.top),\n    );\n    out.set(pair, depth / font);\n  }\n  return out;\n}\n\n/** 원안에서 이미 그만큼 잘려 있던 글은 디자인이다 — 더 나간 것만 결함이다. */\nconst isNewClip = (clip: LayoutMetrics['clipped'][number], ctx: Context) =>\n  clip.isText && clip.area > (ctx.baseClipped.get(clip.nodeId) ?? 0) + 1;\n\n/** 기하만으로 한 바퀴 — 넘침, 겹침, 잘림 순. 받은 고치기가 없으면 그대로 돌려준다. */\nfunction geometryPass(\n  doc: Doc,\n  metrics: LayoutMetrics,\n  ctx: Context,\n): { doc: Doc; metrics: LayoutMetrics; changed: boolean } {\n  let current = { doc, metrics };\n  let changed = false;\n  const accept = (next: { doc: Doc; metrics: LayoutMetrics } | null) => {\n    if (!next) return;\n    current = next;\n    changed = true;\n  };\n  const isText = new Set(\n    doc.nodes.filter(n => n.data.nodeType === 'TextItem').map(n => n.id),\n  );\n  const baseAbs = absBoxMap(ctx.base);\n\n  for (const node of metrics.nodes) {\n    if (!node.judged || !(node.overflow.area > OVERFLOW_EPS)) continue;\n    const containerId = validContainerOf(node.containerId);\n    if (!containerId) continue;\n    accept(\n      fixOverflow(current.doc, current.metrics, ctx, node.nodeId, containerId),\n    );\n  }\n  const depths = overlapDepthsEm(current.doc, current.metrics, ctx);\n  for (const [pair, depth] of depths) {\n    if (depth <= OVERLAP_DEPTH_EM && (pair.minArea ?? OVERLAP_MIN_AREA) > 1)\n      continue;\n    const roles = moverOf(baseAbs, isText, pair.a, pair.b);\n    if (!roles) continue;\n    accept(\n      fixOverlap(\n        current.doc,\n        current.metrics,\n        ctx,\n        roles.mover,\n        roles.obstacle,\n      ),\n    );\n  }\n  for (const clip of current.metrics.clipped) {\n    if (!isNewClip(clip, ctx)) continue;\n    accept(fixClipped(current.doc, current.metrics, ctx, clip.nodeId));\n  }\n  return { ...current, changed };\n}\n\nfunction scaleTree(tree: TextTree, scale: number): void {\n  if (typeof tree.style?.fontSize === 'number' && tree.style.fontSize > 0)\n    tree.style.fontSize *= scale;\n  for (const child of tree.children ?? []) scaleTree(child, scale);\n}\n\n/**\n * 축소할 글 — 글자 크기의 `SHRINK_DEPTH_EM` 보다 깊이 넘친 글, 그만큼 깊이 새로 겹친 쌍의\n * 글, 원안보다 더 잘린 글.\n */\nfunction shrinkTargets(doc: Doc, metrics: LayoutMetrics, ctx: Context) {\n  const out = new Set<string>();\n  for (const node of metrics.nodes) {\n    if (!node.judged || !(node.overflow.area > OVERFLOW_EPS)) continue;\n    const o = node.overflow;\n    if (\n      Math.max(o.left, o.right, o.top, o.bottom) >\n      node.fontSize * SHRINK_DEPTH_EM\n    )\n      out.add(node.nodeId);\n  }\n  for (const [pair, depth] of overlapDepthsEm(doc, metrics, ctx)) {\n    if (depth <= SHRINK_DEPTH_EM) continue;\n    out.add(pair.a);\n    out.add(pair.b);\n  }\n  for (const clip of metrics.clipped)\n    if (isNewClip(clip, ctx)) out.add(clip.nodeId);\n  return out;\n}\n\n/**\n * 결함이 남은 글과 그 반복 역할을 같은 배율로 5% 줄인다. 하한은 원안 대비 `EXCESSIVE_FONT_SCALE` 과 페이지 높이의\n * `PAGE_MIN_FONT_RATIO` 중 큰 쪽이다. 높이는 다시 흘려 잡고, 자라는 기준 변을 지킨다.\n */\nfunction shrinkStep(doc: Doc, targets: Set<string>, ctx: Context) {\n  const draft = structuredClone(doc) as Doc;\n  const fitted = groupsToRefit(draft);\n  const view = viewOf(draft, ctx.outlines, ctx.decorations);\n  const baseById = new Map(ctx.base.nodes.map(n => [n.id, n]));\n  const grouped = new Set(targets);\n  for (let round = 0; round < ctx.safety.roles.length; round++)\n    for (const role of ctx.safety.roles)\n      if (role.some(id => grouped.has(id)))\n        for (const id of role) grouped.add(id);\n  const scales = new Map<string, number>();\n  for (const id of grouped) {\n    const now = renderedFontRange(view.byId.get(id)).minimum;\n    const authored = renderedFontRange(baseById.get(id)).minimum;\n    if (\n      !now ||\n      !authored ||\n      ctx.safety.badges.has(id) ||\n      ctx.safety.immovable.has(id) ||\n      (ctx.requireContainer && !validContainerOf(ctx.containers.get(id) ?? ''))\n    ) {\n      scales.set(id, 1);\n      continue;\n    }\n    const floor = Math.max(\n      authored * EXCESSIVE_FONT_SCALE,\n      doc.height * PAGE_MIN_FONT_RATIO,\n    );\n    scales.set(id, Math.min(1, Math.max(floor / now, 1 - SHRINK_STEP)));\n  }\n  // A role has one relative reduction, including short peers that have no individual defect.\n  for (let round = 0; round < ctx.safety.roles.length; round++)\n    for (const role of ctx.safety.roles) {\n      if (!role.some(id => grouped.has(id))) continue;\n      const common = Math.max(...role.map(id => scales.get(id) ?? 1));\n      for (const id of role) scales.set(id, common);\n    }\n  let shrunk = 0;\n  for (const id of grouped) {\n    const node = view.byId.get(id);\n    const box = view.abs.get(id);\n    const tree = node?.data.props.text?.textTree;\n    if (!node || !box || !tree || node.data.nodeType !== 'TextItem') continue;\n    const scale = scales.get(id) ?? 1;\n    if (!(scale < 1 - 1e-3)) continue;\n    scaleTree(tree, scale);\n    const blocks = textBlocksOf(node);\n    // Font reduction cannot consume additional slot padding by growing a short frame.\n    const height = Math.min(\n      box.height,\n      boxHeightOf(blocks, flowAt(blocks, box.width).counts),\n    );\n    const anchor = growAnchorOf(tree);\n    const top = ctx.safety.immovable.has(id)\n      ? box.top\n      : anchor === 'bottom'\n        ? bottomOf(box) - height\n        : anchor === 'middle'\n          ? box.top + (box.height - height) / 2\n          : box.top;\n    resizeNode(node, { ...box, top, height }, view);\n    shrunk++;\n  }\n  if (shrunk > 0) {\n    followTextMoves(doc, view, ctx.safety);\n    refitGroupBoxes(draft, fitted);\n  }\n  return { doc: draft, shrunk };\n}\n\n/** Widen only the text frame of an authored numeric badge, preserving its alignment anchor. */\nfunction widenBadges(input: Doc, start: LayoutMetrics, ctx: Context) {\n  let current = { doc: structuredClone(input) as Doc, metrics: start };\n  for (const id of ctx.safety.badges) {\n    const draft = structuredClone(current.doc) as Doc;\n    const view = viewOf(draft, ctx.outlines, ctx.decorations);\n    const node = view.byId.get(id),\n      frame = view.abs.get(id);\n    if (!node || !frame) continue;\n    const blocks = textBlocksOf(node);\n    const sourceTight = ctx.baseTight[id];\n    const measuredWidth = sourceTight?.status === 'ok' ? sourceTight.width : 0;\n    const width = Math.max(\n      maxContentWidth(blocks) * 1.08,\n      measuredWidth + fontOf(node) * 0.25,\n    );\n    console.log(JSON.stringify({kind:'badge-width',id,frame,width}));\n    if (!(width > frame.width + MOVE_EPS)) continue;\n    const authored = ctx.base.nodes.find(n => n.id === id) ?? node;\n    const authoredAlign =\n      authored.data.props.text?.textTree?.style?.horizontalAlign;\n    const align =\n      authoredAlign === 'left' || authoredAlign === 'right'\n        ? authoredAlign\n        : 'center';\n    const left =\n      frame.left -\n      (align === 'center'\n        ? (width - frame.width) / 2\n        : align === 'right'\n          ? width - frame.width\n          : 0);\n    const height = boxHeightOf(blocks, flowAt(blocks, width).counts);\n    const anchor = growAnchorOf(node.data.props.text!.textTree!);\n    const top =\n      anchor === 'bottom'\n        ? bottomOf(frame) - height\n        : anchor === 'middle'\n          ? frame.top + (frame.height - height) / 2\n          : frame.top;\n    const wanted = { left, top, width, height };\n    const region = regionOf(draft, view, ctx, id, wanted);\n    console.log(JSON.stringify({kind:'badge-region',id,wanted,region,contains:contains(region,wanted)}));\n    // Diagnostic counterfactual only: retain all downstream safety checks.\n    // if (!contains(region, wanted)) continue;\n    const fitted = groupsFittingChildren(draft);\n    resizeNode(node, wanted, view);\n    // The original alignment, including paragraph overrides, is authoritative for badges.\n    const tree = node.data.props.text!.textTree!;\n    if (authoredAlign && tree.style) tree.style.horizontalAlign = align;\n    if (authoredAlign)\n      for (const paragraph of tree.children ?? [])\n        if (paragraph.style) paragraph.style.horizontalAlign = align;\n    followTextMoves(current.doc, view, ctx.safety);\n    refitGroupBoxes(draft, fitted);\n    const metrics = measure(draft, ctx);\n    console.log(JSON.stringify({kind:'badge-gates',id,intent:preservesSimpleIntent(draft,ctx.safety,ctx.ruler(draft),current.doc),metrics:simpleMetricsNoWorse(metrics,current.metrics)}));\n    if (\n      !preservesSimpleIntent(\n        draft,\n        ctx.safety,\n        ctx.ruler(draft),\n        current.doc,\n      ) ||\n      !simpleMetricsNoWorse(metrics, current.metrics)\n    )\n      continue;\n    current = { doc: draft, metrics };\n    ctx.report.widened++;\n  }\n  return current;\n}\n\n/** Expand inside the silhouette before trading away font size. Alignment anchors stay fixed. */\nfunction widenTextFrames(doc: Doc, metrics: LayoutMetrics, ctx: Context) {\n  let current = { doc, metrics };\n  for (const metric of metrics.nodes) {\n    const id = metric.nodeId;\n    if (\n      ctx.safety.badges.has(id) ||\n      ctx.safety.immovable.has(id) ||\n      !(metric.overflow.area > OVERFLOW_EPS || metric.frameSpill > 2)\n    )\n      continue;\n    const container = validContainerOf(ctx.containers.get(id) ?? '');\n    if (!container) continue;\n    const result = attempt(current.doc, current.metrics, ctx, (draft, view) => {\n      const node = view.byId.get(id),\n        frame = view.abs.get(id);\n      if (!node || !frame || !node.data.props.text?.textTree) return false;\n      // This step never falls back to the shape's rectangular bbox.\n      const silhouette = inscribedRectIn(view, container);\n      if (!silhouette) return false;\n      const region = simpleSpacingBounds(\n        id,\n        authoredBoxMap(draft),\n        ctx.safety.spacing,\n        silhouette,\n      );\n      const align =\n        node.data.props.text.textTree.style?.horizontalAlign ?? 'center';\n      const width =\n        align === 'center'\n          ? 2 *\n            Math.min(\n              frame.left + frame.width / 2 - region.left,\n              rightOf(region) - frame.left - frame.width / 2,\n            )\n          : align === 'right'\n            ? rightOf(frame) - region.left\n            : rightOf(region) - frame.left;\n      if (!(width > frame.width + MOVE_EPS)) return false;\n      const left =\n        align === 'center'\n          ? frame.left - (width - frame.width) / 2\n          : align === 'right'\n            ? rightOf(frame) - width\n            : frame.left;\n      const blocks = textBlocksOf(node);\n      const predictedHeight = boxHeightOf(blocks, flowAt(blocks, width).counts);\n      const anchor = growAnchorOf(node.data.props.text.textTree);\n      const availableHeight =\n        anchor === 'bottom'\n          ? bottomOf(frame) - region.top\n          : anchor === 'middle'\n            ? 2 *\n              Math.min(\n                frame.top + frame.height / 2 - region.top,\n                bottomOf(region) - frame.top - frame.height / 2,\n              )\n            : bottomOf(region) - frame.top;\n      // Width may reduce glyph overflow even when all lines cannot fit yet. Keep\n      // the slot within authored padding and leave the residual glyphs to shrink.\n      const height = Math.min(\n        predictedHeight,\n        Math.max(frame.height, availableHeight),\n      );\n      const top =\n        anchor === 'bottom'\n          ? bottomOf(frame) - height\n          : anchor === 'middle'\n            ? frame.top + (frame.height - height) / 2\n            : frame.top;\n      // Width can improve an existing vertical spill before the shrink phase resolves it.\n      // The actual glyph gate below still rejects every new or deeper defect.\n      const wanted = { left, top, width, height };\n      const allowed = fitRectIn(view, container, wanted);\n      if (\n        !allowed ||\n        left < allowed.left - MOVE_EPS ||\n        left + width > rightOf(allowed) + MOVE_EPS\n      )\n        return false;\n      resizeNode(node, wanted, view);\n      return true;\n    });\n    if (result) {\n      current = result;\n      ctx.report.widened++;\n    }\n  }\n  return current;\n}\n\nfunction settle(doc: Doc, metrics: LayoutMetrics, ctx: Context) {\n  let current = { doc, metrics };\n  for (let pass = 0; pass < MAX_PASSES; pass++) {\n    ctx.report.passes++;\n    const next = geometryPass(current.doc, current.metrics, ctx);\n    current = { doc: next.doc, metrics: next.metrics };\n    if (!next.changed) break;\n  }\n  return current;\n}\n\n/** 컨테이너(글을 담은 도형과 그 부모 판)가 옛 상자를 포함한 채 남았나 — 이 후보의 불변식이다. */\nexport function containersStayPut(\n  before: Doc,\n  after: Doc,\n  containers: TextContainerAssignments,\n  containerParents: ContainerParentAssignments,\n  decorations: DecorationBindings,\n): boolean {\n  const ids = new Set<string>();\n  for (const id of [...containers.values(), ...containerParents.values()]) {\n    const valid = validContainerOf(id);\n    if (valid && !decorations.has(valid)) ids.add(valid);\n  }\n  const was = absBoxMap(before);\n  const now = absBoxMap(after);\n  for (const id of ids) {\n    const a = was.get(id);\n    const b = now.get(id);\n    if (a && b && !contains(b, a)) return false;\n  }\n  return true;\n}\n\n/**\n * 간소 재배치 본체 — 문서와 리포트를 함께 돌려준다. `(input, run)` 의 순수 함수다.\n *\n * `run.base` 는 좌표계를 맞춘 원안이다. `run.baseTight` 가 있으면 합성 자가 노드별 리딩을\n * 배우고, `run.tight`(입력을 한 번 잰 값)가 있으면 그대로인 노드가 그 값을 물려받는다.\n */\nexport function runSimpleRelayout(\n  input: Doc,\n  run: SimpleRelayoutContext = {},\n): { doc: Doc; report: SimpleRelayoutReport } {\n  const report: SimpleRelayoutReport = {\n    passes: 0,\n    moved: 0,\n    grown: 0,\n    shrunk: 0,\n    widened: 0,\n    rejected: 0,\n    remaining: { overflowNodes: 0, newOverlapPairs: 0, clippedTextNodes: 0 },\n    revertedToInput: false,\n  };\n  const base = run.base ?? input;\n  const byRlsc = run.rlsc\n    ? buildRlscContainerAssignments(base, run.rlsc)\n    : null;\n  if (byRlsc) report.rlsc = byRlsc.report;\n  const rawContainers =\n    byRlsc?.containers ?? run.containers ?? buildTextContainerAssignments(base);\n  const ruler = createSyntheticRuler({\n    preserveFlowOverflow: true,\n    base,\n    baseTight: run.baseTight,\n    input,\n    inputTight: run.tight,\n  });\n  const baseTight = run.baseTight ?? ruler(base);\n  const { containers, supports } = authoredSupportAssignments(\n    base,\n    baseTight,\n    rawContainers,\n    run.outlines,\n  );\n  const containerParents = new Map(\n    buildContainerParentAssignments(base, containers),\n  );\n  // Keep supplied parent intent for unaffected owners; changed owners need fresh geometry.\n  const changedOwners = new Set<string>();\n  for (const [id, owner] of containers)\n    if (owner !== rawContainers.get(id)) {\n      changedOwners.add(owner);\n      const previous = rawContainers.get(id);\n      if (previous) changedOwners.add(previous);\n    }\n  for (const [id, parent] of byRlsc?.containerParents ??\n    run.containerParents ??\n    [])\n    if (!changedOwners.has(id)) containerParents.set(id, parent);\n  const decorations =\n    (byRlsc ? undefined : run.decorations) ??\n    classifyDecorations(base, containers);\n  const safety =\n    run.safety ??\n    freezeSimpleSafety(\n      input,\n      base,\n      baseTight,\n      containers,\n      supports,\n      decorations,\n      ruler(input),\n      run.outlines,\n      containerParents,\n    );\n  const baseMetrics = computeLayoutMetrics(\n    base,\n    baseTight,\n    undefined,\n    undefined,\n    run.outlines,\n    containers,\n  );\n  console.log(JSON.stringify({kind:'safety',phase:run.phase,badges:[...safety.badges],immovable:[...safety.immovable]}));\n  const ctx: Context = {\n    safety,\n    requireContainer: run.requireContainer,\n    base,\n    containers,\n    // An unconfirmed background is not an independent obstacle. Keep its authored\n    // association even when glyph support (e.g. rotation or a hollow shape) drops it.\n    // This protects movement only; it does not certify bbox-only containment.\n    authoredGraphics: new Set([\n      ...rawContainers.values(),\n      ...buildTextContainerAssignments(base).values(),\n    ]),\n    containerParents,\n    decorations,\n    outlines: run.outlines,\n    ruler,\n    baseTight,\n    baseClipped: new Map(baseMetrics.clipped.map(c => [c.nodeId, c.area])),\n    report,\n  };\n\n  const start = measure(input, ctx);\n  const badges =\n    run.phase === 'shrink'\n      ? { doc: input, metrics: start }\n      : widenBadges(input, start, ctx);\n  const widened =\n    run.phase === 'shrink'\n      ? badges\n      : widenTextFrames(badges.doc, badges.metrics, ctx);\n  let current =\n    run.phase === 'shrink'\n      ? widened\n      : settle(widened.doc, widened.metrics, ctx);\n\n  // 기하로 못 푼 깊은 결함이 남았을 때만 줄인다 — 한 칸 줄이고 다시 푼 판이 나아졌을 때만 받는다.\n  for (; run.phase !== 'expand';) {\n    const targets = shrinkTargets(current.doc, current.metrics, ctx);\n    for (const id of ctx.safety.badges) targets.delete(id);\n    for (const id of ctx.safety.immovable) targets.delete(id);\n    if (ctx.requireContainer)\n      for (const id of targets)\n        if (!validContainerOf(ctx.containers.get(id) ?? '')) targets.delete(id);\n    if (targets.size === 0) break;\n    const step = shrinkStep(current.doc, targets, ctx);\n    if (step.shrunk === 0) break;\n    const committedCounts = {\n      moved: report.moved,\n      grown: report.grown,\n      rejected: report.rejected,\n      passes: report.passes,\n    };\n    const settled = settle(step.doc, measure(step.doc, ctx), ctx);\n    if (\n      !preservesSimpleIntent(\n        settled.doc,\n        safety,\n        ruler(settled.doc),\n        current.doc,\n      ) ||\n      !improves(settled.metrics, current.metrics)\n    ) {\n      Object.assign(report, committedCounts);\n      break;\n    }\n    report.shrunk += step.shrunk;\n    current = settled;\n  }\n\n  // 채택한 고치기가 없으면 입력 그대로다 — 장식도 건드리지 않는다. 제품 렌더러는 상자를 넓히고\n  // 가운데로 옮기면서 장식을 이미 제자리로 옮겨 두는데, 원안 기준으로 다시 붙이면 구분선이 글 쪽으로\n  // 끌려오고 정렬이 흩어진다(c4 회차 실측: 고친 것 0 인 장 13장이 그렇게 판정을 잃었다).\n  if (report.moved + report.grown + report.shrunk + report.widened === 0) {\n    report.remaining = {\n      overflowNodes: start.overflowNodes,\n      newOverlapPairs: start.newOverlapPairs,\n      clippedTextNodes: start.clippedTextNodes,\n    };\n    return { doc: structuredClone(input) as Doc, report };\n  }\n\n  // 키운 변·옮긴 글에 장식을 다시 붙인다. 붙인 판이 나빠지거나 정렬선을 깎으면 붙이기 전 판을 쓴다.\n  let out = current.doc;\n  if (decorations.size > 0) {\n    const decorated = carryDecorations(input, out, decorations, {\n      base,\n      baseTight,\n      containers,\n      afterTight: ruler(out),\n      outlines: run.outlines,\n    });\n    const after = measure(decorated, ctx);\n    if (\n      cropFramesUnchanged(out, decorated) &&\n      preservesSimpleIntent(decorated, safety, ruler(decorated), current.doc) &&\n      simpleMetricsNoWorse(after, current.metrics) &&\n      after.guideKeptRatio >= current.metrics.guideKeptRatio - 1e-6\n    )\n      out = decorated;\n  }\n\n  const final = measure(out, ctx);\n  if (\n    !preservesSimpleIntent(out, safety, ruler(out)) ||\n    !containersStayPut(input, out, containers, containerParents, decorations) ||\n    !simpleMetricsNoWorse(final, start)\n  ) {\n    report.revertedToInput = true;\n    out = structuredClone(input) as Doc;\n  }\n  const last = report.revertedToInput ? start : final;\n  report.remaining = {\n    overflowNodes: last.overflowNodes,\n    newOverlapPairs: last.newOverlapPairs,\n    clippedTextNodes: last.clippedTextNodes,\n  };\n  return { doc: out, report };\n}\n\nexport const simpleRelayout: RelayoutMethod = {\n  key: SIMPLE_RELAYOUT_KEY,\n  label: 'Simple Relayout',\n  description:\n    '렌더 없이 — 넘친 컨테이너만 제자리에서 키우고, 겹치거나 페이지를 벗어난 글을 컨테이너 안에서 비킨 뒤, 남으면 글자를 줄인다',\n  run: (doc, ctx) => runSimpleRelayout(doc, ctx).doc,\n};\n",
      "simpleRelayout.ts": "/**\n * **간소 재배치** — 렌더 없이, 컨테이너를 옮기지 않고 대치가 남긴 결함만 고친다.\n *\n * Adaptive Relayout 은 후보를 고칠 때마다 렌더해서 다시 잰다. 프로덕션 썸네일에서는 그\n * 왕복이 너무 느리다. 이 후보는 렌더를 한 번도 안 하고 합성 판정 박스\n * (`../relayout-core/syntheticTight.ts`)로만 판단한다. 그 대신 손대는 범위를 좁힌다.\n *\n * | 결함 | 고치는 법 |\n * | --- | --- |\n * | 글이 컨테이너 밖으로 넘친다 | 컨테이너 안에서 옮겨 담기면 옮긴다. 안 되면 **컨테이너를 제자리에서 키운다** |\n * | 글이 장식·다른 글과 새로 겹친다 | 글을 컨테이너 안에서 비킨다. 모자라면 그쪽으로 컨테이너를 키운다 |\n * | 컨테이너 없는 글이 이미지·장식과 겹친다 | 글의 위치·크기·폰트를 고정하고 그래픽 묶음만 최소 이동한다 |\n * | 글이 페이지 밖으로 나간다 | 컨테이너가 있는 글만 컨테이너와 페이지의 교집합 안으로 옮긴다 |\n * | 위로 못 푼다 | 가독성 하한까지 5%씩 줄인다. 원안의 반복 역할은 함께 줄인다 |\n * | 짧은 숫자 배지가 줄바꿈됐다 | 도형·폰트·정렬 앵커를 지키며 글상자 폭만 연다 |\n *\n * ## 하지 않는 것\n *\n * - **컨테이너를 옮기지 않는다.** 키운 상자는 언제나 옛 상자를 포함한다. 그래서 카드끼리 새로\n *   겹친 것(유닛 사이 겹침)은 못 푼다 — 키우는 한계를 이웃 앞에서 멈춰 새로 만들지 않을 뿐이다.\n * - 컨테이너 없는 글은 입력의 x/y 를 고정한다. 컨테이너가 있어도 입력에서 max(24px, 3em), 최대 64px 까지만\n *   옮기며 원안의 읽는 순서를 뒤집지 않는다. 글에 붙은 장식은 같은 후보에서 따라오게 한다.\n * - 정렬선·컨테이너 크기 묶음·중앙 복원을 투영하지 않는다. 정렬선은 바닥만 지킨다(아래 게이트).\n * - 원안의 글을 거의 담지 않던 도형(밑줄 등)은 컨테이너라는 소속만으로 키우지 않는다.\n *\n * ## 장식\n *\n * 컨테이너 변에 붙은 장식은 두 가지로 반영한다. 안쪽으로 파고든 깊이는 쓸 수 있는 영역에서\n * 빼고(`fitRectIn`), 바깥으로 내민 몫만큼은 성장 상한을 페이지에서 떼어 놓는다\n * (`decorationOverhangOf`). 코너·중앙에 앉은 장식(카드 안 아이콘)은 영역에서 빠지지 않으므로,\n * 글이 그 위에 새로 겹치면 겹침으로 잡혀 글이 비킨다. 끝에서 `carryDecorations` 가 장식을 키운\n * 변과 옮긴 글에 다시 붙인다(글에 붙은 머리 아이콘은 글을 따라간다).\n *\n * ## 게이트\n *\n * 고치기 하나마다 같은 합성 자로 지표를 다시 잰다. 넘침·신규 겹침·잘림·글상자 이탈이 하나도\n * 나빠지지 않고 하나라도 나아졌을 때만 받는다. 정렬선은 판정 바닥(`EXCESSIVE_GUIDE_KEPT`)\n * 밑으로 떨어뜨리는 고치기만 거절한다. 원안의 지지 도형·이동 한도·읽는 순서·장식 동행도\n * 후보, 축소 후 정리, 최종 결과에서 모두 검사한다. 자가 예측이라 경계에 걸친 판정은 틀릴 수 있다.\n */\nimport type {\n  Doc,\n  Node,\n  TextTree,\n} from '@miri-unicorn/miricanvas-iui-color-mapper';\n\nimport type { AbsBox } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/packages/comp-sign/src/comp-match/docLayout';\nimport {\n  boundsMinusOverhang,\n  boxForInnerRect,\n  type CaseOutlines,\n  decorationInsetOf,\n  decorationOverhangOf,\n  fitRectIn,\n  inscribedRectIn,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/containerShape';\nimport { carryDecorations } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/decorations';\nimport {\n  type BoxView,\n  canWidenByBox,\n  groupsFittingChildren,\n  maxStretchHeight,\n  refitGroupBoxes,\n  resizeNode,\n  translateNode,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/geometry';\nimport {\n  absBoxMap,\n  buildContainerParentAssignments,\n  buildTextContainerAssignments,\n  classifyDecorations,\n  computeLayoutMetrics,\n  type ContainerParentAssignments,\n  type DecorationBindings,\n  judgeBoxOf,\n  type LayoutMetrics,\n  OVERLAP_MIN_AREA,\n  obstacleAvoidanceMoves,\n  type TextContainerAssignments,\n  type TightBoxMap,\n  validContainerOf,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/metrics';\nimport { neighborsOf } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/neighbors';\nimport { renderedFontRange } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/renderedFont';\nimport {\n  buildRlscContainerAssignments,\n  type RlscAssignmentReport,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/rlscAssignments';\nimport {\n  createSyntheticRuler,\n  type SyntheticRuler,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/syntheticTight';\nimport {\n  boxHeightOf,\n  flowAt,\n  growAnchorOf,\n  maxContentWidth,\n  pageBoxOf,\n  textBlocksOf,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/textOverflow';\nimport {\n  EXCESSIVE_FONT_SCALE,\n  EXCESSIVE_GUIDE_KEPT,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/verdict';\nimport { authoredBoxMap } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/authoredLayoutConstraints';\nimport { PAGE_MIN_FONT_RATIO } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/shrinkFontToReadableFloor';\nimport { graphicAvoidanceMoves } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/simpleRelayoutObstacles';\nimport {\n  authoredSupportAssignments,\n  followTextMoves,\n  freezeSimpleSafety,\n  preservesSimpleIntent,\n  type SimpleSafety,\n} from '/tmp/cb1447-diagnostic/simpleRelayoutSafety';\nimport { simplePaddingOf, simpleSpacingBounds } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/simpleRelayoutSpacing';\nimport type { RelayoutMethod, RelayoutRunContext } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/types';\n\nexport const SIMPLE_RELAYOUT_KEY = 'simple-relayout';\n\n/** 좌표 반올림 잡음. 이보다 작은 이동·확장은 하지 않는다. */\nconst MOVE_EPS = 0.5;\n/** 넘침 면적이 이보다 작으면 결함으로 안 본다(`actualOutlineFit` 과 같다). */\nconst OVERFLOW_EPS = 1;\n/** 비켜 설 때 장애물과 띄우는 간격 — 글자 크기에 대한 비율. */\nconst AVOID_GAP_EM = 0.25;\n/** 컨테이너를 키울 때 이웃 앞에 남길 간격(px). */\nconst NEIGHBOR_GAP = 4;\n/** 한 번에 줄이는 글자 크기 비율. */\nconst SHRINK_STEP = 0.05;\n/**\n * 글자를 줄일 만큼 확실한 결함의 깊이 — 글자 크기에 대한 비율. 합성 자의 변별 오차가\n * p90 7px 안팎(16px 글자의 0.45em)이라, 그보다 얕은 넘침·겹침은 자가 잘못 본 것일 수 있다.\n * 기하 보정(옮기기·키우기)은 얕은 것도 고치지만, 되돌릴 수 없는 축소는 깊은 것에만 건다.\n */\nconst SHRINK_DEPTH_EM = 0.5;\n/**\n * 옮기거나 키울 때 남기는 여유 — 글자 크기에 대한 비율. 합성 자는 아래 변을 p90 7px 안팎\n * 틀리는데, 여유 없이 「딱 맞게」 옮기면 실제로는 몇 px 넘친다(5613032: 겹침을 비키려고 내린\n * 글이 실제로 4.7px 넘쳤다).\n */\nconst SAFETY_EM = 0.3;\n/** 이보다 얕은 새 겹침은 자의 오차일 수 있어 건드리지 않는다 — 글자 크기에 대한 비율. */\nconst OVERLAP_DEPTH_EM = 0.15;\nconst MAX_PASSES = 6;\n\nexport type SimpleRelayoutReport = {\n  passes: number;\n  moved: number;\n  grown: number;\n  shrunk: number;\n  /** Short numeric badge frames restored to one line, without scaling their glyphs. */\n  widened: number;\n  /** 게이트가 거절한 고치기 수. */\n  rejected: number;\n  /** 끝에 남은 결함 — 합성 자로 잰 값이다. */\n  remaining: {\n    overflowNodes: number;\n    newOverlapPairs: number;\n    clippedTextNodes: number;\n  };\n  /** 결과가 입력보다 낫지 않아 입력을 돌려줬나. */\n  revertedToInput: boolean;\n  /** RLSC 로 컨테이너 소속을 정했으면 그 내역. */\n  rlsc?: RlscAssignmentReport;\n};\n\n/**\n * 간소 재배치의 입력. `rlsc` 가 있으면 기하 소속을 먼저 보존하고, 컨테이너를 못 찾은 글만\n * Background로 보완한다(`relayout-core/rlscAssignments.ts`). 장식은 이 소속 위에서 다시 분류한다.\n */\nexport type SimpleRelayoutContext = RelayoutRunContext & {\n  /** Checked callers validate expansion before attempting a shrink. */\n  phase?: 'expand' | 'shrink';\n  /** Keep cumulative movement/attachment constraints anchored to the first input. */\n  safety?: SimpleSafety;\n  /** Only expand/shrink text with a trusted container; fixed text may move a graphic obstacle. */\n  requireContainer?: boolean;\n};\n\ntype Context = {\n  safety: SimpleSafety;\n  requireContainer?: boolean;\n  base: Doc;\n  containers: TextContainerAssignments;\n  authoredGraphics: ReadonlySet<string>;\n  containerParents: ContainerParentAssignments;\n  decorations: DecorationBindings;\n  outlines?: CaseOutlines;\n  ruler: SyntheticRuler;\n  baseTight: TightBoxMap;\n  baseClipped: Map<string, number>;\n  report: SimpleRelayoutReport;\n};\n\nconst rightOf = (b: AbsBox) => b.left + b.width;\nconst bottomOf = (b: AbsBox) => b.top + b.height;\n\nconst unionBox = (a: AbsBox, b: AbsBox): AbsBox => {\n  const left = Math.min(a.left, b.left);\n  const top = Math.min(a.top, b.top);\n  return {\n    left,\n    top,\n    width: Math.max(rightOf(a), rightOf(b)) - left,\n    height: Math.max(bottomOf(a), bottomOf(b)) - top,\n  };\n};\n\nconst contains = (outer: AbsBox, inner: AbsBox, eps = MOVE_EPS): boolean =>\n  inner.left >= outer.left - eps &&\n  inner.top >= outer.top - eps &&\n  rightOf(inner) <= rightOf(outer) + eps &&\n  bottomOf(inner) <= bottomOf(outer) + eps;\n\nconst viewOf = (\n  doc: Doc,\n  outlines?: CaseOutlines,\n  decorations?: DecorationBindings,\n): BoxView => ({\n  byId: new Map(doc.nodes.map(node => [node.id, node])),\n  abs: absBoxMap(doc),\n  outlines,\n  decorations,\n});\n\n/** Crop frames are masks, not snug groups. Refitting them changes the image crop. */\nfunction groupsToRefit(doc: Doc) {\n  const fitted = groupsFittingChildren(doc);\n  for (const node of doc.nodes)\n    if (node.data.nodeType === 'FrameLayoutItem') fitted.delete(node.id);\n  return fitted;\n}\n\n/** Optional decoration restoration must not alter a crop or undo its accepted move. */\nfunction cropFramesUnchanged(before: Doc, after: Doc): boolean {\n  const oldNodes = new Map(before.nodes.map(node => [node.id, node]));\n  const newNodes = new Map(after.nodes.map(node => [node.id, node]));\n  const oldBoxes = absBoxMap(before);\n  const newBoxes = absBoxMap(after);\n  const checked = new Set<string>();\n  const unchanged = (id: string): boolean => {\n    if (checked.has(id)) return true;\n    checked.add(id);\n    const node = oldNodes.get(id);\n    const next = newNodes.get(id);\n    return (\n      !!node &&\n      !!next &&\n      JSON.stringify(node.data.props) === JSON.stringify(next.data.props) &&\n      (node.childNodeIds ?? []).every(unchanged)\n    );\n  };\n  return before.nodes.every(\n    node =>\n      node.data.nodeType !== 'FrameLayoutItem' ||\n      (unchanged(node.id) &&\n        JSON.stringify(oldBoxes.get(node.id)) ===\n          JSON.stringify(newBoxes.get(node.id))),\n  );\n}\n\nfunction measure(doc: Doc, ctx: Context): LayoutMetrics {\n  return computeLayoutMetrics(\n    doc,\n    ctx.ruler(doc),\n    ctx.base,\n    ctx.baseTight,\n    ctx.outlines,\n    ctx.containers,\n  );\n}\n\n/**\n * 넘침·겹침·잘림·글상자 이탈·구분선 침범·선 연결 끊김 — 폰트는 뺀다(축소가 일부러 내려 보내는\n * 값이다). 구분선 둘은 c4 회차 실측에서 넣었다 — 글을 비키거나 장식을 다시 붙이다가 구분선 너머로\n * 넘어간 장이 3,114장 중 15장 새로 생겼다.\n */\nconst fitOf = (m: LayoutMetrics): number[] => [\n  m.newOverlapPairs,\n  m.newOverlapArea,\n  m.overflowNodes,\n  m.overflowArea,\n  m.clippedNodes,\n  m.clippedArea,\n  m.frameSpillNodes,\n  m.frameSpillArea,\n  m.separatorViolations ?? 0,\n  m.brokenLineConnections ?? 0,\n];\n/** 개수 칸은 0, 면적 칸은 1px² 까지 같은 값으로 본다. */\nconst FIT_TOLERANCE = [0, 1, 0, 1, 0, 1, 0, 1, 0, 0];\n\nexport function simpleMetricsNoWorse(\n  next: LayoutMetrics,\n  previous: LayoutMetrics,\n): boolean {\n  const a = fitOf(next);\n  const b = fitOf(previous);\n  // 정렬선은 바닥(`EXCESSIVE_GUIDE_KEPT`) 밑으로 떨어뜨리지만 않으면 된다 — 글을 비키는 일은\n  // 정렬쌍 몇 개를 내주기 마련이지만, 바닥을 깨면 판정이 그것만으로 FAIL 이다.\n  const guideBroken =\n    previous.guideKeptRatio >= EXCESSIVE_GUIDE_KEPT &&\n    next.guideKeptRatio < EXCESSIVE_GUIDE_KEPT;\n  return (\n    !guideBroken &&\n    next.overlaps.every(\n      pair =>\n        pair.area <=\n        (previous.overlaps.find(p => p.a === pair.a && p.b === pair.b)?.area ??\n          0) +\n          1,\n    ) &&\n    a.every((value, i) => value <= (b[i] as number) + FIT_TOLERANCE[i]!)\n  );\n}\n\nfunction improves(next: LayoutMetrics, previous: LayoutMetrics): boolean {\n  const a = fitOf(next);\n  const b = fitOf(previous);\n  return (\n    simpleMetricsNoWorse(next, previous) &&\n    a.some((value, i) => value < (b[i] as number) - FIT_TOLERANCE[i]!)\n  );\n}\n\n/** 이 글의 합성 판정 박스(문서 좌표). 못 재면 `null`. */\nfunction inkOf(doc: Doc, view: BoxView, ctx: Context, id: string) {\n  const frame = view.abs.get(id);\n  if (!frame) return null;\n  return judgeBoxOf(id, frame, ctx.ruler(doc)) ?? null;\n}\n\nfunction fontOf(node: Node | undefined): number {\n  if (!node) return 0;\n  return Math.max(...textBlocksOf(node).map(b => b.fontSize), 0);\n}\n\n/** 이 글이 놓일 수 있는 영역 — 컨테이너의 장식 몫을 뺀 영역, 컨테이너가 없으면 페이지. */\nfunction regionOf(\n  doc: Doc,\n  view: BoxView,\n  ctx: Context,\n  textId: string,\n  ink: AbsBox,\n): AbsBox {\n  const page = pageBoxOf(doc);\n  const containerId = validContainerOf(ctx.containers.get(textId) ?? '');\n  const region = containerId\n    ? (fitRectIn(view, containerId, ink) ??\n      inscribedRectIn(view, containerId) ??\n      view.abs.get(containerId) ??\n      page)\n    : page;\n  return region;\n}\n\n/** 영역을 안쪽으로 `margin` 만큼 줄인다 — 글이 안 들어가면 그 축은 줄이지 않는다. */\nfunction insetFor(region: AbsBox, ink: AbsBox, margin: number): AbsBox {\n  const mx = region.width - ink.width >= 2 * margin ? margin : 0;\n  const my = region.height - ink.height >= 2 * margin ? margin : 0;\n  return {\n    left: region.left + mx,\n    top: region.top + my,\n    width: region.width - 2 * mx,\n    height: region.height - 2 * my,\n  };\n}\n\n/** 같은 크기로 들어가면 가장 짧은 이동을, 아니면 `null`. */\nfunction translationInto(\n  ink: AbsBox,\n  region: AbsBox,\n): { dx: number; dy: number } | null {\n  if (\n    ink.width > region.width + MOVE_EPS ||\n    ink.height > region.height + MOVE_EPS\n  )\n    return null;\n  const dx =\n    ink.left < region.left\n      ? region.left - ink.left\n      : rightOf(ink) > rightOf(region)\n        ? rightOf(region) - rightOf(ink)\n        : 0;\n  const dy =\n    ink.top < region.top\n      ? region.top - ink.top\n      : bottomOf(ink) > bottomOf(region)\n        ? bottomOf(region) - bottomOf(ink)\n        : 0;\n  return { dx, dy };\n}\n\n/** 이 컨테이너와 함께 움직이거나 컨테이너 안에 원래 있던 것 — 키울 때 이웃으로 안 센다. */\nfunction ownedBy(\n  doc: Doc,\n  view: BoxView,\n  ctx: Context,\n  containerId: string,\n): Set<string> {\n  const owned = new Set<string>([containerId]);\n  const walk = (id: string) => {\n    for (const child of view.byId.get(id)?.childNodeIds ?? []) {\n      owned.add(child);\n      walk(child);\n    }\n  };\n  walk(containerId);\n  for (const [textId, owner] of ctx.containers)\n    if (owner === containerId) owned.add(textId);\n  for (const [childId, parent] of ctx.containerParents) {\n    if (parent === containerId) owned.add(childId);\n    if (childId === containerId) owned.add(parent);\n  }\n  for (const [decoId, deco] of ctx.decorations)\n    if (owned.has(deco.ownerId)) owned.add(decoId);\n  const box = view.abs.get(containerId);\n  if (box) {\n    for (const node of doc.nodes) {\n      const other = view.abs.get(node.id);\n      if (other && contains(box, other)) owned.add(node.id);\n      // 컨테이너를 품은 판(부모 카드·배경)도 이웃이 아니다.\n      if (other && contains(other, box)) owned.add(node.id);\n    }\n  }\n  return owned;\n}\n\n/**\n * 컨테이너를 `wanted` 쪽으로 키운다 — 옛 상자를 언제나 포함한다. 페이지(장식이 내민 몫을 뺀 것)와\n * 이웃 앞에서 멈춘다. 키웠으면 `true`.\n */\nfunction growContainer(\n  doc: Doc,\n  view: BoxView,\n  ctx: Context,\n  containerId: string,\n  wanted: AbsBox,\n): boolean {\n  const container = view.byId.get(containerId);\n  const box = view.abs.get(containerId);\n  if (!container || !box || !ctx.safety.growable.has(containerId)) return false;\n  const target = unionBox(box, wanted);\n\n  // 장식이 바깥으로 내민 몫만큼 페이지에서 떼어 놓는다. 이미 넘은 변은 그 자리에 둔다.\n  const bounds = boundsMinusOverhang(\n    simpleSpacingBounds(\n      containerId,\n      authoredBoxMap(doc),\n      ctx.safety.spacing,\n      pageBoxOf(doc),\n    ),\n    decorationOverhangOf(containerId, box, view),\n  );\n  let left = Math.min(box.left, Math.max(target.left, bounds.left));\n  let top = Math.min(box.top, Math.max(target.top, bounds.top));\n  let right = Math.max(\n    rightOf(box),\n    Math.min(rightOf(target), rightOf(bounds)),\n  );\n  let bottom = Math.max(\n    bottomOf(box),\n    Math.min(bottomOf(target), bottomOf(bounds)),\n  );\n\n  // 이웃 앞에서 멈춘다 — 이미 겹쳐 있던 것은 원래 있던 겹침이라 한계로 안 센다.\n  const owned = ownedBy(doc, view, ctx, containerId);\n  for (const n of neighborsOf(doc, view.abs, owned)) {\n    const nb = n.box;\n    const overlapsNow =\n      Math.min(rightOf(nb), rightOf(box)) > Math.max(nb.left, box.left) &&\n      Math.min(bottomOf(nb), bottomOf(box)) > Math.max(nb.top, box.top);\n    if (overlapsNow) continue;\n    const spansY = Math.min(bottomOf(nb), bottom) > Math.max(nb.top, top);\n    const spansX = Math.min(rightOf(nb), right) > Math.max(nb.left, left);\n    if (spansY && nb.left >= rightOf(box))\n      right = Math.max(rightOf(box), Math.min(right, nb.left - NEIGHBOR_GAP));\n    if (spansY && rightOf(nb) <= box.left)\n      left = Math.min(box.left, Math.max(left, rightOf(nb) + NEIGHBOR_GAP));\n    if (spansX && nb.top >= bottomOf(box))\n      bottom = Math.max(bottomOf(box), Math.min(bottom, nb.top - NEIGHBOR_GAP));\n    if (spansX && bottomOf(nb) <= box.top)\n      top = Math.min(box.top, Math.max(top, bottomOf(nb) + NEIGHBOR_GAP));\n  }\n\n  // 도형이 허락하지 않는 축은 키우지 않는다(편집기에서 못 다루는 문서가 된다).\n  if (!canWidenByBox(container)) {\n    left = box.left;\n    right = rightOf(box);\n  }\n  const heightLimit = maxStretchHeight(container, right - left);\n  if (Number.isFinite(heightLimit) && bottom - top > heightLimit) {\n    const height = Math.max(box.height, heightLimit);\n    // 위 변을 먼저 지킨다 — 키운 몫은 아래에서 깎는다.\n    top = Math.min(box.top, Math.max(top, bottomOf(box) - height));\n    bottom = Math.max(bottomOf(box), top + height);\n  }\n  if (\n    right - left <= box.width + MOVE_EPS &&\n    bottom - top <= box.height + MOVE_EPS\n  )\n    return false;\n  resizeNode(\n    container,\n    { left, top, width: right - left, height: bottom - top },\n    view,\n  );\n  return true;\n}\n\n/**\n * 넘친 글을 담을 컨테이너 목표 — 글 상자에 여백을 두르고, 도형의 안쪽 인셋을 더한 bbox.\n * 원안 자식 슬롯 전체의 padding과 실루엣·장식 인셋을 각각 만족시키는 목표다.\n */\nfunction wantedContainerBox(\n  view: BoxView,\n  ctx: Context,\n  textId: string,\n  containerId: string,\n  ink: AbsBox,\n): AbsBox | null {\n  const container = view.byId.get(containerId);\n  const box = view.abs.get(containerId);\n  if (!container || !box || !ctx.safety.growableTexts.has(textId)) return null;\n  const authored = simplePaddingOf(ctx.safety.spacing, textId, containerId);\n  const inset = decorationInsetOf(containerId, box, view);\n  const safety = fontOf(view.byId.get(textId)) * SAFETY_EM;\n  const pad = (side: keyof typeof inset) => Math.max(inset[side], safety);\n  const needed: AbsBox = {\n    left: ink.left - pad('left'),\n    top: ink.top - pad('top'),\n    width: ink.width + pad('left') + pad('right'),\n    height: ink.height + pad('top') + pad('bottom'),\n  };\n  const inner = inscribedRectIn(view, containerId) ?? box;\n  const silhouetteTarget = boxForInnerRect(\n    container,\n    box,\n    unionBox(inner, needed),\n    view.outlines,\n  );\n  // Authored padding is relative to the container's physical box. Do not add the\n  // shape inset twice: independently satisfy silhouette clearance and slot padding.\n  const slot = unionBox(view.abs.get(textId) ?? ink, ink);\n  return unionBox(silhouetteTarget, {\n    left: slot.left - authored.left,\n    top: slot.top - authored.top,\n    width: slot.width + authored.left + authored.right,\n    height: slot.height + authored.top + authored.bottom,\n  });\n}\n\n/** 한 번 고쳐 보고 게이트를 넘으면 받는다. */\nfunction attempt(\n  doc: Doc,\n  current: LayoutMetrics,\n  ctx: Context,\n  edit: (draft: Doc, view: BoxView) => boolean,\n  rigidIds: ReadonlySet<string> = new Set(),\n): { doc: Doc; metrics: LayoutMetrics } | null {\n  const draft = structuredClone(doc) as Doc;\n  const fitted = groupsToRefit(draft);\n  for (const id of rigidIds) fitted.delete(id);\n  const view = viewOf(draft, ctx.outlines, ctx.decorations);\n  if (!edit(draft, view)) return null;\n  console.log(JSON.stringify({kind:'attempt-gates',intent:preservesSimpleIntent(draft,ctx.safety,ctx.ruler(draft),doc),improves:improves(measure(draft,ctx),current)}));\n  followTextMoves(doc, view, ctx.safety);\n  refitGroupBoxes(draft, fitted);\n  const metrics = measure(draft, ctx);\n  if (\n    !preservesSimpleIntent(draft, ctx.safety, ctx.ruler(draft), doc) ||\n    !improves(metrics, current)\n  ) {\n    ctx.report.rejected++;\n    return null;\n  }\n  return { doc: draft, metrics };\n}\n\n/** 넘친 글 하나 — 옮겨 담기 → 컨테이너 키우기(+ 키운 컨테이너 안으로 옮기기). */\nfunction fixOverflow(\n  doc: Doc,\n  current: LayoutMetrics,\n  ctx: Context,\n  textId: string,\n  containerId: string,\n) {\n  if (ctx.safety.badges.has(textId) || ctx.safety.immovable.has(textId))\n    return null;\n  const moved = attempt(doc, current, ctx, (draft, view) => {\n    const ink = inkOf(draft, view, ctx, textId);\n    const text = view.byId.get(textId);\n    if (!ink || !text) return false;\n    const margin = fontOf(text) * SAFETY_EM;\n    const region = regionOf(draft, view, ctx, textId, ink);\n    const shift = translationInto(ink, insetFor(region, ink, margin));\n    if (!shift || Math.hypot(shift.dx, shift.dy) < MOVE_EPS) return false;\n    translateNode(text, shift.dx, shift.dy, view);\n    return true;\n  });\n  if (moved) {\n    ctx.report.moved++;\n    return moved;\n  }\n  const grown = attempt(doc, current, ctx, (draft, view) => {\n    const ink = inkOf(draft, view, ctx, textId);\n    const text = view.byId.get(textId);\n    if (!ink || !text) return false;\n    const wanted = wantedContainerBox(view, ctx, textId, containerId, ink);\n    if (!wanted || !growContainer(draft, view, ctx, containerId, wanted))\n      return false;\n    // 키운 컨테이너 안에서 아직 삐져나온 몫은 글을 옮겨 담는다.\n    const shift = translationInto(\n      ink,\n      insetFor(\n        regionOf(draft, view, ctx, textId, ink),\n        ink,\n        fontOf(text) * SAFETY_EM,\n      ),\n    );\n    if (shift && Math.hypot(shift.dx, shift.dy) >= MOVE_EPS)\n      translateNode(text, shift.dx, shift.dy, view);\n    return true;\n  });\n  if (grown) ctx.report.grown++;\n  return grown;\n}\n\n/**\n * 새로 겹친 쌍 하나 — 글을 장애물에서 비킨다. 네 방향 중 짧은 쪽부터 해 보고, 컨테이너 안에\n * 안 들어가면 그 방향으로 컨테이너를 키운다. 아래로 비킬 때는 같은 컨테이너에서 그 아래에 있던 글도\n * 함께 내린다(다시 쌓기).\n */\nfunction fixOverlap(\n  doc: Doc,\n  current: LayoutMetrics,\n  ctx: Context,\n  moverId: string,\n  obstacleId: string,\n) {\n  if (ctx.safety.immovable.has(moverId)) {\n    const view = viewOf(doc, ctx.outlines, ctx.decorations);\n    const ink = inkOf(doc, view, ctx, moverId);\n    if (!ink) return null;\n    const protectedIds = new Set([\n      ...ctx.authoredGraphics,\n      ...ctx.containers.values(),\n      ...ctx.containerParents.values(),\n      ...ctx.containerParents.keys(),\n      ...ctx.safety.supports.values(),\n    ]);\n    const moves = graphicAvoidanceMoves(\n      doc,\n      obstacleId,\n      ink,\n      fontOf(view.byId.get(moverId)),\n      {\n        ...ctx,\n        tight: ctx.ruler(doc),\n        protectedIds,\n      },\n    );\n    for (const move of moves) {\n      const result = attempt(\n        doc,\n        current,\n        ctx,\n        (_draft, nextView) => {\n          for (const id of move.roots)\n            translateNode(nextView.byId.get(id)!, move.dx, move.dy, nextView);\n          return true;\n        },\n        move.members,\n      );\n      if (\n        result &&\n        !result.metrics.overlaps.some(\n          p =>\n            ((p.a === moverId && move.members.has(p.b)) ||\n              (p.b === moverId && move.members.has(p.a))) &&\n            p.area > p.baseArea + 1,\n        )\n      ) {\n        ctx.report.moved++;\n        return result;\n      }\n    }\n    return null;\n  }\n  if (ctx.safety.badges.has(moverId)) return null;\n  if (ctx.safety.supports.get(moverId) === obstacleId) return null;\n  const view0 = viewOf(doc, ctx.outlines, ctx.decorations);\n  const ink = inkOf(doc, view0, ctx, moverId);\n  const obstacle =\n    inkOf(doc, view0, ctx, obstacleId) ?? view0.abs.get(obstacleId) ?? null;\n  if (!ink || !obstacle) return null;\n  const gap =\n    fontOf(view0.byId.get(moverId)) * Math.max(AVOID_GAP_EM, SAFETY_EM);\n  const obstacleNode = view0.byId.get(obstacleId);\n  if (!obstacleNode) return null;\n  const moves = obstacleAvoidanceMoves(\n    obstacleNode,\n    obstacle,\n    ink,\n    gap,\n    ctx.outlines,\n  );\n  const containerId = validContainerOf(ctx.containers.get(moverId) ?? '');\n  const baseAbs = absBoxMap(ctx.base);\n  const moverBaseTop = baseAbs.get(moverId)?.top ?? ink.top;\n\n  console.log(JSON.stringify({kind:'overlap-candidates',moverId,obstacleId,ink,obstacle,moves}));\n  for (const move of moves) {\n    for (const allowGrow of [false, true]) {\n      if (allowGrow && !containerId) continue;\n      const result = attempt(doc, current, ctx, (draft, view) => {\n        if (!view.byId.get(moverId)) return false;\n        // 같은 컨테이너에서 이 글 아래에 있던 글 — 아래로 비킬 때 함께 내린다.\n        const followers =\n          move.dy > 0 && containerId\n            ? [...ctx.containers]\n                .filter(\n                  ([id, owner]) =>\n                    owner === containerId &&\n                    id !== moverId &&\n                    id !== obstacleId &&\n                    (baseAbs.get(id)?.top ?? -Infinity) > moverBaseTop,\n                )\n                .map(([id]) => id)\n            : [];\n        const group = [moverId, ...followers];\n        if (\n          group.some(\n            id => ctx.safety.badges.has(id) || ctx.safety.immovable.has(id),\n          )\n        )\n          return false;\n        const inks = group\n          .map(id => inkOf(draft, view, ctx, id))\n          .filter((b): b is AbsBox => b !== null);\n        if (inks.length === 0) return false;\n        const span = inks\n          .map(b => ({ ...b, left: b.left + move.dx, top: b.top + move.dy }))\n          .reduce(unionBox);\n        if (allowGrow && containerId) {\n          const wanted = wantedContainerBox(\n            view,\n            ctx,\n            moverId,\n            containerId,\n            span,\n          );\n          if (!wanted || !growContainer(draft, view, ctx, containerId, wanted))\n            return false;\n        }\n        const region = regionOf(draft, view, ctx, moverId, span);\n        const margin = fontOf(view.byId.get(moverId)) * SAFETY_EM;\n        if (!contains(insetFor(region, span, margin), span, 1)) { console.log(JSON.stringify({kind:'overlap-region-reject',moverId,move,allowGrow,region,span,margin})); return false; }\n        for (const id of group) {\n          const node = view.byId.get(id);\n          if (node) translateNode(node, move.dx, move.dy, view);\n        }\n        return true;\n      });\n      if (result) {\n        ctx.report.moved++;\n        if (allowGrow) ctx.report.grown++;\n        return result;\n      }\n    }\n  }\n  return null;\n}\n\n/** 페이지 밖으로 나간 글 하나 — 컨테이너 있는 글만 페이지와의 교집합 안으로 옮긴다. */\nfunction fixClipped(\n  doc: Doc,\n  current: LayoutMetrics,\n  ctx: Context,\n  textId: string,\n) {\n  if (ctx.safety.badges.has(textId) || ctx.safety.immovable.has(textId))\n    return null;\n  const result = attempt(doc, current, ctx, (draft, view) => {\n    const ink = inkOf(draft, view, ctx, textId);\n    const text = view.byId.get(textId);\n    if (!ink || !text) return false;\n    const page = pageBoxOf(draft);\n    const region = regionOf(draft, view, ctx, textId, ink);\n    const left = Math.max(page.left, region.left);\n    const top = Math.max(page.top, region.top);\n    const inside = {\n      left,\n      top,\n      width: Math.min(rightOf(page), rightOf(region)) - left,\n      height: Math.min(bottomOf(page), bottomOf(region)) - top,\n    };\n    const shift = translationInto(ink, inside);\n    if (!shift || Math.hypot(shift.dx, shift.dy) < MOVE_EPS) return false;\n    translateNode(text, shift.dx, shift.dy, view);\n    return true;\n  });\n  if (result) ctx.report.moved++;\n  return result;\n}\n\n/** 겹친 쌍에서 비킬 쪽 — 글과 비글이면 글, 글 둘이면 원안에서 아래(같으면 오른쪽)에 있던 글. */\nfunction moverOf(\n  baseAbs: Map<string, AbsBox>,\n  isText: Set<string>,\n  a: string,\n  b: string,\n): { mover: string; obstacle: string } | null {\n  if (isText.has(a) && !isText.has(b)) return { mover: a, obstacle: b };\n  if (isText.has(b) && !isText.has(a)) return { mover: b, obstacle: a };\n  if (!isText.has(a)) return null;\n  const ba = baseAbs.get(a);\n  const bb = baseAbs.get(b);\n  const later =\n    ba && bb && (bb.top > ba.top || (bb.top === ba.top && bb.left > ba.left));\n  return later ? { mover: b, obstacle: a } : { mover: a, obstacle: b };\n}\n\nconst isNewOverlap = (pair: LayoutMetrics['overlaps'][number]) =>\n  pair.area - pair.baseArea > (pair.minArea ?? OVERLAP_MIN_AREA);\n\n/**\n * 새 겹침 쌍의 깊이를 글자 크기로 나눈 값 — 두 판정 박스가 겹친 폭·높이 중 짧은 쪽.\n * 글이 아닌 쪽은 노드 상자로 잰다.\n */\nfunction overlapDepthsEm(doc: Doc, metrics: LayoutMetrics, ctx: Context) {\n  const abs = absBoxMap(doc);\n  const tight = ctx.ruler(doc);\n  const fontById = new Map(metrics.nodes.map(n => [n.nodeId, n.fontSize]));\n  const boxOf = (id: string) => {\n    const frame = abs.get(id);\n    return frame ? (judgeBoxOf(id, frame, tight) ?? frame) : null;\n  };\n  const out = new Map<LayoutMetrics['overlaps'][number], number>();\n  for (const pair of metrics.overlaps) {\n    if (!isNewOverlap(pair)) continue;\n    const a = boxOf(pair.a);\n    const b = boxOf(pair.b);\n    const font = Math.max(fontById.get(pair.a) ?? 0, fontById.get(pair.b) ?? 0);\n    if (!a || !b || !(font > 0)) continue;\n    const depth = Math.min(\n      Math.min(rightOf(a), rightOf(b)) - Math.max(a.left, b.left),\n      Math.min(bottomOf(a), bottomOf(b)) - Math.max(a.top, b.top),\n    );\n    out.set(pair, depth / font);\n  }\n  return out;\n}\n\n/** 원안에서 이미 그만큼 잘려 있던 글은 디자인이다 — 더 나간 것만 결함이다. */\nconst isNewClip = (clip: LayoutMetrics['clipped'][number], ctx: Context) =>\n  clip.isText && clip.area > (ctx.baseClipped.get(clip.nodeId) ?? 0) + 1;\n\n/** 기하만으로 한 바퀴 — 넘침, 겹침, 잘림 순. 받은 고치기가 없으면 그대로 돌려준다. */\nfunction geometryPass(\n  doc: Doc,\n  metrics: LayoutMetrics,\n  ctx: Context,\n): { doc: Doc; metrics: LayoutMetrics; changed: boolean } {\n  let current = { doc, metrics };\n  let changed = false;\n  const accept = (next: { doc: Doc; metrics: LayoutMetrics } | null) => {\n    if (!next) return;\n    current = next;\n    changed = true;\n  };\n  const isText = new Set(\n    doc.nodes.filter(n => n.data.nodeType === 'TextItem').map(n => n.id),\n  );\n  const baseAbs = absBoxMap(ctx.base);\n\n  for (const node of metrics.nodes) {\n    if (!node.judged || !(node.overflow.area > OVERFLOW_EPS)) continue;\n    const containerId = validContainerOf(node.containerId);\n    if (!containerId) continue;\n    accept(\n      fixOverflow(current.doc, current.metrics, ctx, node.nodeId, containerId),\n    );\n  }\n  const depths = overlapDepthsEm(current.doc, current.metrics, ctx);\n  for (const [pair, depth] of depths) {\n    if (depth <= OVERLAP_DEPTH_EM && (pair.minArea ?? OVERLAP_MIN_AREA) > 1)\n      continue;\n    const roles = moverOf(baseAbs, isText, pair.a, pair.b);\n    if (!roles) continue;\n    accept(\n      fixOverlap(\n        current.doc,\n        current.metrics,\n        ctx,\n        roles.mover,\n        roles.obstacle,\n      ),\n    );\n  }\n  for (const clip of current.metrics.clipped) {\n    if (!isNewClip(clip, ctx)) continue;\n    accept(fixClipped(current.doc, current.metrics, ctx, clip.nodeId));\n  }\n  return { ...current, changed };\n}\n\nfunction scaleTree(tree: TextTree, scale: number): void {\n  if (typeof tree.style?.fontSize === 'number' && tree.style.fontSize > 0)\n    tree.style.fontSize *= scale;\n  for (const child of tree.children ?? []) scaleTree(child, scale);\n}\n\n/**\n * 축소할 글 — 글자 크기의 `SHRINK_DEPTH_EM` 보다 깊이 넘친 글, 그만큼 깊이 새로 겹친 쌍의\n * 글, 원안보다 더 잘린 글.\n */\nfunction shrinkTargets(doc: Doc, metrics: LayoutMetrics, ctx: Context) {\n  const out = new Set<string>();\n  for (const node of metrics.nodes) {\n    if (!node.judged || !(node.overflow.area > OVERFLOW_EPS)) continue;\n    const o = node.overflow;\n    if (\n      Math.max(o.left, o.right, o.top, o.bottom) >\n      node.fontSize * SHRINK_DEPTH_EM\n    )\n      out.add(node.nodeId);\n  }\n  for (const [pair, depth] of overlapDepthsEm(doc, metrics, ctx)) {\n    if (depth <= SHRINK_DEPTH_EM) continue;\n    out.add(pair.a);\n    out.add(pair.b);\n  }\n  for (const clip of metrics.clipped)\n    if (isNewClip(clip, ctx)) out.add(clip.nodeId);\n  return out;\n}\n\n/**\n * 결함이 남은 글과 그 반복 역할을 같은 배율로 5% 줄인다. 하한은 원안 대비 `EXCESSIVE_FONT_SCALE` 과 페이지 높이의\n * `PAGE_MIN_FONT_RATIO` 중 큰 쪽이다. 높이는 다시 흘려 잡고, 자라는 기준 변을 지킨다.\n */\nfunction shrinkStep(doc: Doc, targets: Set<string>, ctx: Context) {\n  const draft = structuredClone(doc) as Doc;\n  const fitted = groupsToRefit(draft);\n  const view = viewOf(draft, ctx.outlines, ctx.decorations);\n  const baseById = new Map(ctx.base.nodes.map(n => [n.id, n]));\n  const grouped = new Set(targets);\n  for (let round = 0; round < ctx.safety.roles.length; round++)\n    for (const role of ctx.safety.roles)\n      if (role.some(id => grouped.has(id)))\n        for (const id of role) grouped.add(id);\n  const scales = new Map<string, number>();\n  for (const id of grouped) {\n    const now = renderedFontRange(view.byId.get(id)).minimum;\n    const authored = renderedFontRange(baseById.get(id)).minimum;\n    if (\n      !now ||\n      !authored ||\n      ctx.safety.badges.has(id) ||\n      ctx.safety.immovable.has(id) ||\n      (ctx.requireContainer && !validContainerOf(ctx.containers.get(id) ?? ''))\n    ) {\n      scales.set(id, 1);\n      continue;\n    }\n    const floor = Math.max(\n      authored * EXCESSIVE_FONT_SCALE,\n      doc.height * PAGE_MIN_FONT_RATIO,\n    );\n    scales.set(id, Math.min(1, Math.max(floor / now, 1 - SHRINK_STEP)));\n  }\n  // A role has one relative reduction, including short peers that have no individual defect.\n  for (let round = 0; round < ctx.safety.roles.length; round++)\n    for (const role of ctx.safety.roles) {\n      if (!role.some(id => grouped.has(id))) continue;\n      const common = Math.max(...role.map(id => scales.get(id) ?? 1));\n      for (const id of role) scales.set(id, common);\n    }\n  let shrunk = 0;\n  for (const id of grouped) {\n    const node = view.byId.get(id);\n    const box = view.abs.get(id);\n    const tree = node?.data.props.text?.textTree;\n    if (!node || !box || !tree || node.data.nodeType !== 'TextItem') continue;\n    const scale = scales.get(id) ?? 1;\n    if (!(scale < 1 - 1e-3)) continue;\n    scaleTree(tree, scale);\n    const blocks = textBlocksOf(node);\n    // Font reduction cannot consume additional slot padding by growing a short frame.\n    const height = Math.min(\n      box.height,\n      boxHeightOf(blocks, flowAt(blocks, box.width).counts),\n    );\n    const anchor = growAnchorOf(tree);\n    const top = ctx.safety.immovable.has(id)\n      ? box.top\n      : anchor === 'bottom'\n        ? bottomOf(box) - height\n        : anchor === 'middle'\n          ? box.top + (box.height - height) / 2\n          : box.top;\n    resizeNode(node, { ...box, top, height }, view);\n    shrunk++;\n  }\n  if (shrunk > 0) {\n    followTextMoves(doc, view, ctx.safety);\n    refitGroupBoxes(draft, fitted);\n  }\n  return { doc: draft, shrunk };\n}\n\n/** Widen only the text frame of an authored numeric badge, preserving its alignment anchor. */\nfunction widenBadges(input: Doc, start: LayoutMetrics, ctx: Context) {\n  let current = { doc: structuredClone(input) as Doc, metrics: start };\n  for (const id of ctx.safety.badges) {\n    const draft = structuredClone(current.doc) as Doc;\n    const view = viewOf(draft, ctx.outlines, ctx.decorations);\n    const node = view.byId.get(id),\n      frame = view.abs.get(id);\n    if (!node || !frame) continue;\n    const blocks = textBlocksOf(node);\n    const sourceTight = ctx.baseTight[id];\n    const measuredWidth = sourceTight?.status === 'ok' ? sourceTight.width : 0;\n    const width = Math.max(\n      maxContentWidth(blocks) * 1.08,\n      measuredWidth + fontOf(node) * 0.25,\n    );\n    console.log(JSON.stringify({kind:'badge-width',id,frame,width}));\n    if (!(width > frame.width + MOVE_EPS)) continue;\n    const authored = ctx.base.nodes.find(n => n.id === id) ?? node;\n    const authoredAlign =\n      authored.data.props.text?.textTree?.style?.horizontalAlign;\n    const align =\n      authoredAlign === 'left' || authoredAlign === 'right'\n        ? authoredAlign\n        : 'center';\n    const left =\n      frame.left -\n      (align === 'center'\n        ? (width - frame.width) / 2\n        : align === 'right'\n          ? width - frame.width\n          : 0);\n    const height = boxHeightOf(blocks, flowAt(blocks, width).counts);\n    const anchor = growAnchorOf(node.data.props.text!.textTree!);\n    const top =\n      anchor === 'bottom'\n        ? bottomOf(frame) - height\n        : anchor === 'middle'\n          ? frame.top + (frame.height - height) / 2\n          : frame.top;\n    const wanted = { left, top, width, height };\n    const region = regionOf(draft, view, ctx, id, wanted);\n    console.log(JSON.stringify({kind:'badge-region',id,wanted,region,contains:contains(region,wanted)}));\n    if (!contains(region, wanted)) continue;\n    const fitted = groupsFittingChildren(draft);\n    resizeNode(node, wanted, view);\n    // The original alignment, including paragraph overrides, is authoritative for badges.\n    const tree = node.data.props.text!.textTree!;\n    if (authoredAlign && tree.style) tree.style.horizontalAlign = align;\n    if (authoredAlign)\n      for (const paragraph of tree.children ?? [])\n        if (paragraph.style) paragraph.style.horizontalAlign = align;\n    followTextMoves(current.doc, view, ctx.safety);\n    refitGroupBoxes(draft, fitted);\n    const metrics = measure(draft, ctx);\n    console.log(JSON.stringify({kind:'badge-gates',id,intent:preservesSimpleIntent(draft,ctx.safety,ctx.ruler(draft),current.doc),metrics:simpleMetricsNoWorse(metrics,current.metrics)}));\n    if (\n      !preservesSimpleIntent(\n        draft,\n        ctx.safety,\n        ctx.ruler(draft),\n        current.doc,\n      ) ||\n      !simpleMetricsNoWorse(metrics, current.metrics)\n    )\n      continue;\n    current = { doc: draft, metrics };\n    ctx.report.widened++;\n  }\n  return current;\n}\n\n/** Expand inside the silhouette before trading away font size. Alignment anchors stay fixed. */\nfunction widenTextFrames(doc: Doc, metrics: LayoutMetrics, ctx: Context) {\n  let current = { doc, metrics };\n  for (const metric of metrics.nodes) {\n    const id = metric.nodeId;\n    if (\n      ctx.safety.badges.has(id) ||\n      ctx.safety.immovable.has(id) ||\n      !(metric.overflow.area > OVERFLOW_EPS || metric.frameSpill > 2)\n    )\n      continue;\n    const container = validContainerOf(ctx.containers.get(id) ?? '');\n    if (!container) continue;\n    const result = attempt(current.doc, current.metrics, ctx, (draft, view) => {\n      const node = view.byId.get(id),\n        frame = view.abs.get(id);\n      if (!node || !frame || !node.data.props.text?.textTree) return false;\n      // This step never falls back to the shape's rectangular bbox.\n      const silhouette = inscribedRectIn(view, container);\n      if (!silhouette) return false;\n      const region = simpleSpacingBounds(\n        id,\n        authoredBoxMap(draft),\n        ctx.safety.spacing,\n        silhouette,\n      );\n      const align =\n        node.data.props.text.textTree.style?.horizontalAlign ?? 'center';\n      const width =\n        align === 'center'\n          ? 2 *\n            Math.min(\n              frame.left + frame.width / 2 - region.left,\n              rightOf(region) - frame.left - frame.width / 2,\n            )\n          : align === 'right'\n            ? rightOf(frame) - region.left\n            : rightOf(region) - frame.left;\n      if (!(width > frame.width + MOVE_EPS)) return false;\n      const left =\n        align === 'center'\n          ? frame.left - (width - frame.width) / 2\n          : align === 'right'\n            ? rightOf(frame) - width\n            : frame.left;\n      const blocks = textBlocksOf(node);\n      const predictedHeight = boxHeightOf(blocks, flowAt(blocks, width).counts);\n      const anchor = growAnchorOf(node.data.props.text.textTree);\n      const availableHeight =\n        anchor === 'bottom'\n          ? bottomOf(frame) - region.top\n          : anchor === 'middle'\n            ? 2 *\n              Math.min(\n                frame.top + frame.height / 2 - region.top,\n                bottomOf(region) - frame.top - frame.height / 2,\n              )\n            : bottomOf(region) - frame.top;\n      // Width may reduce glyph overflow even when all lines cannot fit yet. Keep\n      // the slot within authored padding and leave the residual glyphs to shrink.\n      const height = Math.min(\n        predictedHeight,\n        Math.max(frame.height, availableHeight),\n      );\n      const top =\n        anchor === 'bottom'\n          ? bottomOf(frame) - height\n          : anchor === 'middle'\n            ? frame.top + (frame.height - height) / 2\n            : frame.top;\n      // Width can improve an existing vertical spill before the shrink phase resolves it.\n      // The actual glyph gate below still rejects every new or deeper defect.\n      const wanted = { left, top, width, height };\n      const allowed = fitRectIn(view, container, wanted);\n      if (\n        !allowed ||\n        left < allowed.left - MOVE_EPS ||\n        left + width > rightOf(allowed) + MOVE_EPS\n      )\n        return false;\n      resizeNode(node, wanted, view);\n      return true;\n    });\n    if (result) {\n      current = result;\n      ctx.report.widened++;\n    }\n  }\n  return current;\n}\n\nfunction settle(doc: Doc, metrics: LayoutMetrics, ctx: Context) {\n  let current = { doc, metrics };\n  for (let pass = 0; pass < MAX_PASSES; pass++) {\n    ctx.report.passes++;\n    const next = geometryPass(current.doc, current.metrics, ctx);\n    current = { doc: next.doc, metrics: next.metrics };\n    if (!next.changed) break;\n  }\n  return current;\n}\n\n/** 컨테이너(글을 담은 도형과 그 부모 판)가 옛 상자를 포함한 채 남았나 — 이 후보의 불변식이다. */\nexport function containersStayPut(\n  before: Doc,\n  after: Doc,\n  containers: TextContainerAssignments,\n  containerParents: ContainerParentAssignments,\n  decorations: DecorationBindings,\n): boolean {\n  const ids = new Set<string>();\n  for (const id of [...containers.values(), ...containerParents.values()]) {\n    const valid = validContainerOf(id);\n    if (valid && !decorations.has(valid)) ids.add(valid);\n  }\n  const was = absBoxMap(before);\n  const now = absBoxMap(after);\n  for (const id of ids) {\n    const a = was.get(id);\n    const b = now.get(id);\n    if (a && b && !contains(b, a)) return false;\n  }\n  return true;\n}\n\n/**\n * 간소 재배치 본체 — 문서와 리포트를 함께 돌려준다. `(input, run)` 의 순수 함수다.\n *\n * `run.base` 는 좌표계를 맞춘 원안이다. `run.baseTight` 가 있으면 합성 자가 노드별 리딩을\n * 배우고, `run.tight`(입력을 한 번 잰 값)가 있으면 그대로인 노드가 그 값을 물려받는다.\n */\nexport function runSimpleRelayout(\n  input: Doc,\n  run: SimpleRelayoutContext = {},\n): { doc: Doc; report: SimpleRelayoutReport } {\n  const report: SimpleRelayoutReport = {\n    passes: 0,\n    moved: 0,\n    grown: 0,\n    shrunk: 0,\n    widened: 0,\n    rejected: 0,\n    remaining: { overflowNodes: 0, newOverlapPairs: 0, clippedTextNodes: 0 },\n    revertedToInput: false,\n  };\n  const base = run.base ?? input;\n  const byRlsc = run.rlsc\n    ? buildRlscContainerAssignments(base, run.rlsc)\n    : null;\n  if (byRlsc) report.rlsc = byRlsc.report;\n  const rawContainers =\n    byRlsc?.containers ?? run.containers ?? buildTextContainerAssignments(base);\n  const ruler = createSyntheticRuler({\n    preserveFlowOverflow: true,\n    base,\n    baseTight: run.baseTight,\n    input,\n    inputTight: run.tight,\n  });\n  const baseTight = run.baseTight ?? ruler(base);\n  const { containers, supports } = authoredSupportAssignments(\n    base,\n    baseTight,\n    rawContainers,\n    run.outlines,\n  );\n  const containerParents = new Map(\n    buildContainerParentAssignments(base, containers),\n  );\n  // Keep supplied parent intent for unaffected owners; changed owners need fresh geometry.\n  const changedOwners = new Set<string>();\n  for (const [id, owner] of containers)\n    if (owner !== rawContainers.get(id)) {\n      changedOwners.add(owner);\n      const previous = rawContainers.get(id);\n      if (previous) changedOwners.add(previous);\n    }\n  for (const [id, parent] of byRlsc?.containerParents ??\n    run.containerParents ??\n    [])\n    if (!changedOwners.has(id)) containerParents.set(id, parent);\n  const decorations =\n    (byRlsc ? undefined : run.decorations) ??\n    classifyDecorations(base, containers);\n  const safety =\n    run.safety ??\n    freezeSimpleSafety(\n      input,\n      base,\n      baseTight,\n      containers,\n      supports,\n      decorations,\n      ruler(input),\n      run.outlines,\n      containerParents,\n    );\n  const baseMetrics = computeLayoutMetrics(\n    base,\n    baseTight,\n    undefined,\n    undefined,\n    run.outlines,\n    containers,\n  );\n  console.log(JSON.stringify({kind:'safety',phase:run.phase,badges:[...safety.badges],immovable:[...safety.immovable]}));\n  const ctx: Context = {\n    safety,\n    requireContainer: run.requireContainer,\n    base,\n    containers,\n    // An unconfirmed background is not an independent obstacle. Keep its authored\n    // association even when glyph support (e.g. rotation or a hollow shape) drops it.\n    // This protects movement only; it does not certify bbox-only containment.\n    authoredGraphics: new Set([\n      ...rawContainers.values(),\n      ...buildTextContainerAssignments(base).values(),\n    ]),\n    containerParents,\n    decorations,\n    outlines: run.outlines,\n    ruler,\n    baseTight,\n    baseClipped: new Map(baseMetrics.clipped.map(c => [c.nodeId, c.area])),\n    report,\n  };\n\n  const start = measure(input, ctx);\n  const badges =\n    run.phase === 'shrink'\n      ? { doc: input, metrics: start }\n      : widenBadges(input, start, ctx);\n  const widened =\n    run.phase === 'shrink'\n      ? badges\n      : widenTextFrames(badges.doc, badges.metrics, ctx);\n  let current =\n    run.phase === 'shrink'\n      ? widened\n      : settle(widened.doc, widened.metrics, ctx);\n\n  // 기하로 못 푼 깊은 결함이 남았을 때만 줄인다 — 한 칸 줄이고 다시 푼 판이 나아졌을 때만 받는다.\n  for (; run.phase !== 'expand';) {\n    const targets = shrinkTargets(current.doc, current.metrics, ctx);\n    for (const id of ctx.safety.badges) targets.delete(id);\n    for (const id of ctx.safety.immovable) targets.delete(id);\n    if (ctx.requireContainer)\n      for (const id of targets)\n        if (!validContainerOf(ctx.containers.get(id) ?? '')) targets.delete(id);\n    if (targets.size === 0) break;\n    const step = shrinkStep(current.doc, targets, ctx);\n    if (step.shrunk === 0) break;\n    const committedCounts = {\n      moved: report.moved,\n      grown: report.grown,\n      rejected: report.rejected,\n      passes: report.passes,\n    };\n    const settled = settle(step.doc, measure(step.doc, ctx), ctx);\n    if (\n      !preservesSimpleIntent(\n        settled.doc,\n        safety,\n        ruler(settled.doc),\n        current.doc,\n      ) ||\n      !improves(settled.metrics, current.metrics)\n    ) {\n      Object.assign(report, committedCounts);\n      break;\n    }\n    report.shrunk += step.shrunk;\n    current = settled;\n  }\n\n  // 채택한 고치기가 없으면 입력 그대로다 — 장식도 건드리지 않는다. 제품 렌더러는 상자를 넓히고\n  // 가운데로 옮기면서 장식을 이미 제자리로 옮겨 두는데, 원안 기준으로 다시 붙이면 구분선이 글 쪽으로\n  // 끌려오고 정렬이 흩어진다(c4 회차 실측: 고친 것 0 인 장 13장이 그렇게 판정을 잃었다).\n  if (report.moved + report.grown + report.shrunk + report.widened === 0) {\n    report.remaining = {\n      overflowNodes: start.overflowNodes,\n      newOverlapPairs: start.newOverlapPairs,\n      clippedTextNodes: start.clippedTextNodes,\n    };\n    return { doc: structuredClone(input) as Doc, report };\n  }\n\n  // 키운 변·옮긴 글에 장식을 다시 붙인다. 붙인 판이 나빠지거나 정렬선을 깎으면 붙이기 전 판을 쓴다.\n  let out = current.doc;\n  if (decorations.size > 0) {\n    const decorated = carryDecorations(input, out, decorations, {\n      base,\n      baseTight,\n      containers,\n      afterTight: ruler(out),\n      outlines: run.outlines,\n    });\n    const after = measure(decorated, ctx);\n    if (\n      cropFramesUnchanged(out, decorated) &&\n      preservesSimpleIntent(decorated, safety, ruler(decorated), current.doc) &&\n      simpleMetricsNoWorse(after, current.metrics) &&\n      after.guideKeptRatio >= current.metrics.guideKeptRatio - 1e-6\n    )\n      out = decorated;\n  }\n\n  const final = measure(out, ctx);\n  if (\n    !preservesSimpleIntent(out, safety, ruler(out)) ||\n    !containersStayPut(input, out, containers, containerParents, decorations) ||\n    !simpleMetricsNoWorse(final, start)\n  ) {\n    report.revertedToInput = true;\n    out = structuredClone(input) as Doc;\n  }\n  const last = report.revertedToInput ? start : final;\n  report.remaining = {\n    overflowNodes: last.overflowNodes,\n    newOverlapPairs: last.newOverlapPairs,\n    clippedTextNodes: last.clippedTextNodes,\n  };\n  return { doc: out, report };\n}\n\nexport const simpleRelayout: RelayoutMethod = {\n  key: SIMPLE_RELAYOUT_KEY,\n  label: 'Simple Relayout',\n  description:\n    '렌더 없이 — 넘친 컨테이너만 제자리에서 키우고, 겹치거나 페이지를 벗어난 글을 컨테이너 안에서 비킨 뒤, 남으면 글자를 줄인다',\n  run: (doc, ctx) => runSimpleRelayout(doc, ctx).doc,\n};\n",
      "simpleRelayoutSafety.ts": "import type { Doc, Node } from '@miri-unicorn/miricanvas-iui-color-mapper';\n\nimport type { AbsBox } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/packages/comp-sign/src/comp-match/docLayout';\nimport {\n  ROOT_CONTAINER,\n  TEXT_CONTAINER_TYPES,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/containerAssignment';\nimport {\n  fitRectOf,\n  outlineSupportOf,\n  type CaseOutlines,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/containerShape';\nimport type { BoxView } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/geometry';\nimport { translateNode } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/geometry';\nimport {\n  absBoxMap,\n  judgeBoxOf,\n  type DecorationBindings,\n  type TextContainerAssignments,\n  type TightBoxMap,\n  validContainerOf,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/metrics';\nimport { renderedFontRange } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/renderedFont';\nimport { textBlocksOf } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/textOverflow';\nimport { freezeAuthoredConstraints } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-engine/authored';\nimport {\n  freezeSimpleSpacing,\n  preservesSimpleSpacing,\n} from '/tmp/cb1447-diagnostic/simpleRelayoutSpacing';\nimport type { RelayoutRunContext } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/types';\n\nconst right = (b: AbsBox) => b.left + b.width;\nconst bottom = (b: AbsBox) => b.top + b.height;\nconst area = (b: AbsBox) => b.width * b.height;\nconst intersection = (a: AbsBox, b: AbsBox) =>\n  Math.max(0, Math.min(right(a), right(b)) - Math.max(a.left, b.left)) *\n  Math.max(0, Math.min(bottom(a), bottom(b)) - Math.max(a.top, b.top));\nconst nearContains = (outer: AbsBox, inner: AbsBox) =>\n  area(inner) > 0 && intersection(outer, inner) / area(inner) >= 0.9;\nconst content = (n: Node) =>\n  textBlocksOf(n)\n    .map(b => b.text)\n    .join('\\n')\n    .trim();\nconst supportedShape = (n: Node) =>\n  TEXT_CONTAINER_TYPES.has(n.data.nodeType) && n.data.nodeType !== 'BitmapItem';\n\n/** Freeze geometry and intent once; every candidate is checked against this same input. */\nexport type SimpleSafety = {\n  input: Doc;\n  inputBoxes: Map<string, AbsBox>;\n  originalBoxes: Map<string, AbsBox>;\n  inputTight: TightBoxMap;\n  immovable: Set<string>;\n  supports: Map<string, string>;\n  growable: Set<string>;\n  growableTexts: Set<string>;\n  badges: Set<string>;\n  badgeContainers: Set<string>;\n  roles: string[][];\n  order: Array<{ a: string; b: string; axis: 'x' | 'y'; sign: number }>;\n  attachments: Map<string, string>;\n  spacing: ReturnType<typeof freezeSimpleSpacing>;\n};\n\n/** A smaller authored shape supporting the original glyphs beats a surrounding photograph. */\nexport function authoredSupportAssignments(\n  base: Doc,\n  tight: TightBoxMap,\n  assignments: TextContainerAssignments,\n  outlines?: CaseOutlines,\n): { containers: Map<string, string>; supports: Map<string, string> } {\n  const boxes = absBoxMap(base);\n  const containers = new Map(assignments);\n  const supports = new Map<string, string>();\n  const order = new Map<string, number>();\n  const byId = new Map(base.nodes.map(n => [n.id, n]));\n  const visit = (id: string) => {\n    if (order.has(id)) return;\n    order.set(id, order.size);\n    for (const child of byId.get(id)?.childNodeIds ?? []) visit(child);\n  };\n  for (const id of base.rootNodeIds) visit(id);\n  for (const n of base.nodes) visit(n.id);\n  for (const text of base.nodes) {\n    if (text.data.nodeType !== 'TextItem') continue;\n    const frame = boxes.get(text.id);\n    const ink = frame && (judgeBoxOf(text.id, frame, tight) ?? frame);\n    if (!ink || !content(text)) {\n      containers.set(text.id, ROOT_CONTAINER);\n      continue;\n    }\n    const supportsInk = (node: Node, box: AbsBox) =>\n      nearContains(box, ink) &&\n      (!outlines ||\n        (outlineSupportOf(node.id, outlines).supported &&\n          nearContains(fitRectOf(node, box, ink, outlines), ink)));\n    const rawOwner = assignments.get(text.id) ?? ROOT_CONTAINER;\n    const ownerNode = byId.get(rawOwner);\n    const ownerBox = boxes.get(rawOwner);\n    const ownerSupported =\n      ownerNode &&\n      ownerBox &&\n      (order.get(rawOwner) ?? Infinity) < (order.get(text.id) ?? -1) &&\n      TEXT_CONTAINER_TYPES.has(ownerNode.data.nodeType) &&\n      supportsInk(ownerNode, ownerBox);\n    const current = ownerSupported ? ownerBox : undefined;\n    if (!ownerSupported) containers.set(text.id, ROOT_CONTAINER);\n    const choices = base.nodes\n      .filter(n => {\n        const b = boxes.get(n.id);\n        return (\n          supportedShape(n) &&\n          b &&\n          (order.get(n.id) ?? Infinity) < (order.get(text.id) ?? -1) &&\n          supportsInk(n, b) &&\n          (!current || area(b) <= area(current))\n        );\n      })\n      .sort((a, b) => area(boxes.get(a.id)!) - area(boxes.get(b.id)!));\n    const support = choices[0];\n    if (support) {\n      containers.set(text.id, support.id);\n      supports.set(text.id, support.id);\n    }\n  }\n  return { containers, supports };\n}\n\nexport function freezeSimpleSafety(\n  input: Doc,\n  base: Doc,\n  tight: TightBoxMap,\n  containers: TextContainerAssignments,\n  supports: Map<string, string>,\n  decorations: DecorationBindings,\n  inputTight: TightBoxMap,\n  outlines?: CaseOutlines,\n  containerParents?: RelayoutRunContext['containerParents'],\n): SimpleSafety {\n  const original = absBoxMap(base);\n  const inputBoxes = absBoxMap(input);\n  const byId = new Map(base.nodes.map(n => [n.id, n]));\n  const texts = base.nodes.filter(n => n.data.nodeType === 'TextItem');\n  const immovable = new Set(\n    input.nodes\n      .filter(n => n.data.nodeType === 'TextItem')\n      .filter(n => !validContainerOf(containers.get(n.id) ?? 'rootContainer'))\n      .map(n => n.id),\n  );\n  const growable = new Set<string>();\n  const growableTexts = new Set<string>();\n  const badges = new Set<string>();\n  const badgeContainers = new Set<string>();\n  const attachments = new Map<string, string>();\n  for (const [id, decoration] of decorations)\n    if (decoration.kind === 'text') attachments.set(id, decoration.ownerId);\n  for (const t of texts) {\n    const frame = original.get(t.id);\n    const ink = frame && (judgeBoxOf(t.id, frame, tight) ?? frame);\n    const owner = validContainerOf(containers.get(t.id) ?? '');\n    const box = owner ? original.get(owner) : undefined;\n    if (\n      box &&\n      ink &&\n      nearContains(box, ink) &&\n      (!outlines ||\n        (outlineSupportOf(owner!, outlines).supported &&\n          nearContains(fitRectOf(byId.get(owner!)!, box, ink, outlines), ink)))\n    ) {\n      growable.add(owner!);\n      growableTexts.add(t.id);\n    }\n    const inputText = input.nodes.find(n => n.id === t.id);\n    if (\n      /^\\d{1,3}$/.test(content(t)) &&\n      inputText &&\n      /^\\d{1,3}$/.test(content(inputText)) &&\n      box &&\n      frame &&\n      Math.max(box.width, box.height) <=\n        Math.max(1, renderedFontRange(t).minimum ?? 0) * 6 &&\n      box.width / box.height >= 0.6 &&\n      box.width / box.height <= 1.7\n    ) {\n      badges.add(t.id);\n      badgeContainers.add(owner!);\n    }\n    // A highlight/underline that intersects the original text is attached decoration,\n    // even when generic decoration classification mistakes it for the text's container.\n    if (!frame) continue;\n    const font = renderedFontRange(t).minimum ?? 0;\n    for (const n of base.nodes) {\n      const b = original.get(n.id);\n      if (\n        !supportedShape(n) ||\n        !b ||\n        supports.get(t.id) === n.id ||\n        b.height > font * 1.2 ||\n        b.width < frame.width * 0.5 ||\n        b.width > frame.width * 1.4 ||\n        intersection(b, frame) <= 1\n      )\n        continue;\n      if (!attachments.has(n.id)) attachments.set(n.id, t.id);\n    }\n  }\n  for (const id of badgeContainers) growable.delete(id);\n  // Reuse authored grid/role correspondence, then cover conservative unhosted number rows.\n  const roles = freezeAuthoredConstraints(base, {\n    containers,\n    baseTight: tight,\n  })\n    .groups.flatMap(g => g.roles.map(r => r.ids))\n    .filter(ids => ids.length > 1);\n  const numbered = texts.filter(\n    n => /^\\d+$/.test(content(n)) && !badges.has(n.id),\n  );\n  for (const axis of ['x', 'y'] as const) {\n    const buckets: string[][] = [];\n    for (const n of numbered) {\n      const b = original.get(n.id);\n      const font = renderedFontRange(n).minimum ?? 0;\n      if (!b || !font) continue;\n      const bucket = buckets.find(ids => {\n        const peer = byId.get(ids[0]!)!;\n        const p = original.get(peer.id)!;\n        return (\n          Math.abs(axis === 'x' ? b.top - p.top : b.left - p.left) <=\n            Math.max(3, font * 0.15) &&\n          Math.max(font, renderedFontRange(peer).minimum ?? 0) /\n            Math.min(font, renderedFontRange(peer).minimum ?? Infinity) <=\n            1.05 &&\n          Math.max(b.width, p.width) / Math.min(b.width, p.width) <= 1.1\n        );\n      });\n      if (bucket) bucket.push(n.id);\n      else buckets.push([n.id]);\n    }\n    for (const ids of buckets) if (ids.length >= 3) roles.push(ids);\n  }\n  const order: SimpleSafety['order'] = [];\n  for (let i = 0; i < texts.length; i++)\n    for (let j = i + 1; j < texts.length; j++) {\n      const a = original.get(texts[i]!.id),\n        b = original.get(texts[j]!.id);\n      if (!a || !b) continue;\n      const crossX = Math.min(right(a), right(b)) - Math.max(a.left, b.left);\n      const crossY = Math.min(bottom(a), bottom(b)) - Math.max(a.top, b.top);\n      const axis =\n        crossX > Math.min(a.width, b.width) * 0.3 && Math.abs(a.top - b.top) > 3\n          ? 'y'\n          : crossY > Math.min(a.height, b.height) * 0.3 &&\n              Math.abs(a.left - b.left) > 3\n            ? 'x'\n            : null;\n      if (axis)\n        order.push({\n          a: texts[i]!.id,\n          b: texts[j]!.id,\n          axis,\n          sign: Math.sign(axis === 'x' ? b.left - a.left : b.top - a.top),\n        });\n    }\n  return {\n    input,\n    inputBoxes,\n    originalBoxes: original,\n    inputTight,\n    immovable,\n    supports,\n    growable,\n    growableTexts,\n    badges,\n    badgeContainers,\n    roles,\n    order,\n    attachments,\n    spacing: freezeSimpleSpacing(base, {\n      containers,\n      containerParents,\n      decorations,\n      baseTight: tight,\n      outlines,\n    }).filter(e => e.terms.every(t => inputBoxes.has(t.id))),\n  };\n}\n\n/** Carry the attached geometry in the same candidate, so acceptance cannot leave it behind. */\nexport function followTextMoves(\n  before: Doc,\n  view: BoxView,\n  safety: SimpleSafety,\n): void {\n  const was = absBoxMap(before);\n  for (const [id, owner] of safety.attachments) {\n    const a = was.get(owner),\n      b = view.abs.get(owner);\n    const node = view.byId.get(id);\n    const originalOwner = safety.originalBoxes.get(owner),\n      originalDeco = safety.originalBoxes.get(id);\n    const decoBefore = was.get(id);\n    if (a && b && node) {\n      // Replacement may already have detached an icon. A text move that repairs its\n      // original attachment can leave that icon in place instead of preserving the damage.\n      if (originalOwner && originalDeco && decoBefore) {\n        const error = (ownerBox: AbsBox) =>\n          Math.hypot(\n            decoBefore.left -\n              ownerBox.left -\n              (originalDeco.left - originalOwner.left),\n            decoBefore.top -\n              ownerBox.top -\n              (originalDeco.top - originalOwner.top),\n          );\n        if (error(b) < error(a) - 0.5) continue;\n      }\n      translateNode(node, b.left - a.left, b.top - a.top, view);\n    }\n  }\n}\n\n/** Geometry metrics alone cannot license changing authored identity or reading order. */\nexport function preservesSimpleIntent(\n  after: Doc,\n  safety: SimpleSafety,\n  tight: TightBoxMap,\n  previous: Doc = safety.input,\n): boolean {\n  if (!preservesSimpleSpacing(after, previous, safety.spacing)) { console.log(JSON.stringify({kind:'intent-reject',line:330})); return false; }\n  const now = absBoxMap(after);\n  const inputNodes = new Map(safety.input.nodes.map(n => [n.id, n]));\n  for (const n of after.nodes) {\n    if (n.data.nodeType !== 'TextItem') continue;\n    const a = safety.inputBoxes.get(n.id),\n      b = now.get(n.id);\n    if (!a || !b) { console.log(JSON.stringify({kind:'intent-reject',line:337})); return false; }\n    if (\n      safety.immovable.has(n.id) &&\n      (Math.abs(a.left - b.left) > 1e-6 ||\n        Math.abs(a.top - b.top) > 1e-6 ||\n        Math.abs(a.width - b.width) > 1e-6 ||\n        Math.abs(a.height - b.height) > 1e-6 ||\n        JSON.stringify(n.data.props.text) !==\n          JSON.stringify(inputNodes.get(n.id)?.data.props.text))\n    )\n      { console.log(JSON.stringify({kind:'intent-reject',line:347})); return false; }\n    const font = renderedFontRange(inputNodes.get(n.id)).minimum ?? 0;\n    // Per-input cumulative budget, not a per-pass allowance; scales with type, capped at 64px.\n    const limit = Math.min(64, Math.max(24, font * 3));\n    if (Math.hypot(b.left - a.left, b.top - a.top) > limit + 0.5) { console.log(JSON.stringify({kind:'intent-reject',line:351})); return false; }\n    if (\n      safety.badges.has(n.id) &&\n      Math.abs(\n        (renderedFontRange(n).minimum ?? 0) -\n          (renderedFontRange(inputNodes.get(n.id)).minimum ?? 0),\n      ) > 1e-3\n    )\n      { console.log(JSON.stringify({kind:'intent-reject',line:359})); return false; }\n    const supportId = safety.supports.get(n.id);\n    const support = supportId && now.get(supportId);\n    const oldSupport = supportId && safety.inputBoxes.get(supportId);\n    if (support && oldSupport) {\n      // Existing replacement spill can remain, but no edit may abandon more of its support.\n      const error = (box: AbsBox, host: AbsBox) =>\n        Math.max(0, host.left - box.left, right(box) - right(host)) +\n        Math.max(0, host.top - box.top, bottom(box) - bottom(host));\n      const beforeInk = judgeBoxOf(n.id, a, safety.inputTight) ?? a;\n      const afterInk = judgeBoxOf(n.id, b, tight) ?? b;\n      if (error(afterInk, support) > error(beforeInk, oldSupport) + 0.5)\n        { console.log(JSON.stringify({kind:'intent-reject',line:371})); return false; }\n    }\n  }\n  for (const relation of safety.order) {\n    const a = now.get(relation.a),\n      b = now.get(relation.b);\n    const ia = safety.inputBoxes.get(relation.a),\n      ib = safety.inputBoxes.get(relation.b);\n    if (!a || !b || !ia || !ib) continue;\n    const delta = (x: AbsBox, y: AbsBox) =>\n      relation.axis === 'x' ? y.left - x.left : y.top - x.top;\n    if (\n      relation.sign * delta(a, b) <\n      Math.min(0, relation.sign * delta(ia, ib)) - 0.5\n    )\n      { console.log(JSON.stringify({kind:'intent-reject',line:386})); return false; }\n  }\n  for (const [id, owner] of safety.attachments) {\n    const a = safety.inputBoxes.get(owner),\n      b = now.get(owner);\n    const da = safety.inputBoxes.get(id),\n      db = now.get(id);\n    if (\n      a &&\n      b &&\n      da &&\n      db &&\n      Math.hypot(\n        b.left - a.left - (db.left - da.left),\n        b.top - a.top - (db.top - da.top),\n      ) > 0.5\n    ) {\n      const oa = safety.originalBoxes.get(owner),\n        od = safety.originalBoxes.get(id);\n      if (!oa || !od) { console.log(JSON.stringify({kind:'intent-reject',line:405})); return false; }\n      const error = (ownerBox: AbsBox, decoBox: AbsBox) =>\n        Math.hypot(\n          decoBox.left - ownerBox.left - (od.left - oa.left),\n          decoBox.top - ownerBox.top - (od.top - oa.top),\n        );\n      if (!(error(b, db) < error(a, da) - 0.5)) { console.log(JSON.stringify({kind:'intent-reject',line:411})); return false; }\n    }\n  }\n  for (const id of safety.badgeContainers) {\n    const a = safety.inputBoxes.get(id),\n      b = now.get(id);\n    if (\n      a &&\n      b &&\n      Math.abs(a.left - b.left) +\n        Math.abs(a.top - b.top) +\n        Math.abs(a.width - b.width) +\n        Math.abs(a.height - b.height) >\n        0.5\n    )\n      { console.log(JSON.stringify({kind:'intent-reject',line:426})); return false; }\n  }\n  return true;\n}\n",
      "simpleRelayoutSpacing.ts": "/** Reuse the authored slot model for simple clearance bounds, without Adaptive's projection.\n * Padding is measured around the union of direct child slots, never around glyph ink.\n * Simple preserves minimum clearance; it does not restore exact Adaptive gap equalities,\n * repeated sizes or page centering (which could translate containers).\n */\nimport type { Doc } from '@miri-unicorn/miricanvas-iui-color-mapper';\n\nimport type { AbsBox } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/packages/comp-sign/src/comp-match/docLayout';\nimport { GUIDE_TOL } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/metrics';\nimport {\n  authoredBoxMap,\n  buildAuthoredLayoutModel,\n  equationError,\n  type LayoutEquation,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/authoredLayoutConstraints';\nimport type { RelayoutRunContext } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/types';\n\nexport function freezeSimpleSpacing(\n  base: Doc,\n  ctx: RelayoutRunContext,\n): LayoutEquation[] {\n  return buildAuthoredLayoutModel(base, ctx)\n    .equations.filter(\n      e =>\n        e.kind === 'padding' ||\n        (e.kind === 'margin' && e.id.startsWith('margin:')) ||\n        (e.kind === 'gap' && e.id.startsWith('gap:')),\n    )\n    .map(e => ({ ...e, minimum: true }));\n}\n\nexport function simplePaddingOf(\n  spacing: readonly LayoutEquation[],\n  id: string,\n  host: string,\n) {\n  const padding = { left: 0, top: 0, right: 0, bottom: 0 };\n  for (const side of ['left', 'top', 'right', 'bottom'] as const) {\n    const equation = spacing.find(\n      e => e.id === `padding:${host}:${id}:${side}`,\n    );\n    padding[side] = Math.max(0, equation?.value ?? 0);\n  }\n  return padding;\n}\n\n/** Outward bounds for one slot while all peers stay where they are. Intersect with the\n * silhouette separately. GUIDE_TOL is never additional candidate capacity.\n */\nexport function simpleSpacingBounds(\n  id: string,\n  boxes: ReadonlyMap<string, AbsBox>,\n  spacing: readonly LayoutEquation[],\n  region: AbsBox,\n): AbsBox {\n  let left = region.left,\n    top = region.top;\n  let right = left + region.width,\n    bottom = top + region.height;\n  for (const equation of spacing) {\n    const own = equation.terms.filter(t => t.id === id);\n    if (!own.length) continue;\n    let rest = 0;\n    let missing = false;\n    for (const term of equation.terms) {\n      if (term.id === id) continue;\n      const box = boxes.get(term.id);\n      if (!box) {\n        missing = true;\n        break;\n      }\n      rest += term.coefficient * box[term.key];\n    }\n    if (missing) continue;\n    const coefficient = (key: string) =>\n      own.filter(t => t.key === key).reduce((sum, t) => sum + t.coefficient, 0);\n    for (const [start, size] of [\n      ['left', 'width'],\n      ['top', 'height'],\n    ] as const) {\n      if (own.some(t => t.key !== start && t.key !== size)) continue;\n      const c = coefficient(start),\n        extent = coefficient(size);\n      if (c > 0 && extent === 0) {\n        const boundary = (equation.value - rest) / c;\n        if (start === 'left') left = Math.max(left, boundary);\n        else top = Math.max(top, boundary);\n      } else if (c < 0 && extent === c) {\n        const boundary = (equation.value - rest) / c;\n        if (start === 'left') right = Math.min(right, boundary);\n        else bottom = Math.min(bottom, boundary);\n      }\n    }\n  }\n  return {\n    left,\n    top,\n    width: Math.max(0, right - left),\n    height: Math.max(0, bottom - top),\n  };\n}\n\n/** Existing input defects may remain or improve; compare every step to its last accepted\n * document so a partial repair cannot be spent again by a later phase.\n */\nexport function preservesSimpleSpacing(\n  after: Doc,\n  before: Doc,\n  spacing: readonly LayoutEquation[],\n): boolean {\n  const previous = authoredBoxMap(before),\n    next = authoredBoxMap(after);\n  return spacing.every(e => {\n    const error = equationError(e, next);\n    if (!(Number.isFinite(error) && error<=Math.max(GUIDE_TOL,equationError(e,previous))+1e-6)) console.log(JSON.stringify({kind:'spacing-reject',equation:e.id,error,before:equationError(e,previous),tolerance:GUIDE_TOL}));\n    return (\n      Number.isFinite(error) &&\n      error <= Math.max(GUIDE_TOL, equationError(e, previous)) + 1e-6\n    );\n  });\n}\n",
      "simpleRelayoutVerified-bypass.ts": "/** Cache-fed expansion/shrink with predicted safety checks; no candidate render. */\nimport type { Doc } from '@miri-unicorn/miricanvas-iui-color-mapper';\n\nimport { hasUsableContainerSilhouette } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/containerShape';\nimport {\n  absBoxMap,\n  buildContainerParentAssignments,\n  buildTextContainerAssignments,\n  classifyDecorations,\n  computeLayoutMetrics,\n  type LayoutMetrics,\n  type TightBoxMap,\n  validContainerOf,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/metrics';\nimport { renderedFontRange } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/renderedFont';\nimport { buildRlscContainerAssignments } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/rlscAssignments';\nimport { createSyntheticRuler } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/syntheticTight';\nimport { EXCESSIVE_FONT_SCALE } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/verdict';\nimport { PAGE_MIN_FONT_RATIO } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/shrinkFontToReadableFloor';\nimport {\n  containersStayPut,\n  runSimpleRelayout,\n  simpleMetricsNoWorse,\n  type SimpleRelayoutContext,\n} from '/tmp/cb1447-diagnostic/simpleRelayout-bypass';\nimport {\n  authoredSupportAssignments,\n  freezeSimpleSafety,\n  preservesSimpleIntent,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/simpleRelayoutSafety';\n\nexport type SimpleResidualReason =\n  | 'measurement-unavailable'\n  | 'outline-unavailable'\n  | 'container-unresolved'\n  | 'available-area-exhausted'\n  | 'font-floor-reached';\nexport type SimpleVerifiedReport = {\n  /** Status describes predicted geometry, never a render-verified result. */\n  basis: 'predicted';\n  status: 'resolved' | 'unresolved' | 'unavailable';\n  issues: Array<{ nodeId: string; reason: SimpleResidualReason }>;\n  rejected: Array<{\n    phase: 'expand' | 'shrink';\n    reason: 'measurement-unavailable' | 'worse';\n  }>;\n  /** Input preparation calls only, not necessarily renderer calls. Candidates never call it. */\n  measurementRequests: number;\n};\n\ntype Options = SimpleRelayoutContext & {\n  probe?: (doc: Doc) => Promise<TightBoxMap | null>;\n  /** Legacy callback name: exposes a checkpoint accepted by predicted safety checks. */\n  onVerified?: (doc: Doc, tight: TightBoxMap) => void;\n};\n\nfunction missingMeasurements(doc: Doc, tight?: TightBoxMap | null) {\n  return doc.nodes\n    .filter(\n      node =>\n        node.data.nodeType === 'TextItem' &&\n        (() => {\n          const box = tight?.[node.id];\n          return (\n            !box ||\n            (box.status !== 'empty' &&\n              !(\n                box.status === 'ok' &&\n                [box.left, box.top, box.width, box.height].every(\n                  Number.isFinite,\n                ) &&\n                box.width > 0 &&\n                box.height > 0\n              ))\n          );\n        })(),\n    )\n    .map(node => node.id);\n}\n\n/** Per-node and per-pair checks prevent trading a new defect for an unrelated improvement. */\nexport function actualSimpleNoWorse(\n  next: LayoutMetrics,\n  previous: LayoutMetrics,\n): boolean {\n  if (!simpleMetricsNoWorse(next, previous)) return false;\n  const nodes = new Map(previous.nodes.map(n => [n.nodeId, n]));\n  if (\n    next.nodes.some(\n      n =>\n        n.overflow.area > (nodes.get(n.nodeId)?.overflow.area ?? 0) + 1 ||\n        n.frameSpill > Math.max(2, nodes.get(n.nodeId)?.frameSpill ?? 0) + 0.5,\n    )\n  )\n    return false;\n  const pairKey = (a: string, b: string) => JSON.stringify([a, b].sort());\n  const pairs = new Map(\n    previous.overlaps.map(p => [pairKey(p.a, p.b), p.area]),\n  );\n  if (next.overlaps.some(p => p.area > (pairs.get(pairKey(p.a, p.b)) ?? 0) + 1))\n    return false;\n  const clips = new Map(previous.clipped.map(c => [c.nodeId, c.area]));\n  return next.clipped.every(c => c.area <= (clips.get(c.nodeId) ?? 0) + 1);\n}\n\n/** Legacy entry point name retained for callers; validation now uses predicted glyph bounds. */\nexport async function runSimpleRelayoutVerified(\n  input: Doc,\n  options: Options = {},\n) {\n  const report: SimpleVerifiedReport = {\n    basis: 'predicted',\n    status: 'unavailable',\n    issues: [],\n    rejected: [],\n    measurementRequests: 0,\n  };\n  const base = options.base ?? input;\n  const cache = new Map<string, Promise<TightBoxMap | null>>();\n  const read = async (doc: Doc) => {\n    if (!options.probe) return null;\n    const key = JSON.stringify(doc);\n    let pending = cache.get(key);\n    if (!pending) {\n      report.measurementRequests++;\n      pending = Promise.resolve()\n        .then(() => options.probe?.(doc) ?? null)\n        .catch(error => {\n          if (error instanceof Error && error.name === 'AbortError')\n            throw error;\n          return null;\n        });\n      cache.set(key, pending);\n    }\n    return pending;\n  };\n  // A supplied partial map means its miss was already attempted by the input reader.\n  let tight = options.tight ?? (await read(input));\n  const baseTight =\n    options.baseTight ?? (base === input ? tight : await read(base));\n  const missing = new Set([\n    ...missingMeasurements(input, tight),\n    ...missingMeasurements(base, baseTight),\n  ]);\n  if (missing.size) {\n    report.issues = [...missing].map(nodeId => ({\n      nodeId,\n      reason: 'measurement-unavailable',\n    }));\n    return { doc: input, tight, report };\n  }\n  tight ??= {};\n  const outlines = options.outlines;\n  const raw = options.rlsc\n    ? buildRlscContainerAssignments(base, options.rlsc).containers\n    : (options.containers ?? buildTextContainerAssignments(base));\n  const baseNodes = new Map(base.nodes.map(node => [node.id, node]));\n  const baseBoxes = absBoxMap(base);\n  const trusted = (id: string) => {\n    const node = baseNodes.get(id),\n      box = baseBoxes.get(id);\n    return !!node && !!box && hasUsableContainerSilhouette(node, box, outlines);\n  };\n  const unsupported = [...raw].filter(\n    ([, id]) => validContainerOf(id) && !trusted(id),\n  );\n  if (unsupported.length) {\n    report.issues = unsupported.map(([nodeId]) => ({\n      nodeId,\n      reason: 'outline-unavailable',\n    }));\n    return { doc: input, tight, report };\n  }\n  // Prevent authoredSupportAssignments from discovering a bbox-only shape behind a text.\n  const checkedOutlines = outlines\n    ? structuredClone(outlines)\n    : {\n        version: 2 as const,\n        nodes: {},\n        resources: {},\n        quality: { nodes: {}, resources: {} },\n      };\n  if (checkedOutlines.quality?.nodes)\n    for (const [id, quality] of Object.entries(checkedOutlines.quality.nodes))\n      if (!trusted(id))\n        checkedOutlines.quality.nodes[id] = {\n          ...quality,\n          status: 'unsupported',\n        };\n  const { containers, supports } = authoredSupportAssignments(\n    base,\n    baseTight!,\n    raw,\n    checkedOutlines,\n  );\n  const decorations =\n    options.decorations ?? classifyDecorations(base, containers);\n  const parents = buildContainerParentAssignments(base, containers);\n  const safety = freezeSimpleSafety(\n    input,\n    base,\n    baseTight!,\n    containers,\n    supports,\n    decorations,\n    tight!,\n    checkedOutlines,\n    parents,\n  );\n  const silhouettesAvailable = (candidate: Doc) => {\n    const boxes = absBoxMap(candidate);\n    const nodes = new Map(candidate.nodes.map(node => [node.id, node]));\n    return [...containers.values()].every(\n      id =>\n        !validContainerOf(id) ||\n        (!!nodes.get(id) &&\n          !!boxes.get(id) &&\n          hasUsableContainerSilhouette(\n            nodes.get(id)!,\n            boxes.get(id)!,\n            checkedOutlines,\n          )),\n    );\n  };\n  if (!silhouettesAvailable(input)) {\n    const boxes = absBoxMap(input),\n      nodes = new Map(input.nodes.map(node => [node.id, node]));\n    report.issues = [...containers]\n      .filter(\n        ([, id]) =>\n          validContainerOf(id) &&\n          (!nodes.get(id) ||\n            !boxes.get(id) ||\n            !hasUsableContainerSilhouette(\n              nodes.get(id)!,\n              boxes.get(id)!,\n              checkedOutlines,\n            )),\n      )\n      .map(([nodeId]) => ({ nodeId, reason: 'outline-unavailable' }));\n    return { doc: input, tight, report };\n  }\n  const metricsOf = (doc: Doc, boxes: TightBoxMap) =>\n    computeLayoutMetrics(\n      doc,\n      boxes,\n      base,\n      baseTight!,\n      checkedOutlines,\n      containers,\n    );\n  let doc = input;\n  let metrics = metricsOf(doc, tight!);\n  // Anchor predictions to measured inputs, never feed a prediction back as a new measurement.\n  const ruler = createSyntheticRuler({\n    preserveFlowOverflow: true,\n    base,\n    baseTight: baseTight!,\n    input,\n    inputTight: tight,\n  });\n  for (const phase of ['expand', 'shrink'] as const) {\n    const candidate = runSimpleRelayout(doc, {\n      ...options,\n      base,\n      baseTight: baseTight!,\n      tight: tight!,\n      containers,\n      containerParents: parents,\n      decorations,\n      outlines: checkedOutlines,\n      phase,\n      safety,\n      requireContainer: true,\n    }).doc;\n    console.log(JSON.stringify({kind:'phase',phase,changed:JSON.stringify(candidate)!==JSON.stringify(doc)}));\n    if (JSON.stringify(candidate) === JSON.stringify(doc)) continue;\n    const predicted = ruler(candidate);\n    const after = metricsOf(candidate, predicted);\n    if (\n      !silhouettesAvailable(candidate) ||\n      !actualSimpleNoWorse(after, metrics) ||\n      !preservesSimpleIntent(candidate, safety, predicted, doc) ||\n      !containersStayPut(input, candidate, containers, parents, decorations)\n    ) {\n      report.rejected.push({ phase, reason: 'worse' });\n      continue;\n    }\n    doc = candidate;\n    tight = predicted;\n    metrics = after;\n    options.onVerified?.(doc, tight!);\n  }\n  const affected = new Set(\n    metrics.nodes\n      .filter(n => n.overflow.area > 1 || n.frameSpill > 2)\n      .map(n => n.nodeId),\n  );\n  for (const pair of metrics.overlaps)\n    if (pair.area > pair.baseArea + 1) {\n      affected.add(pair.a);\n      affected.add(pair.b);\n    }\n  for (const clip of metrics.clipped)\n    if (clip.isText) affected.add(clip.nodeId);\n  const byId = new Map(doc.nodes.map(n => [n.id, n]));\n  for (const nodeId of affected) {\n    const node = byId.get(nodeId);\n    if (node?.data.nodeType !== 'TextItem') continue;\n    const original = base.nodes.find(n => n.id === nodeId);\n    const floor = Math.max(\n      (renderedFontRange(original).minimum ?? 0) * EXCESSIVE_FONT_SCALE,\n      doc.height * PAGE_MIN_FONT_RATIO,\n    );\n    report.issues.push({\n      nodeId,\n      reason: !validContainerOf(containers.get(nodeId) ?? '')\n        ? 'container-unresolved'\n        : (renderedFontRange(node).minimum ?? Infinity) <= floor + 1e-3\n          ? 'font-floor-reached'\n          : 'available-area-exhausted',\n    });\n  }\n  report.status =\n    report.issues.length ||\n    metrics.separatorViolations ||\n    metrics.brokenLineConnections\n      ? 'unresolved'\n      : 'resolved';\n  return { doc, tight, report };\n}\n",
      "simpleRelayoutVerified.ts": "/** Cache-fed expansion/shrink with predicted safety checks; no candidate render. */\nimport type { Doc } from '@miri-unicorn/miricanvas-iui-color-mapper';\n\nimport { hasUsableContainerSilhouette } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/containerShape';\nimport {\n  absBoxMap,\n  buildContainerParentAssignments,\n  buildTextContainerAssignments,\n  classifyDecorations,\n  computeLayoutMetrics,\n  type LayoutMetrics,\n  type TightBoxMap,\n  validContainerOf,\n} from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/metrics';\nimport { renderedFontRange } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/renderedFont';\nimport { buildRlscContainerAssignments } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/rlscAssignments';\nimport { createSyntheticRuler } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/syntheticTight';\nimport { EXCESSIVE_FONT_SCALE } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-core/verdict';\nimport { PAGE_MIN_FONT_RATIO } from '/Users/miridih/Documents/miricanvas-iui-simple-relayout/src/post-replace-relayout/relayout-methods/shrinkFontToReadableFloor';\nimport {\n  containersStayPut,\n  runSimpleRelayout,\n  simpleMetricsNoWorse,\n  type SimpleRelayoutContext,\n} from '/tmp/cb1447-diagnostic/simpleRelayout';\nimport {\n  authoredSupportAssignments,\n  freezeSimpleSafety,\n  preservesSimpleIntent,\n} from '/tmp/cb1447-diagnostic/simpleRelayoutSafety';\n\nexport type SimpleResidualReason =\n  | 'measurement-unavailable'\n  | 'outline-unavailable'\n  | 'container-unresolved'\n  | 'available-area-exhausted'\n  | 'font-floor-reached';\nexport type SimpleVerifiedReport = {\n  /** Status describes predicted geometry, never a render-verified result. */\n  basis: 'predicted';\n  status: 'resolved' | 'unresolved' | 'unavailable';\n  issues: Array<{ nodeId: string; reason: SimpleResidualReason }>;\n  rejected: Array<{\n    phase: 'expand' | 'shrink';\n    reason: 'measurement-unavailable' | 'worse';\n  }>;\n  /** Input preparation calls only, not necessarily renderer calls. Candidates never call it. */\n  measurementRequests: number;\n};\n\ntype Options = SimpleRelayoutContext & {\n  probe?: (doc: Doc) => Promise<TightBoxMap | null>;\n  /** Legacy callback name: exposes a checkpoint accepted by predicted safety checks. */\n  onVerified?: (doc: Doc, tight: TightBoxMap) => void;\n};\n\nfunction missingMeasurements(doc: Doc, tight?: TightBoxMap | null) {\n  return doc.nodes\n    .filter(\n      node =>\n        node.data.nodeType === 'TextItem' &&\n        (() => {\n          const box = tight?.[node.id];\n          return (\n            !box ||\n            (box.status !== 'empty' &&\n              !(\n                box.status === 'ok' &&\n                [box.left, box.top, box.width, box.height].every(\n                  Number.isFinite,\n                ) &&\n                box.width > 0 &&\n                box.height > 0\n              ))\n          );\n        })(),\n    )\n    .map(node => node.id);\n}\n\n/** Per-node and per-pair checks prevent trading a new defect for an unrelated improvement. */\nexport function actualSimpleNoWorse(\n  next: LayoutMetrics,\n  previous: LayoutMetrics,\n): boolean {\n  if (!simpleMetricsNoWorse(next, previous)) return false;\n  const nodes = new Map(previous.nodes.map(n => [n.nodeId, n]));\n  if (\n    next.nodes.some(\n      n =>\n        n.overflow.area > (nodes.get(n.nodeId)?.overflow.area ?? 0) + 1 ||\n        n.frameSpill > Math.max(2, nodes.get(n.nodeId)?.frameSpill ?? 0) + 0.5,\n    )\n  )\n    return false;\n  const pairKey = (a: string, b: string) => JSON.stringify([a, b].sort());\n  const pairs = new Map(\n    previous.overlaps.map(p => [pairKey(p.a, p.b), p.area]),\n  );\n  if (next.overlaps.some(p => p.area > (pairs.get(pairKey(p.a, p.b)) ?? 0) + 1))\n    return false;\n  const clips = new Map(previous.clipped.map(c => [c.nodeId, c.area]));\n  return next.clipped.every(c => c.area <= (clips.get(c.nodeId) ?? 0) + 1);\n}\n\n/** Legacy entry point name retained for callers; validation now uses predicted glyph bounds. */\nexport async function runSimpleRelayoutVerified(\n  input: Doc,\n  options: Options = {},\n) {\n  const report: SimpleVerifiedReport = {\n    basis: 'predicted',\n    status: 'unavailable',\n    issues: [],\n    rejected: [],\n    measurementRequests: 0,\n  };\n  const base = options.base ?? input;\n  const cache = new Map<string, Promise<TightBoxMap | null>>();\n  const read = async (doc: Doc) => {\n    if (!options.probe) return null;\n    const key = JSON.stringify(doc);\n    let pending = cache.get(key);\n    if (!pending) {\n      report.measurementRequests++;\n      pending = Promise.resolve()\n        .then(() => options.probe?.(doc) ?? null)\n        .catch(error => {\n          if (error instanceof Error && error.name === 'AbortError')\n            throw error;\n          return null;\n        });\n      cache.set(key, pending);\n    }\n    return pending;\n  };\n  // A supplied partial map means its miss was already attempted by the input reader.\n  let tight = options.tight ?? (await read(input));\n  const baseTight =\n    options.baseTight ?? (base === input ? tight : await read(base));\n  const missing = new Set([\n    ...missingMeasurements(input, tight),\n    ...missingMeasurements(base, baseTight),\n  ]);\n  if (missing.size) {\n    report.issues = [...missing].map(nodeId => ({\n      nodeId,\n      reason: 'measurement-unavailable',\n    }));\n    return { doc: input, tight, report };\n  }\n  tight ??= {};\n  const outlines = options.outlines;\n  const raw = options.rlsc\n    ? buildRlscContainerAssignments(base, options.rlsc).containers\n    : (options.containers ?? buildTextContainerAssignments(base));\n  const baseNodes = new Map(base.nodes.map(node => [node.id, node]));\n  const baseBoxes = absBoxMap(base);\n  const trusted = (id: string) => {\n    const node = baseNodes.get(id),\n      box = baseBoxes.get(id);\n    return !!node && !!box && hasUsableContainerSilhouette(node, box, outlines);\n  };\n  const unsupported = [...raw].filter(\n    ([, id]) => validContainerOf(id) && !trusted(id),\n  );\n  if (unsupported.length) {\n    report.issues = unsupported.map(([nodeId]) => ({\n      nodeId,\n      reason: 'outline-unavailable',\n    }));\n    return { doc: input, tight, report };\n  }\n  // Prevent authoredSupportAssignments from discovering a bbox-only shape behind a text.\n  const checkedOutlines = outlines\n    ? structuredClone(outlines)\n    : {\n        version: 2 as const,\n        nodes: {},\n        resources: {},\n        quality: { nodes: {}, resources: {} },\n      };\n  if (checkedOutlines.quality?.nodes)\n    for (const [id, quality] of Object.entries(checkedOutlines.quality.nodes))\n      if (!trusted(id))\n        checkedOutlines.quality.nodes[id] = {\n          ...quality,\n          status: 'unsupported',\n        };\n  const { containers, supports } = authoredSupportAssignments(\n    base,\n    baseTight!,\n    raw,\n    checkedOutlines,\n  );\n  const decorations =\n    options.decorations ?? classifyDecorations(base, containers);\n  const parents = buildContainerParentAssignments(base, containers);\n  const safety = freezeSimpleSafety(\n    input,\n    base,\n    baseTight!,\n    containers,\n    supports,\n    decorations,\n    tight!,\n    checkedOutlines,\n    parents,\n  );\n  const silhouettesAvailable = (candidate: Doc) => {\n    const boxes = absBoxMap(candidate);\n    const nodes = new Map(candidate.nodes.map(node => [node.id, node]));\n    return [...containers.values()].every(\n      id =>\n        !validContainerOf(id) ||\n        (!!nodes.get(id) &&\n          !!boxes.get(id) &&\n          hasUsableContainerSilhouette(\n            nodes.get(id)!,\n            boxes.get(id)!,\n            checkedOutlines,\n          )),\n    );\n  };\n  if (!silhouettesAvailable(input)) {\n    const boxes = absBoxMap(input),\n      nodes = new Map(input.nodes.map(node => [node.id, node]));\n    report.issues = [...containers]\n      .filter(\n        ([, id]) =>\n          validContainerOf(id) &&\n          (!nodes.get(id) ||\n            !boxes.get(id) ||\n            !hasUsableContainerSilhouette(\n              nodes.get(id)!,\n              boxes.get(id)!,\n              checkedOutlines,\n            )),\n      )\n      .map(([nodeId]) => ({ nodeId, reason: 'outline-unavailable' }));\n    return { doc: input, tight, report };\n  }\n  const metricsOf = (doc: Doc, boxes: TightBoxMap) =>\n    computeLayoutMetrics(\n      doc,\n      boxes,\n      base,\n      baseTight!,\n      checkedOutlines,\n      containers,\n    );\n  let doc = input;\n  let metrics = metricsOf(doc, tight!);\n  // Anchor predictions to measured inputs, never feed a prediction back as a new measurement.\n  const ruler = createSyntheticRuler({\n    preserveFlowOverflow: true,\n    base,\n    baseTight: baseTight!,\n    input,\n    inputTight: tight,\n  });\n  for (const phase of ['expand', 'shrink'] as const) {\n    const candidate = runSimpleRelayout(doc, {\n      ...options,\n      base,\n      baseTight: baseTight!,\n      tight: tight!,\n      containers,\n      containerParents: parents,\n      decorations,\n      outlines: checkedOutlines,\n      phase,\n      safety,\n      requireContainer: true,\n    }).doc;\n    console.log(JSON.stringify({kind:'phase',phase,changed:JSON.stringify(candidate)!==JSON.stringify(doc)}));\n    if (JSON.stringify(candidate) === JSON.stringify(doc)) continue;\n    const predicted = ruler(candidate);\n    const after = metricsOf(candidate, predicted);\n    if (\n      !silhouettesAvailable(candidate) ||\n      !actualSimpleNoWorse(after, metrics) ||\n      !preservesSimpleIntent(candidate, safety, predicted, doc) ||\n      !containersStayPut(input, candidate, containers, parents, decorations)\n    ) {\n      report.rejected.push({ phase, reason: 'worse' });\n      continue;\n    }\n    doc = candidate;\n    tight = predicted;\n    metrics = after;\n    options.onVerified?.(doc, tight!);\n  }\n  const affected = new Set(\n    metrics.nodes\n      .filter(n => n.overflow.area > 1 || n.frameSpill > 2)\n      .map(n => n.nodeId),\n  );\n  for (const pair of metrics.overlaps)\n    if (pair.area > pair.baseArea + 1) {\n      affected.add(pair.a);\n      affected.add(pair.b);\n    }\n  for (const clip of metrics.clipped)\n    if (clip.isText) affected.add(clip.nodeId);\n  const byId = new Map(doc.nodes.map(n => [n.id, n]));\n  for (const nodeId of affected) {\n    const node = byId.get(nodeId);\n    if (node?.data.nodeType !== 'TextItem') continue;\n    const original = base.nodes.find(n => n.id === nodeId);\n    const floor = Math.max(\n      (renderedFontRange(original).minimum ?? 0) * EXCESSIVE_FONT_SCALE,\n      doc.height * PAGE_MIN_FONT_RATIO,\n    );\n    report.issues.push({\n      nodeId,\n      reason: !validContainerOf(containers.get(nodeId) ?? '')\n        ? 'container-unresolved'\n        : (renderedFontRange(node).minimum ?? Infinity) <= floor + 1e-3\n          ? 'font-floor-reached'\n          : 'available-area-exhausted',\n    });\n  }\n  report.status =\n    report.issues.length ||\n    metrics.separatorViolations ||\n    metrics.brokenLineConnections\n      ? 'unresolved'\n      : 'resolved';\n  return { doc, tight, report };\n}\n"
    },
    "source_note": "Frozen cb1447b79; prior c4 CSV harness calls outlinesFromDoc (doc-rectangle), current saved context uses actual outer-envelope for these badges. Other changes coexist; not a full commit bisect."
  },
  "report_recovery": {
    "reason": "Current HTML had 13 old case cards and no .report-version, while its metadata claimed 1.15.0; latest immutable release contains the verified 192-case report. Restored that complete report as the base for a new MINOR release.",
    "unexpected_html_sha256": "446bffabc88d4c9f5ba97fa16f34dd68dcc1be988256eb7e833a31136ed2a33f",
    "unexpected_html_bytes": 3349458,
    "preserved_local_copy": "/tmp/simple-relayout-pre-root-cause-unexpected-13-cases.html",
    "source_release": "archive/releases/visual-summary/simple-relayout-judge/simple-relayout-worse-13/1.15.0.zip",
    "source_release_sha256": "fd126592e2d48086198809e247cdd1b3a46a1a1827823bb64b4142e70ebaa7ee",
    "case_count_restored": 192
  }
}
