From 234774ff09dc46e63ab323efff68b3d846125235 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Fri, 16 Oct 2026 16:49:04 +0200 Subject: [PATCH 01/81] battery: a "standard" timing benchmark on open data, with every model committed battery.py timing --benchmark standard (now the default) runs 9zlo, 9s02 and 9gjx from their AlphaFold DB models (AF-P17090-F1, AF-P32322-F1, AF-Q65MG6-F1 v6, with their PAE, as the 2026-10-16 AlphaFold MR scan used them; all three GREEN there) and 4nwv from its deposited model moved by the existing fixed transform. --benchmark inhouse keeps the earlier myob_x10sa / cytc_x10sa / 4nwv list. Same checks; expected groups are the deposited ones, R-free <= 0.50 for the predictions (0.35 for 4nwv), placement CC >= 0.30. So that a machine needs only the raw data: - the deposited coordinates of 9zlo, 9s02, 9gjx, 4nwv and 4dc8 (the inhouse myoglobin reference) are committed in tools/battery/models/pdb/ as the compressed mmCIF RCSB serves (CC0; 50-660 kB each, 1.6 MB together), and model_check.deposition reads an entry there before the pdb_cache, taking its refinement record from the file itself - no cache JSON, no network; - open/inhouse arms default their manifest and reference, so a site config is just runs_root plus the data roots (site.timing.example.json); - baseline_timing is now per benchmark ({"standard": RUN, "inhouse": RUN}). Verified on the workstation through the GPU lock with a site config whose pdb_cache is an empty directory (still empty afterwards): standard 4/4 pass (9zlo 19 s, 9s02 30 s, 9gjx 21 s, 4nwv 89 s), inhouse 3/3 pass. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- THIRD_PARTY_NOTICES.md | 7 +- docs/RUGNUX_BENCHMARKING.md | 74 +- licenses/alphafold-db.txt | 12 +- tools/battery/README.md | 139 +- tools/battery/battery.py | 42 +- tools/battery/model_check.py | 8 +- .../battery/models/AF-P17090-F1-model_v6.cif | 2214 ++++++++++ ...-P17090-F1-predicted_aligned_error_v6.json | 1 + .../battery/models/AF-P32322-F1-model_v6.cif | 3789 +++++++++++++++++ ...-P32322-F1-predicted_aligned_error_v6.json | 1 + .../battery/models/AF-Q65MG6-F1-model_v6.cif | 3004 +++++++++++++ ...-Q65MG6-F1-predicted_aligned_error_v6.json | 1 + tools/battery/models/LICENSE.txt | 12 +- tools/battery/models/pdb/4dc8.cif.gz | Bin 0 -> 49043 bytes tools/battery/models/pdb/4nwv.cif.gz | Bin 0 -> 215924 bytes tools/battery/models/pdb/9gjx.cif.gz | Bin 0 -> 562819 bytes tools/battery/models/pdb/9s02.cif.gz | Bin 0 -> 661460 bytes tools/battery/models/pdb/9zlo.cif.gz | Bin 0 -> 151311 bytes .../results/timing_platforms/timing_table.py | 5 +- tools/battery/site.timing.example.json | 7 + tools/battery/timing.json | 29 +- tools/battery/timing.py | 25 +- 22 files changed, 9259 insertions(+), 111 deletions(-) create mode 100644 tools/battery/models/AF-P17090-F1-model_v6.cif create mode 100644 tools/battery/models/AF-P17090-F1-predicted_aligned_error_v6.json create mode 100644 tools/battery/models/AF-P32322-F1-model_v6.cif create mode 100644 tools/battery/models/AF-P32322-F1-predicted_aligned_error_v6.json create mode 100644 tools/battery/models/AF-Q65MG6-F1-model_v6.cif create mode 100644 tools/battery/models/AF-Q65MG6-F1-predicted_aligned_error_v6.json create mode 100644 tools/battery/models/pdb/4dc8.cif.gz create mode 100644 tools/battery/models/pdb/4nwv.cif.gz create mode 100644 tools/battery/models/pdb/9gjx.cif.gz create mode 100644 tools/battery/models/pdb/9s02.cif.gz create mode 100644 tools/battery/models/pdb/9zlo.cif.gz create mode 100644 tools/battery/site.timing.example.json diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index add5fc01d..51f742097 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -79,10 +79,11 @@ Not code and not linked into any binary: input files of the battery's timing ben | Component | Path | Copyright | License (SPDX) | License text | |---|---|---|---|---| -| [AlphaFold Protein Structure Database](https://alphafold.ebi.ac.uk/) predictions AF-P68082-F1 and AF-P62894-F1 (v6), with their predicted aligned error | `tools/battery/models/` | DeepMind Technologies Limited; EMBL-EBI | CC-BY-4.0 | [alphafold-db.txt](licenses/alphafold-db.txt) | +| [AlphaFold Protein Structure Database](https://alphafold.ebi.ac.uk/) predictions AF-P68082-F1, AF-P62894-F1, AF-P17090-F1, AF-P32322-F1 and AF-Q65MG6-F1 (v6), with their predicted aligned error | `tools/battery/models/AF-*` | DeepMind Technologies Limited; EMBL-EBI | CC-BY-4.0 | [alphafold-db.txt](licenses/alphafold-db.txt) | +| [wwPDB](https://www.wwpdb.org/) entries 4DC8, 4NWV, 9GJX, 9S02 and 9ZLO, deposited coordinates (mmCIF as the [RCSB PDB](https://www.rcsb.org/) serves them) | `tools/battery/models/pdb/` | the depositors; the wwPDB | CC0-1.0 | [wwPDB usage policy](https://www.wwpdb.org/about/usage-policies) | -The benchmark's third start model is made at run time from the deposited coordinates of PDB entry -4NWV, downloaded from the RCSB PDB (PDB data are CC0 1.0); nothing of it is committed. +The deposited entries are the reference models the benchmark's placements are checked against, and +4NWV's is also moved by a fixed transform at run time to make one start model. ## Runtime libraries and SDKs (shipped in binaries, not in the source tree) diff --git a/docs/RUGNUX_BENCHMARKING.md b/docs/RUGNUX_BENCHMARKING.md index bb68ce1f2..828279aa2 100644 --- a/docs/RUGNUX_BENCHMARKING.md +++ b/docs/RUGNUX_BENCHMARKING.md @@ -21,10 +21,10 @@ the old ones were retired. - **The validation battery** (`battery.py run`) processes a fixed list of rotation datasets and scores each answer against an independent reference. It answers *is the result right, and as good as the reference*. A full run takes hours. -- **The timing benchmark** (`battery.py timing`) processes three sets, each started from a model +- **The timing benchmark** (`battery.py timing`) processes four sets, each started from a model that has to be placed by molecular replacement, so one short run exercises the whole pipeline and also checks that the answers are right. It answers *how fast, on this machine*. It takes - minutes. + minutes, and needs nothing on the machine but four open datasets. The two are kept apart on purpose. A battery run reads hundreds of gigabytes once, so its wall clock mostly measures the disk and the page cache (see [the page-cache trap](#the-page-cache)). Use the @@ -52,8 +52,8 @@ the cache now is, not where its `.json` files say they were first fetched The data layout (`//...`) and where to get each arm's data are in the README's *Getting the data*. The open arm is public (each dataset's DOI is in [External test data](EXTERNAL_TEST_DATA.md)); the in-house data come from the maintainers. The -timing benchmark needs only three dataset directories: `inhouse/myob_x10sa`, `inhouse/cytc_x10sa` -and `open/4nwv`. +timing benchmark needs only four open dataset directories and the smallest site config there is +([below](#what-a-machine-needs)); models, references and expected answers are all in the repository. ## The validation battery @@ -283,23 +283,66 @@ a release battery or for a paper. ## The timing benchmark ``` -$B timing --rugnux $R [--threads N] [--label L] [--baseline RUN|none] [--extra=] [--gpulock] +$B timing --rugnux $R [--benchmark standard|inhouse] [--threads N] [--label L] [--baseline RUN|none] [--extra=] [--gpulock] ``` -The benchmark runs three sets. Each starts from a model that the run has to place by molecular +The benchmark runs a few sets. Each starts from a model that the run has to place by molecular replacement, so a single run times every stage: reading, pre-scan, indexing, integration, scaling, the space-group search, MR and model validation. It also checks that every answer is right. +`--benchmark standard`, the default, is the one to run on a new machine. It uses open data only: +three EIGER 16M rotation sets of ordinary size and quality, and a virus capsid as the large case. + | set | start model (`--model`) | what makes it hard | |---|---|---| -| `myob_x10sa` | the AlphaFold DB prediction of horse myoglobin, committed in `tools/battery/models/` | a prediction, without heme | -| `cytc_x10sa` | the AlphaFold DB prediction of bovine cytochrome c, also in `models/` | three copies related by a pseudo-translation; the data alone cannot tell P3₁21 from P3₂21, so the model must decide the hand | +| `9zlo` | the AlphaFold DB prediction of UreE (*Proteus mirabilis*), committed in `tools/battery/models/` | two copies to place, P2₁2₁2₁, 2.0 Å | +| `9s02` | the AlphaFold DB prediction of human PYCR1, also in `models/` | five copies, P2₁2₁2, 1.65 Å | +| `9gjx` | the AlphaFold DB prediction of a *Bacillus licheniformis* nitroreductase, also in `models/` | six copies, P2₁, 2.4 Å, the largest of the three datasets (37 GB) | | `4nwv` | the deposited 4NWV (a virus capsid, I222, 45 chains once strict NCS is expanded), turned 30° and shifted 33 Å by a fixed transform | the largest: too far off for the rigid body, so MR places the whole asymmetric unit | +`--benchmark inhouse` is the benchmark as first set up, kept so that earlier runs stay comparable: +the predictions of horse myoglobin (`myob_x10sa`, a prediction without heme) and bovine cytochrome c +(`cytc_x10sa`: three copies related by a pseudo-translation; the data alone cannot tell P3₁21 from +P3₂21, so the model must decide the hand), and the same `4nwv`. Its two in-house datasets come from +the maintainers. + The predictions are committed next to their predicted-aligned-error files, which rugnux uses to cut -them into rigid domains. The moved 4NWV is made at run time from the deposited coordinates in the -site's `pdb_cache` (downloaded from the RCSB on first use), using the transform in -`tools/battery/timing.json`. +them into rigid domains. The deposited entries the placements are checked against are committed too +(`tools/battery/models/pdb/`), and the moved 4NWV is made at run time from the committed 4NWV with +the transform in `tools/battery/timing.json`. A timing run needs no `pdb_cache` and no network. + +### What a machine needs + +Copy these directories under one open data root (sizes as unpacked; please cite the DOIs): + +| directory | size | source | +|---|---:|---| +| `9zlo/` | 11 GB | Zenodo [10.5281/zenodo.18652652](https://doi.org/10.5281/zenodo.18652652) | +| `9s02/` | 11 GB | MX Raw Data Repository [10.60884/NRNGS4](https://doi.org/10.60884/NRNGS4) | +| `9gjx/` | 37 GB | IRRMC [10.18430/M39GJX](https://doi.org/10.18430/M39GJX) | +| `4nwv/` | 16 GB | SBGrid Data Bank [10.15785/sbgrid/9](https://doi.org/10.15785/sbgrid/9) | + +The paths inside each directory are the `input`s of `tools/battery/open.json` (for example +`9gjx/BlNTR_9gjx/data/SC6_1_master.h5`), and [External test data](EXTERNAL_TEST_DATA.md) says what +each archive holds. The site config needs only the runs root and that data root +(`tools/battery/site.timing.example.json`): + +```json +{ + "runs_root": "/path/to/runs", + "arms": { + "open": {"data_root": "/path/to/open"} + } +} +``` + +and the run is + +``` +python3 tools/battery/battery.py --site /path/to/site.json timing --rugnux /path/to/rugnux +``` + +Python 3.9 or newer with `gemmi` and `numpy` is all the runner needs. ### The checks @@ -309,8 +352,8 @@ A set passes only when every check holds. The thresholds are in `timing.json`. |---|---|---| | `space_group` | the battery's own verdict on lattice and space group passes (the hand excepted) | the data's own determination is right | | `placed` | `MODEL_PLACEMENT` is `MR` | molecular replacement placed the model, and the R-factors, maps and model written are of that placement | -| `mr_group` | `MR_SPACE_GROUP` is P 1 21 1, P 32 2 1 and I 2 2 2 respectively, hand included | the model settles the hand, so this is where a wrong enantiomorph shows | -| `r_free` | `R_FREE` ≤ 0.50 for the two predictions, ≤ 0.35 for 4NWV | a random structure gives 0.586 | +| `mr_group` | `MR_SPACE_GROUP` is the deposited group, hand included (P 21 21 21, P 21 21 2, P 1 21 1 and I 2 2 2 for `standard`; P 1 21 1 and P 32 2 1 for the two in-house sets) | the model settles the hand, so this is where a wrong enantiomorph shows | +| `r_free` | `R_FREE` ≤ 0.50 for the predictions, ≤ 0.35 for 4NWV | a random structure gives 0.586 | | `confirmed` | `CC_MODEL_CONFIRMED_TO_D_MIN` is not `NONE` | some shell's CC(model, data) clears rugnux's empirical null | | `placement_cc` | the placed `p_model.pdb` and the reference model have correlated intensities, ≥ 0.30 | see below | @@ -342,8 +385,9 @@ per step and one column per set. Each `results.json` row carries `bench_verdict` `WALL_TIME`, so time spent waiting for a GPU queue is not in it. The run exits with status 1 when a set fails a check or crashes. A wrong answer is a failure even when the time is good. -If the site config names a `baseline_timing` (an earlier timing run on this machine), the report is -compared against it. Otherwise pass `--baseline RUN`. Compare timing runs only from the same machine. +If the site config names a `baseline_timing` for the benchmark (`{"standard": RUN, "inhouse": RUN}`, +earlier timing runs on this machine), the report is compared against it. Otherwise pass +`--baseline RUN`. Compare timing runs only from the same machine and the same benchmark. ### CPU only diff --git a/licenses/alphafold-db.txt b/licenses/alphafold-db.txt index 33c0ab6d8..3929a9ec7 100644 --- a/licenses/alphafold-db.txt +++ b/licenses/alphafold-db.txt @@ -1,12 +1,20 @@ -AlphaFold Protein Structure Database predictions (tools/battery/models/) +AlphaFold Protein Structure Database predictions (tools/battery/models/AF-*) AF-P68082-F1-model_v6.cif, AF-P68082-F1-predicted_aligned_error_v6.json myoglobin, Equus caballus (UniProt P68082), model version 6 AF-P62894-F1-model_v6.cif, AF-P62894-F1-predicted_aligned_error_v6.json cytochrome c, Bos taurus (UniProt P62894), model version 6 + AF-P17090-F1-model_v6.cif, AF-P17090-F1-predicted_aligned_error_v6.json + urease accessory protein UreE, Proteus mirabilis HI4320 (UniProt P17090), model version 6 + AF-P32322-F1-model_v6.cif, AF-P32322-F1-predicted_aligned_error_v6.json + pyrroline-5-carboxylate reductase 1, Homo sapiens (UniProt P32322), model version 6 + AF-Q65MG6-F1-model_v6.cif, AF-Q65MG6-F1-predicted_aligned_error_v6.json + NADH-dependent nitro/flavin oxidoreductase, Bacillus licheniformis ATCC 14580 (UniProt Q65MG6), + model version 6 Source: AlphaFold Protein Structure Database, https://alphafold.ebi.ac.uk/ (EMBL-EBI and Google -DeepMind), downloaded 2026-10-15 from https://alphafold.ebi.ac.uk/files/. The files are unmodified. +DeepMind), downloaded from https://alphafold.ebi.ac.uk/files/ on 2026-10-15 (P68082, P62894) and +2026-10-16 (P17090, P32322, Q65MG6). The files are unmodified. Licence: Creative Commons Attribution 4.0 International (CC BY 4.0), https://creativecommons.org/licenses/by/4.0/ - the full legal code follows below. diff --git a/tools/battery/README.md b/tools/battery/README.md index 01299cacc..6519ec491 100644 --- a/tools/battery/README.md +++ b/tools/battery/README.md @@ -236,8 +236,11 @@ A relative `manifest` path is resolved against `tools/battery/`; every other rel lock file, caches, data roots) against the site config's own directory. `gpulock` is a command that `rugnux` is prefixed with under `--gpulock`. At PSI it is a wrapper script that queues for one of the shared GPU slots. Set it to `null` if you have no such wrapper. `pdb_cache` (optional) is where -the deposited models and their metadata are cached for `--model` and the REFMAC check. `baseline_timing` -(optional) is the timing run (`battery.py timing`, below) a new timing run is reported against. +the deposited models and their metadata are cached for `--model` and the REFMAC check; an entry +committed in `models/pdb/` (the timing benchmark's) is read from there instead. `baseline_timing` +(optional) names, per benchmark, the timing run (`battery.py timing`, below) a new timing run is +reported against: `{"standard": RUN, "inhouse": RUN}`. For the open and in-house arms `manifest` and +`reference` may be left out (they default to the values above), so an arm can be just its `data_root`. `cod_cache` (optional, default `/data/battery/cod_cache`) caches the small molecules' COD structures, and `shelxl` (optional; else `shelxl` on `PATH`, e.g. from CCP4) is the SHELXL the small-molecule check calls - without one the check is skipped and says so. @@ -356,30 +359,81 @@ adds 30 rugnux runs, about 6 minutes of rugnux on the RTX 5080 (measured: 6.1 mi ### The timing benchmark `battery.py timing` is the run to repeat on every machine rugnux is measured on (the workstation, the -4x T4 server, a GB10, a Windows laptop, a Mac): three sets, each started from a model it has to place +4x T4 server, a GB10, a Windows laptop, a Mac): a few sets, each started from a model it has to place by molecular replacement, so one run times the whole pipeline - reading, indexing, integration, scaling, the space-group search, MR and model validation - and says whether its answers are right. ``` -$B timing --rugnux $R [--gpulock] [--threads N] [--label L] [--baseline RUN|none] +$B timing --rugnux $R [--benchmark standard|inhouse] [--gpulock] [--threads N] [--label L] [--baseline RUN|none] ``` -| set | arm | start model (`--model`) | reference model it is checked against | -|---|---|---|---| -| `myob_x10sa` | inhouse | AlphaFold DB AF-P68082-F1 v6 (horse myoglobin, UniProt P68082), `models/` | 4DC8 | -| `cytc_x10sa` | inhouse | AlphaFold DB AF-P62894-F1 v6 (bovine cytochrome c, UniProt P62894), `models/` | `reference_model.cif` beside the data | -| `4nwv` | open | the deposited 4NWV, strict NCS expanded (45 chains), turned 30 deg about (0.36, 0.48, 0.80) through its centroid and shifted (12, -18, 25) A | 4NWV as deposited | +`timing.json` holds two benchmarks. **`standard`** (the default) needs only open data: three EIGER +16M rotation sets of ordinary size and quality, the kind of crystallography rugnux is mostly run on, +and the 4NWV virus capsid as the large case. -The two predictions are committed in `models/` exactly as the AlphaFold DB serves them, each with its -predicted aligned error under its own name, which rugnux finds beside the model and cuts the -prediction into rigid domains by. They are CC BY 4.0 (`models/LICENSE.txt`, `THIRD_PARTY_NOTICES.md`). -The moved 4NWV is not committed (10 MB): the runner makes it from the deposited coordinates in the -site's `pdb_cache` (fetched from the RCSB on first use, like every open-arm model) into the set's work -directory as `4nwv_moved.cif.gz`, with the transform in `timing.json`. That is far outside what the -rigid body corrects, so the model is rejected as read and MR places it. Each set otherwise runs the -battery's own command for its arm (above), so a timing run needs nothing beyond what the battery -needs, and a machine needs only those three dataset directories under its data roots -(`inhouse/myob_x10sa`, `inhouse/cytc_x10sa`, `open/4nwv`) and the usual site config. +| set | start model (`--model`) | reference model it is checked against | expected MR group | +|---|---|---|---| +| `9zlo` | AlphaFold DB AF-P17090-F1 v6 (UreE, *Proteus mirabilis*, UniProt P17090), `models/`; 2 copies to place | 9ZLO as deposited, `models/pdb/` | P 21 21 21 | +| `9s02` | AlphaFold DB AF-P32322-F1 v6 (PYCR1, human, UniProt P32322; the entry deposits isoform 3), `models/`; 5 copies | 9S02, `models/pdb/` | P 21 21 2 | +| `9gjx` | AlphaFold DB AF-Q65MG6-F1 v6 (nitroreductase, *Bacillus licheniformis*, UniProt Q65MG6), `models/`; 6 copies | 9GJX, `models/pdb/` | P 1 21 1 | +| `4nwv` | the deposited 4NWV (`models/pdb/`), strict NCS expanded (45 chains), turned 30 deg about (0.36, 0.48, 0.80) through its centroid and shifted (12, -18, 25) A | 4NWV, `models/pdb/` | I 2 2 2 | + +**`inhouse`** is the benchmark as it was first set up, kept so that runs made with it stay comparable: +two in-house standard proteins and the same 4NWV. + +| set | start model (`--model`) | reference model it is checked against | expected MR group | +|---|---|---|---| +| `myob_x10sa` | AlphaFold DB AF-P68082-F1 v6 (horse myoglobin, UniProt P68082), `models/` | 4DC8, `models/pdb/` | P 1 21 1 | +| `cytc_x10sa` | AlphaFold DB AF-P62894-F1 v6 (bovine cytochrome c, UniProt P62894), `models/` | `reference_model.cif` beside the data | P 32 2 1 | +| `4nwv` | as above | as above | I 2 2 2 | + +**Everything but the raw data is in the repository.** The predictions are committed in `models/` +exactly as the AlphaFold DB serves them, each with its predicted aligned error under its own name, +which rugnux finds beside the model and cuts the prediction into rigid domains by (CC BY 4.0, +`models/LICENSE.txt`). The deposited entries the sets are checked against, and 4NWV's start model, are +committed in `models/pdb/` as the compressed mmCIF the RCSB serves (PDB data are CC0; both in +`THIRD_PARTY_NOTICES.md`). `model_check.deposition` reads an entry from `models/pdb/` before it looks +at the site's `pdb_cache`, and its refinement record (R-free, d_min) comes from that file itself, so a +timing run needs no `pdb_cache` and no network. The moved 4NWV (10 MB) is not committed: the runner +makes it from `models/pdb/4nwv.cif.gz` into the set's work directory as `4nwv_moved.cif.gz`, with the +transform in `timing.json`. That is far outside what the rigid body corrects, so the model is rejected +as read and MR places it. Each set otherwise runs the battery's own command for its arm (above). + +**On another machine** only the dataset directories have to be copied, under an open data root: + +| directory | size | source (please cite) | master file / first image | +|---|---:|---|---| +| `open/9zlo` | 11 GB | Zenodo [10.5281/zenodo.18652652](https://doi.org/10.5281/zenodo.18652652) | `9zlo/ASP0887_09_0114_master.h5` | +| `open/9s02` | 11 GB | MX Raw Data Repository [10.60884/NRNGS4](https://doi.org/10.60884/NRNGS4) | `9s02/PYCR1-D11_1_master.h5` | +| `open/9gjx` | 37 GB | IRRMC [10.18430/M39GJX](https://doi.org/10.18430/M39GJX) | `9gjx/BlNTR_9gjx/data/SC6_1_master.h5` | +| `open/4nwv` | 16 GB | SBGrid Data Bank [10.15785/sbgrid/9](https://doi.org/10.15785/sbgrid/9) | `4nwv/sbgrid9/formal.001` | + +75 GB in all (`docs/EXTERNAL_TEST_DATA.md` says what each archive holds; the paths are `open.json`'s +`input`s). For `--benchmark inhouse` add `inhouse/myob_x10sa` and `inhouse/cytc_x10sa` (from the +maintainers) and keep `open/4nwv`. The site config then needs only where runs go and the data roots; +`site.timing.example.json` is that config, and every other key is optional (the two committed arms +default their `manifest` and `reference`): + +```json +{ + "runs_root": "/path/to/runs", + "arms": { + "open": {"data_root": "/path/to/open"} + } +} +``` + +``` +python3 tools/battery/battery.py --site /path/to/site.json timing --rugnux /path/to/rugnux +``` + +Add `"gpulock"` (a command rugnux is prefixed with) only to use `--gpulock`, and `"inhouse": +{"data_root": ...}` for the in-house benchmark. Python 3.9+ with `gemmi` and `numpy` (`pip install +gemmi numpy`) is all the runner needs. macOS runs it as Linux does. Windows has no process groups and +no `flock`, which a timing run does not need; run it as `python -X utf8 tools\battery\battery.py ...` +(the report and the console table are UTF-8), with `--rugnux` naming `rugnux.exe` (the run directory +keeps its own copy, so any DLL it needs must be found on `PATH`). Relative paths in the site config are +taken from the config's own directory ([Measuring Rugnux](../../docs/RUGNUX_BENCHMARKING.md#setting-up-a-machine)). A set passes when every check holds (`timing.py`; thresholds in `timing.json`): @@ -387,41 +441,36 @@ A set passes when every check holds (`timing.py`; thresholds in `timing.json`): |---|---| | `space_group` | the battery's own verdict passes: lattice and space group against the reference, by the scorer's rules (the hand excepted) | | `placed` | `MODEL_PLACEMENT` is `MR`: molecular replacement placed the model, and the R-factors, maps and model written are of that placement | -| `mr_group` | `MR_SPACE_GROUP` is the expected group, hand included (P 1 21 1, P 32 2 1, I 2 2 2): a model decides the hand | -| `r_free` | `R_FREE` at most 0.50 for the predictions and 0.35 for 4NWV. Measured: 0.44 (myoglobin, AlphaFold), 0.315 (4NWV after MR); the reference models placed by the rigid body give 0.246, 0.356 and 0.297; a random structure 0.586 | +| `mr_group` | `MR_SPACE_GROUP` is the expected group (tables above), hand included: a model decides the hand | +| `r_free` | `R_FREE` at most 0.50 for the predictions and 0.35 for 4NWV. Measured: 0.468, 0.371 and 0.384 (9zlo, 9s02, 9gjx), 0.44 (myoglobin), 0.315 (4NWV after MR); a random structure 0.586 | | `confirmed` | `CC_MODEL_CONFIRMED_TO_D_MIN` is not `NONE`: some shell's CC(model, data) clears rugnux's empirical null | -| `placement_cc` | the placed model `p_model.pdb` has the reference model's intensities: the correlation of the two models' \|F\|^2, each shell normalised to its mean, 10-4 A, the best over the changes of basis the two lattices allow, is at least 0.30. \|F\| is the same for every origin and every symmetry copy, so this needs no superposition. Measured: 0.55 (myoglobin, AlphaFold against 4DC8: 0.9 A apart as models), 0.90 (cytochrome c), 0.96 (4NWV); a wrong placement 0.01-0.04, the cytochrome c placement relabelled to the other hand 0.18 | +| `placement_cc` | the placed model `p_model.pdb` has the reference model's intensities: the correlation of the two models' \|F\|^2, each shell normalised to its mean, 10-4 A, the best over the changes of basis the two lattices allow, is at least 0.30. \|F\| is the same for every origin and every symmetry copy, so this needs no superposition. Measured: 0.61, 0.78 and 0.67 (9zlo, 9s02, 9gjx), 0.55 (myoglobin, AlphaFold against 4DC8: 0.9 A apart as models), 0.90 (cytochrome c), 0.96 (4NWV); a wrong placement 0.01-0.04, the cytochrome c placement relabelled to the other hand 0.18 | `placement_cc` is independent of rugnux's own scores and is what catches a placement rugnux reports as right: the myoglobin placement turned by 30 deg in a copy of its work directory, with rugnux's report unchanged, fails it at 0.035, and the moved 4NWV start model at 0.011. A wrong model (the cytochrome c prediction on the myoglobin data) is not placed by rugnux and fails `placed`. +The three standard sets were chosen from the 2026-10-16 AlphaFold MR scan of the open arm, which placed +all three with every one of these checks passing. The run is an ordinary run directory (`manifest.json`, `results.json`, `report.md`), so `list`, -`table`, `compare` and `keep` work on it. Each row carries `bench_verdict`, `bench_reason`, -`bench_checks` (`{check: [ok, value, limit]}`), `mr_seconds`, `mr_decision` and `steps` (seconds per -rugnux step, from the `TIMING step` lines of `p_log.txt`); the report opens with a **Timing benchmark** -section (the checks per set, then the step times), and the console prints both. `wall_s` is rugnux's -own WALL_TIME. The run exits with status 1 when a set failed a check or crashed. Its report is compared -against the site's `baseline_timing` (a timing run; none by default). As everywhere, `--gpulock` -marks the timing "NOT a reference": run it with the machine to itself when the numbers are the point. +`table`, `compare` and `keep` work on it; its default label is `timing-`. Each row carries +`bench_verdict`, `bench_reason`, `bench_checks` (`{check: [ok, value, limit]}`), `mr_seconds`, +`mr_decision` and `steps` (seconds per rugnux step, from the `TIMING step` lines of `p_log.txt`); the +report opens with a **Timing benchmark** section (the checks per set, then the step times), and the +console prints both. `wall_s` is rugnux's own WALL_TIME. The run exits with status 1 when a set failed +a check or crashed. Its report is compared against the site's `baseline_timing` for that benchmark +(`{"standard": RUN, "inhouse": RUN}`; none by default). As everywhere, `--gpulock` marks the timing +"NOT a reference": run it with the machine to itself when the numbers are the point. -On another machine: Python 3.9+ with `gemmi` and `numpy` (`pip install gemmi numpy`), a site config -whose data roots hold the three directories and whose `gpulock` is `null`, and the command above. -macOS runs it as Linux does. Windows has no process groups and no `flock`, which a timing run does not -need; run it as `python -X utf8 tools\battery\battery.py ...` (the report and the console table are -UTF-8), with `--rugnux` naming `rugnux.exe` (the run directory keeps its own copy, so any DLL it needs -must be found on `PATH`). Both have been run (2026-10-16). Relative paths in the site config are -taken from the config's own directory, and a `pdb_cache` copied from another machine works as it is -([Measuring Rugnux](../../docs/RUGNUX_BENCHMARKING.md#setting-up-a-machine)). - -Measured on the workstation (RTX 5080, rc175): myoglobin 10 s, cytochrome c 13 s, 4NWV 106 s -(of which MR 34 s and model validation 8 s; about 16 GB peak resident memory, the most of the -three by far). Cytochrome c is the hard one: the prediction is a monomer and the crystal holds -three copies related by a pseudo-translation, and MR places three copies in both P 32 2 1 (R-free -0.427) and P 31 2 1 (0.437), under the 0.03 R-free margin. It was `MR_DECISION= UNDECIDED` when the -benchmark was added; with as many copies in both groups, MR now compares them on every reflection -(paired residuals, [RUGNUX_REPORT ▸ Molecular replacement](../../docs/RUGNUX_REPORT.md#molecular-replacement)) +Measured on the workstation (RTX 5080, rc175): for `standard` 9zlo 19 s, 9s02 30 s, 9gjx 21 s and +4NWV 89 s (of which MR 17 s; 2026-10-16, under `--gpulock`); for `inhouse` myoglobin 10 s, cytochrome +c 13 s, 4NWV 106 s (of which MR 34 s and model validation 8 s; about 16 GB peak resident memory, the +most of the sets by far). Cytochrome c is the hard one: the prediction is a monomer and the +crystal holds three copies related by a pseudo-translation, and MR places three copies in both P 32 2 1 +(R-free 0.427) and P 31 2 1 (0.437), under the 0.03 R-free margin. It was `MR_DECISION= UNDECIDED` +when the benchmark was added; with as many copies in both groups, MR now compares them on every +reflection (paired residuals, [RUGNUX_REPORT ▸ Molecular replacement](../../docs/RUGNUX_REPORT.md#molecular-replacement)) and decides P 32 2 1. ### Stress: hunting crashes that do not reproduce diff --git a/tools/battery/battery.py b/tools/battery/battery.py index 4c0d254d8..0c1dc3934 100644 --- a/tools/battery/battery.py +++ b/tools/battery/battery.py @@ -19,11 +19,14 @@ Usage (README.md in this directory is the full guide): the wrong-model null on its own, in a run directory of its own: exit 1 if a pair failed (CI runs it as its own step, after run --tier ci --no-nullmodel) - battery.py timing --rugnux BIN [--label L] [--build-dir DIR] [--gpulock] [--threads N] [--baseline RUN|none] - the timing benchmark (timing.json): myob_x10sa and cytc_x10sa - from their AlphaFold DB models, 4nwv from its deposited model - moved away, all placed by molecular replacement; checks each - answer and prints wall and step times; exit 1 if one is wrong + battery.py timing --rugnux BIN [--benchmark standard|inhouse] [--label L] [--build-dir DIR] [--gpulock] + [--threads N] [--baseline RUN|none] + the timing benchmark (timing.json). standard (the default, + open data only): 9zlo, 9s02 and 9gjx from their AlphaFold DB + models, 4nwv from its deposited model moved away; inhouse: + myob_x10sa and cytc_x10sa from AlphaFold DB models, and 4nwv. + All placed by molecular replacement; checks each answer and + prints wall and step times; exit 1 if one is wrong battery.py keep RUN --as workstation|server copy a finished open/inhouse run's report.md, results.json and manifest.json into results/// (committed); refuses a private run @@ -85,7 +88,7 @@ import score # noqa: E402 import model_check # noqa: E402 the deposited model (--model); REFMAC check (--model-check) import nullmodel # noqa: E402 a wrong --model changes nothing and is recognised as wrong import shelx_check # noqa: E402 SHELXL refinement of a small molecule's COD structure -import timing # noqa: E402 the timing benchmark: three sets placed by molecular replacement +import timing # noqa: E402 the timing benchmarks: sets placed by molecular replacement import depdata_check # noqa: E402 our merge vs the depositor's data, shell by shell PDB_ID = re.compile(r"^[0-9][A-Za-z0-9]{3}$") @@ -103,6 +106,9 @@ COMMAND_DOC = { } LOCAL_SITE = os.path.join(HERE, "site.json") +# what a site config may leave out for the two committed arms: then it needs only their data roots +PUBLIC_ARM_DEFAULTS = {"open": {"manifest": "open.json", "reference": "deposition"}, + "inhouse": {"manifest": "inhouse.json", "reference": "xds"}} # ------------------------------------------------------------------ configuration and manifests @@ -120,7 +126,9 @@ def load_site(path): for k in ("runs_root", "lock_file", "pdb_cache", "cod_cache"): if site.get(k): site[k] = os.path.join(base, site[k]) - for arm in site["arms"].values(): + for name, arm in site["arms"].items(): + for k, v in PUBLIC_ARM_DEFAULTS.get(name, {}).items(): + arm.setdefault(k, v) arm["manifest"] = os.path.join(HERE, arm["manifest"]) # relative to tools/battery/ if arm.get("data_root"): arm["data_root"] = os.path.join(base, arm["data_root"]) @@ -748,10 +756,10 @@ def cmd_nullmodel(a, site): def cmd_timing(a, site): - """The timing benchmark (timing.json): its three sets, each with --model , - in a run directory of its own; prints the checks and the step times, exits 1 when a set failed.""" + """A timing benchmark (timing.json): its sets, each with --model , in a + run directory of its own; prints the checks and the step times, exits 1 when a set failed.""" sets = [] - for t in timing.load(): + for t in timing.load(a.benchmark): e = select(site, [t["arm"]], t["set"], None)[0] e["timing"] = t sets.append(e) @@ -762,9 +770,9 @@ def cmd_timing(a, site): "runs_root": a.runs_root or site["runs_root"], "nullmodel": False} if a.gpulock and not site.get("gpulock"): sys.exit("--gpulock: the site config names no gpulock") - baseline = None if a.baseline == "none" else a.baseline or site.get("baseline_timing") - run_dir = run_sets(site, sets, sorted({e["arm"] for e in sets}), a.rugnux, a.build_dir, a.label or "timing", - opts, "timing benchmark", baseline) + baseline = None if a.baseline == "none" else a.baseline or (site.get("baseline_timing") or {}).get(a.benchmark) + run_dir = run_sets(site, sets, sorted({e["arm"] for e in sets}), a.rugnux, a.build_dir, + a.label or f"timing-{a.benchmark}", opts, f"timing benchmark {a.benchmark}", baseline) res = json.load(open(os.path.join(run_dir, "results.json"))) print("\n" + timing.console(res), flush=True) bad = [r for r in res if r.get("bench_verdict") != "pass" or r["verdict"] == "crash"] @@ -1171,10 +1179,12 @@ def main(): nm.add_argument("--timeout", type=int, default=10800, help="per rugnux run, in s") nm.add_argument("--runs-root") - tb = sub.add_parser("timing", help="the timing benchmark: three sets placed by molecular replacement, " + tb = sub.add_parser("timing", help="the timing benchmark: sets placed by molecular replacement, " "checked and timed per step (timing.json); fail on any wrong answer") tb.add_argument("--rugnux", required=True) - tb.add_argument("--label", help="short name, part of the run directory's name (default: timing)") + tb.add_argument("--benchmark", default="standard", choices=timing.names(), + help="which set list of timing.json: standard (open data only, the default) or inhouse") + tb.add_argument("--label", help="short name, part of the run directory's name (default: timing-)") tb.add_argument("--build-dir", help="build tree whose CMakeCache.txt records the flags") tb.add_argument("--gpulock", action="store_true", help="queue each rugnux behind the site's GPU lock (timing is then not a reference)") @@ -1182,7 +1192,7 @@ def main(): tb.add_argument("--timeout", type=int, default=10800, help="per rugnux run, in s") tb.add_argument("--extra", default="", help="extra rugnux arguments, applied to every set") tb.add_argument("--baseline", help="earlier timing run to report the delta against (default: the " - "site's baseline_timing; 'none' for no delta)") + "site's baseline_timing for this benchmark; 'none' for no delta)") tb.add_argument("--runs-root") kp = sub.add_parser("keep", help="copy a run's report.md, results.json and manifest.json into " diff --git a/tools/battery/model_check.py b/tools/battery/model_check.py index 206bfb8ac..644130d6f 100644 --- a/tools/battery/model_check.py +++ b/tools/battery/model_check.py @@ -56,6 +56,7 @@ import numpy as np DEFAULT_CACHE = "/data/battery/pdb_cache" CCP4_SETUP = os.environ.get("CCP4_SETUP", "/opt/xtal/ccp4-9/bin/ccp4.setup-sh") RCSB = "https://files.rcsb.org/download/" +COMMITTED = os.path.join(os.path.dirname(os.path.abspath(__file__)), "models", "pdb") # the timing benchmark's entries PDB_ID = re.compile(r"^[0-9][a-z0-9]{3}$") MAX_ATOMS = 200000 # REFMAC time grows with atoms x reflections CELL_TOL = 0.05 # Niggli cells compared loosely on purpose; the R score decides @@ -78,7 +79,12 @@ def fetch(url, dest): def deposition(pdb_id, cache_dir): - """Coordinates path and the published refinement statistics, cached as .json.""" + """Coordinates path and the published refinement statistics: from the copy committed in + models/pdb/ where there is one (read from the file itself, no cache and no network), else + fetched from the RCSB into cache_dir and cached as .json.""" + committed = os.path.join(COMMITTED, pdb_id + ".cif.gz") + if os.path.exists(committed): + return refinement_record(pdb_id, committed) os.makedirs(cache_dir, exist_ok=True) meta_path = os.path.join(cache_dir, pdb_id + ".json") xyz = fetch(RCSB + pdb_id + ".cif.gz", os.path.join(cache_dir, pdb_id + ".cif.gz")) diff --git a/tools/battery/models/AF-P17090-F1-model_v6.cif b/tools/battery/models/AF-P17090-F1-model_v6.cif new file mode 100644 index 000000000..1db2f506d --- /dev/null +++ b/tools/battery/models/AF-P17090-F1-model_v6.cif @@ -0,0 +1,2214 @@ +data_AF-P17090-F1 +# +_entry.id AF-P17090-F1 +# +loop_ +_atom_type.symbol +C +N +O +S +# +loop_ +_audit_author.name +_audit_author.pdbx_ordinal +"Jumper, John" 1 +"Evans, Richard" 2 +"Pritzel, Alexander" 3 +"Green, Tim" 4 +"Figurnov, Michael" 5 +"Ronneberger, Olaf" 6 +"Tunyasuvunakool, Kathryn" 7 +"Bates, Russ" 8 +"Zidek, Augustin" 9 +"Potapenko, Anna" 10 +"Bridgland, Alex" 11 +"Meyer, Clemens" 12 +"Kohl, Simon A. A." 13 +"Ballard, Andrew J." 14 +"Cowie, Andrew" 15 +"Romera-Paredes, Bernardino" 16 +"Nikolov, Stanislav" 17 +"Jain, Rishub" 18 +"Adler, Jonas" 19 +"Back, Trevor" 20 +"Petersen, Stig" 21 +"Reiman, David" 22 +"Clancy, Ellen" 23 +"Zielinski, Michal" 24 +"Steinegger, Martin" 25 +"Pacholska, Michalina" 26 +"Berghammer, Tamas" 27 +"Silver, David" 28 +"Vinyals, Oriol" 29 +"Senior, Andrew W." 30 +"Kavukcuoglu, Koray" 31 +"Kohli, Pushmeet" 32 +"Hassabis, Demis" 33 +# +_audit_conform.dict_location https://raw.githubusercontent.com/ihmwg/ModelCIF/master/dist/mmcif_ma.dic +_audit_conform.dict_name mmcif_ma.dic +_audit_conform.dict_version 1.3.9 +# +loop_ +_chem_comp.formula +_chem_comp.formula_weight +_chem_comp.id +_chem_comp.mon_nstd_flag +_chem_comp.name +_chem_comp.pdbx_synonyms +_chem_comp.type +"C3 H7 N O2" 89.093 ALA y ALANINE ? "L-PEPTIDE LINKING" +"C6 H15 N4 O2" 175.209 ARG y ARGININE ? "L-PEPTIDE LINKING" +"C4 H8 N2 O3" 132.118 ASN y ASPARAGINE ? "L-PEPTIDE LINKING" +"C4 H7 N O4" 133.103 ASP y "ASPARTIC ACID" ? "L-PEPTIDE LINKING" +"C3 H7 N O2 S" 121.158 CYS y CYSTEINE ? "L-PEPTIDE LINKING" +"C5 H10 N2 O3" 146.144 GLN y GLUTAMINE ? "L-PEPTIDE LINKING" +"C5 H9 N O4" 147.129 GLU y "GLUTAMIC ACID" ? "L-PEPTIDE LINKING" +"C2 H5 N O2" 75.067 GLY y GLYCINE ? "PEPTIDE LINKING" +"C6 H10 N3 O2" 156.162 HIS y HISTIDINE ? "L-PEPTIDE LINKING" +"C6 H13 N O2" 131.173 ILE y ISOLEUCINE ? "L-PEPTIDE LINKING" +"C6 H13 N O2" 131.173 LEU y LEUCINE ? "L-PEPTIDE LINKING" +"C6 H15 N2 O2" 147.195 LYS y LYSINE ? "L-PEPTIDE LINKING" +"C5 H11 N O2 S" 149.211 MET y METHIONINE ? "L-PEPTIDE LINKING" +"C9 H11 N O2" 165.189 PHE y PHENYLALANINE ? "L-PEPTIDE LINKING" +"C5 H9 N O2" 115.130 PRO y PROLINE ? "L-PEPTIDE LINKING" +"C3 H7 N O3" 105.093 SER y SERINE ? "L-PEPTIDE LINKING" +"C4 H9 N O3" 119.119 THR y THREONINE ? "L-PEPTIDE LINKING" +"C11 H12 N2 O2" 204.225 TRP y TRYPTOPHAN ? "L-PEPTIDE LINKING" +"C9 H11 N O3" 181.189 TYR y TYROSINE ? "L-PEPTIDE LINKING" +"C5 H11 N O2" 117.146 VAL y VALINE ? "L-PEPTIDE LINKING" +# +_citation.book_publisher ? +_citation.country UK +_citation.id primary +_citation.journal_full Nature +_citation.journal_id_ASTM NATUAS +_citation.journal_id_CSD 0006 +_citation.journal_id_ISSN 0028-0836 +_citation.journal_volume 596 +_citation.page_first 583 +_citation.page_last 589 +_citation.pdbx_database_id_DOI 10.1038/s41586-021-03819-2 +_citation.pdbx_database_id_PubMed 34265844 +_citation.title "Highly accurate protein structure prediction with AlphaFold" +_citation.year 2021 +# +loop_ +_citation_author.citation_id +_citation_author.name +_citation_author.ordinal +primary "Jumper, John" 1 +primary "Evans, Richard" 2 +primary "Pritzel, Alexander" 3 +primary "Green, Tim" 4 +primary "Figurnov, Michael" 5 +primary "Ronneberger, Olaf" 6 +primary "Tunyasuvunakool, Kathryn" 7 +primary "Bates, Russ" 8 +primary "Zidek, Augustin" 9 +primary "Potapenko, Anna" 10 +primary "Bridgland, Alex" 11 +primary "Meyer, Clemens" 12 +primary "Kohl, Simon A. A." 13 +primary "Ballard, Andrew J." 14 +primary "Cowie, Andrew" 15 +primary "Romera-Paredes, Bernardino" 16 +primary "Nikolov, Stanislav" 17 +primary "Jain, Rishub" 18 +primary "Adler, Jonas" 19 +primary "Back, Trevor" 20 +primary "Petersen, Stig" 21 +primary "Reiman, David" 22 +primary "Clancy, Ellen" 23 +primary "Zielinski, Michal" 24 +primary "Steinegger, Martin" 25 +primary "Pacholska, Michalina" 26 +primary "Berghammer, Tamas" 27 +primary "Silver, David" 28 +primary "Vinyals, Oriol" 29 +primary "Senior, Andrew W." 30 +primary "Kavukcuoglu, Koray" 31 +primary "Kohli, Pushmeet" 32 +primary "Hassabis, Demis" 33 +# +_database_2.database_code AF-P17090-F1 +_database_2.database_id AlphaFoldDB +# +_entity.details ? +_entity.formula_weight ? +_entity.id 1 +_entity.pdbx_description "Urease accessory protein UreE" +_entity.pdbx_ec ? +_entity.pdbx_fragment ? +_entity.pdbx_mutation ? +_entity.pdbx_number_of_molecules 1 +_entity.src_method man +_entity.type polymer +# +_entity_poly.entity_id 1 +_entity_poly.nstd_linkage no +_entity_poly.nstd_monomer no +_entity_poly.pdbx_seq_one_letter_code +;MKKFTQIIDQQKALELTSTEKPKLTLCLTMDERTKSRLKVALSDGQEAGLFLPRGTVLKEGDILLSEEGDVVTIEAAKEQ +VSTVYSDDPLLLARVCYHLGNRHVPLQIEAGWCRYFHDHVLDDMARGLGATVVVGLEKYQPEPGAYGGSSGGHHHHHDHH +H +; +_entity_poly.pdbx_seq_one_letter_code_can +;MKKFTQIIDQQKALELTSTEKPKLTLCLTMDERTKSRLKVALSDGQEAGLFLPRGTVLKEGDILLSEEGDVVTIEAAKEQ +VSTVYSDDPLLLARVCYHLGNRHVPLQIEAGWCRYFHDHVLDDMARGLGATVVVGLEKYQPEPGAYGGSSGGHHHHHDHH +H +; +_entity_poly.pdbx_strand_id A +_entity_poly.type polypeptide(L) +# +loop_ +_entity_poly_seq.entity_id +_entity_poly_seq.hetero +_entity_poly_seq.mon_id +_entity_poly_seq.num +1 n MET 1 +1 n LYS 2 +1 n LYS 3 +1 n PHE 4 +1 n THR 5 +1 n GLN 6 +1 n ILE 7 +1 n ILE 8 +1 n ASP 9 +1 n GLN 10 +1 n GLN 11 +1 n LYS 12 +1 n ALA 13 +1 n LEU 14 +1 n GLU 15 +1 n LEU 16 +1 n THR 17 +1 n SER 18 +1 n THR 19 +1 n GLU 20 +1 n LYS 21 +1 n PRO 22 +1 n LYS 23 +1 n LEU 24 +1 n THR 25 +1 n LEU 26 +1 n CYS 27 +1 n LEU 28 +1 n THR 29 +1 n MET 30 +1 n ASP 31 +1 n GLU 32 +1 n ARG 33 +1 n THR 34 +1 n LYS 35 +1 n SER 36 +1 n ARG 37 +1 n LEU 38 +1 n LYS 39 +1 n VAL 40 +1 n ALA 41 +1 n LEU 42 +1 n SER 43 +1 n ASP 44 +1 n GLY 45 +1 n GLN 46 +1 n GLU 47 +1 n ALA 48 +1 n GLY 49 +1 n LEU 50 +1 n PHE 51 +1 n LEU 52 +1 n PRO 53 +1 n ARG 54 +1 n GLY 55 +1 n THR 56 +1 n VAL 57 +1 n LEU 58 +1 n LYS 59 +1 n GLU 60 +1 n GLY 61 +1 n ASP 62 +1 n ILE 63 +1 n LEU 64 +1 n LEU 65 +1 n SER 66 +1 n GLU 67 +1 n GLU 68 +1 n GLY 69 +1 n ASP 70 +1 n VAL 71 +1 n VAL 72 +1 n THR 73 +1 n ILE 74 +1 n GLU 75 +1 n ALA 76 +1 n ALA 77 +1 n LYS 78 +1 n GLU 79 +1 n GLN 80 +1 n VAL 81 +1 n SER 82 +1 n THR 83 +1 n VAL 84 +1 n TYR 85 +1 n SER 86 +1 n ASP 87 +1 n ASP 88 +1 n PRO 89 +1 n LEU 90 +1 n LEU 91 +1 n LEU 92 +1 n ALA 93 +1 n ARG 94 +1 n VAL 95 +1 n CYS 96 +1 n TYR 97 +1 n HIS 98 +1 n LEU 99 +1 n GLY 100 +1 n ASN 101 +1 n ARG 102 +1 n HIS 103 +1 n VAL 104 +1 n PRO 105 +1 n LEU 106 +1 n GLN 107 +1 n ILE 108 +1 n GLU 109 +1 n ALA 110 +1 n GLY 111 +1 n TRP 112 +1 n CYS 113 +1 n ARG 114 +1 n TYR 115 +1 n PHE 116 +1 n HIS 117 +1 n ASP 118 +1 n HIS 119 +1 n VAL 120 +1 n LEU 121 +1 n ASP 122 +1 n ASP 123 +1 n MET 124 +1 n ALA 125 +1 n ARG 126 +1 n GLY 127 +1 n LEU 128 +1 n GLY 129 +1 n ALA 130 +1 n THR 131 +1 n VAL 132 +1 n VAL 133 +1 n VAL 134 +1 n GLY 135 +1 n LEU 136 +1 n GLU 137 +1 n LYS 138 +1 n TYR 139 +1 n GLN 140 +1 n PRO 141 +1 n GLU 142 +1 n PRO 143 +1 n GLY 144 +1 n ALA 145 +1 n TYR 146 +1 n GLY 147 +1 n GLY 148 +1 n SER 149 +1 n SER 150 +1 n GLY 151 +1 n GLY 152 +1 n HIS 153 +1 n HIS 154 +1 n HIS 155 +1 n HIS 156 +1 n HIS 157 +1 n ASP 158 +1 n HIS 159 +1 n HIS 160 +1 n HIS 161 +# +loop_ +_ma_data.content_type +_ma_data.id +_ma_data.name +"model coordinates" 1 Model +"input structure" 2 "Input structure" +# +_ma_model_list.data_id 1 +_ma_model_list.model_group_id 1 +_ma_model_list.model_group_name "AlphaFold Monomer v2.0 model" +_ma_model_list.model_id 1 +_ma_model_list.model_name "Top ranked model" +_ma_model_list.model_type "Ab initio model" +_ma_model_list.ordinal_id 1 +# +loop_ +_ma_protocol_step.method_type +_ma_protocol_step.ordinal_id +_ma_protocol_step.protocol_id +_ma_protocol_step.step_id +"coevolution MSA" 1 1 1 +"template search" 2 1 2 +modeling 3 1 3 +# +loop_ +_ma_qa_metric.id +_ma_qa_metric.mode +_ma_qa_metric.name +_ma_qa_metric.software_group_id +_ma_qa_metric.type +1 global pLDDT 1 pLDDT +2 local pLDDT 1 pLDDT +# +_ma_qa_metric_global.metric_id 1 +_ma_qa_metric_global.metric_value 90.12 +_ma_qa_metric_global.model_id 1 +_ma_qa_metric_global.ordinal_id 1 +# +loop_ +_ma_qa_metric_local.label_asym_id +_ma_qa_metric_local.label_comp_id +_ma_qa_metric_local.label_seq_id +_ma_qa_metric_local.metric_id +_ma_qa_metric_local.metric_value +_ma_qa_metric_local.model_id +_ma_qa_metric_local.ordinal_id +A MET 1 2 86.62 1 1 +A LYS 2 2 91.94 1 2 +A LYS 3 2 95.44 1 3 +A PHE 4 2 96.75 1 4 +A THR 5 2 95.69 1 5 +A GLN 6 2 94.88 1 6 +A ILE 7 2 95.94 1 7 +A ILE 8 2 94.69 1 8 +A ASP 9 2 92.25 1 9 +A GLN 10 2 86.69 1 10 +A GLN 11 2 86.88 1 11 +A LYS 12 2 86.94 1 12 +A ALA 13 2 84.44 1 13 +A LEU 14 2 85.12 1 14 +A GLU 15 2 86.25 1 15 +A LEU 16 2 82.00 1 16 +A THR 17 2 78.44 1 17 +A SER 18 2 79.31 1 18 +A THR 19 2 71.88 1 19 +A GLU 20 2 75.31 1 20 +A LYS 21 2 74.06 1 21 +A PRO 22 2 76.56 1 22 +A LYS 23 2 87.94 1 23 +A LEU 24 2 94.44 1 24 +A THR 25 2 96.75 1 25 +A LEU 26 2 97.00 1 26 +A CYS 27 2 97.75 1 27 +A LEU 28 2 98.12 1 28 +A THR 29 2 97.62 1 29 +A MET 30 2 96.12 1 30 +A ASP 31 2 94.56 1 31 +A GLU 32 2 96.88 1 32 +A ARG 33 2 96.38 1 33 +A THR 34 2 94.19 1 34 +A LYS 35 2 94.88 1 35 +A SER 36 2 94.69 1 36 +A ARG 37 2 96.62 1 37 +A LEU 38 2 97.19 1 38 +A LYS 39 2 97.38 1 39 +A VAL 40 2 97.12 1 40 +A ALA 41 2 96.44 1 41 +A LEU 42 2 96.12 1 42 +A SER 43 2 96.19 1 43 +A ASP 44 2 95.00 1 44 +A GLY 45 2 94.56 1 45 +A GLN 46 2 94.56 1 46 +A GLU 47 2 96.00 1 47 +A ALA 48 2 96.12 1 48 +A GLY 49 2 96.81 1 49 +A LEU 50 2 97.44 1 50 +A PHE 51 2 96.94 1 51 +A LEU 52 2 96.06 1 52 +A PRO 53 2 93.62 1 53 +A ARG 54 2 91.44 1 54 +A GLY 55 2 89.69 1 55 +A THR 56 2 92.00 1 56 +A VAL 57 2 93.44 1 57 +A LEU 58 2 95.38 1 58 +A LYS 59 2 94.81 1 59 +A GLU 60 2 95.38 1 60 +A GLY 61 2 95.38 1 61 +A ASP 62 2 96.00 1 62 +A ILE 63 2 96.50 1 63 +A LEU 64 2 96.44 1 64 +A LEU 65 2 95.94 1 65 +A SER 66 2 95.12 1 66 +A GLU 67 2 93.12 1 67 +A GLU 68 2 89.69 1 68 +A GLY 69 2 90.69 1 69 +A ASP 70 2 91.62 1 70 +A VAL 71 2 94.56 1 71 +A VAL 72 2 95.69 1 72 +A THR 73 2 97.00 1 73 +A ILE 74 2 97.56 1 74 +A GLU 75 2 97.50 1 75 +A ALA 76 2 97.94 1 76 +A ALA 77 2 98.12 1 77 +A LYS 78 2 98.44 1 78 +A GLU 79 2 98.38 1 79 +A GLN 80 2 98.50 1 80 +A VAL 81 2 98.75 1 81 +A SER 82 2 98.81 1 82 +A THR 83 2 98.75 1 83 +A VAL 84 2 98.62 1 84 +A TYR 85 2 97.81 1 85 +A SER 86 2 97.25 1 86 +A ASP 87 2 96.19 1 87 +A ASP 88 2 97.69 1 88 +A PRO 89 2 97.56 1 89 +A LEU 90 2 98.06 1 90 +A LEU 91 2 98.19 1 91 +A LEU 92 2 98.31 1 92 +A ALA 93 2 98.19 1 93 +A ARG 94 2 98.25 1 94 +A VAL 95 2 98.38 1 95 +A CYS 96 2 98.12 1 96 +A TYR 97 2 98.06 1 97 +A HIS 98 2 98.00 1 98 +A LEU 99 2 97.69 1 99 +A GLY 100 2 96.56 1 100 +A ASN 101 2 96.38 1 101 +A ARG 102 2 96.75 1 102 +A HIS 103 2 94.69 1 103 +A VAL 104 2 96.94 1 104 +A PRO 105 2 96.50 1 105 +A LEU 106 2 97.06 1 106 +A GLN 107 2 97.69 1 107 +A ILE 108 2 97.44 1 108 +A GLU 109 2 97.19 1 109 +A ALA 110 2 96.25 1 110 +A GLY 111 2 97.50 1 111 +A TRP 112 2 98.31 1 112 +A CYS 113 2 98.50 1 113 +A ARG 114 2 98.56 1 114 +A TYR 115 2 98.50 1 115 +A PHE 116 2 98.25 1 116 +A HIS 117 2 98.50 1 117 +A ASP 118 2 98.19 1 118 +A HIS 119 2 97.69 1 119 +A VAL 120 2 98.19 1 120 +A LEU 121 2 98.38 1 121 +A ASP 122 2 98.50 1 122 +A ASP 123 2 98.25 1 123 +A MET 124 2 97.94 1 124 +A ALA 125 2 98.12 1 125 +A ARG 126 2 98.12 1 126 +A GLY 127 2 97.88 1 127 +A LEU 128 2 97.44 1 128 +A GLY 129 2 97.12 1 129 +A ALA 130 2 97.44 1 130 +A THR 131 2 96.94 1 131 +A VAL 132 2 98.44 1 132 +A VAL 133 2 98.56 1 133 +A VAL 134 2 98.62 1 134 +A GLY 135 2 98.31 1 135 +A LEU 136 2 98.62 1 136 +A GLU 137 2 98.31 1 137 +A LYS 138 2 97.75 1 138 +A TYR 139 2 97.38 1 139 +A GLN 140 2 95.56 1 140 +A PRO 141 2 96.12 1 141 +A GLU 142 2 93.12 1 142 +A PRO 143 2 82.81 1 143 +A GLY 144 2 79.44 1 144 +A ALA 145 2 69.88 1 145 +A TYR 146 2 72.62 1 146 +A GLY 147 2 60.84 1 147 +A GLY 148 2 50.50 1 148 +A SER 149 2 40.91 1 149 +A SER 150 2 42.12 1 150 +A GLY 151 2 38.84 1 151 +A GLY 152 2 33.53 1 152 +A HIS 153 2 40.31 1 153 +A HIS 154 2 43.38 1 154 +A HIS 155 2 49.62 1 155 +A HIS 156 2 48.78 1 156 +A HIS 157 2 54.53 1 157 +A ASP 158 2 49.94 1 158 +A HIS 159 2 53.25 1 159 +A HIS 160 2 55.81 1 160 +A HIS 161 2 50.91 1 161 +# +_ma_software_group.group_id 1 +_ma_software_group.ordinal_id 1 +_ma_software_group.software_id 1 +# +_ma_target_entity.data_id 1 +_ma_target_entity.entity_id 1 +_ma_target_entity.origin "reference database" +# +_ma_target_entity_instance.asym_id A +_ma_target_entity_instance.details . +_ma_target_entity_instance.entity_id 1 +# +_ma_target_ref_db_details.db_accession P17090 +_ma_target_ref_db_details.db_code UREE_PROMH +_ma_target_ref_db_details.db_name UNP +_ma_target_ref_db_details.gene_name ureE +_ma_target_ref_db_details.ncbi_taxonomy_id 529507 +_ma_target_ref_db_details.organism_scientific "Proteus mirabilis (strain HI4320)" +_ma_target_ref_db_details.seq_db_align_begin 1 +_ma_target_ref_db_details.seq_db_align_end 161 +_ma_target_ref_db_details.seq_db_isoform ? +_ma_target_ref_db_details.seq_db_sequence_checksum 0126E60CF1B22BBF +_ma_target_ref_db_details.seq_db_sequence_version_date 1990-08-01 +_ma_target_ref_db_details.target_entity_id 1 +# +loop_ +_ma_template_details.ordinal_id +_ma_template_details.target_asym_id +_ma_template_details.template_auth_asym_id +_ma_template_details.template_data_id +_ma_template_details.template_entity_type +_ma_template_details.template_id +_ma_template_details.template_model_num +_ma_template_details.template_origin +_ma_template_details.template_trans_matrix_id +1 A C 2 polymer 1 1 "reference database" 1 +2 A B 2 polymer 2 1 "reference database" 1 +3 A A 2 polymer 3 1 "reference database" 1 +4 A A 2 polymer 4 1 "reference database" 1 +# +loop_ +_ma_template_ref_db_details.db_accession_code +_ma_template_ref_db_details.db_name +_ma_template_ref_db_details.template_id +1GMU PDB 1 +3TJ8 PDB 2 +3TJ9 PDB 3 +4L3K PDB 4 +# +_ma_template_trans_matrix.id 1 +_ma_template_trans_matrix.rot_matrix[1][1] 1.0 +_ma_template_trans_matrix.rot_matrix[1][2] 0.0 +_ma_template_trans_matrix.rot_matrix[1][3] 0.0 +_ma_template_trans_matrix.rot_matrix[2][1] 0.0 +_ma_template_trans_matrix.rot_matrix[2][2] 1.0 +_ma_template_trans_matrix.rot_matrix[2][3] 0.0 +_ma_template_trans_matrix.rot_matrix[3][1] 0.0 +_ma_template_trans_matrix.rot_matrix[3][2] 0.0 +_ma_template_trans_matrix.rot_matrix[3][3] 1.0 +_ma_template_trans_matrix.tr_vector[1] 0.0 +_ma_template_trans_matrix.tr_vector[2] 0.0 +_ma_template_trans_matrix.tr_vector[3] 0.0 +# +loop_ +_pdbx_audit_revision_details.data_content_type +_pdbx_audit_revision_details.description +_pdbx_audit_revision_details.ordinal +_pdbx_audit_revision_details.provider +_pdbx_audit_revision_details.revision_ordinal +_pdbx_audit_revision_details.type +"Structure model" "Format fixes, new metadata, initial SwissProt release" 2 repository 2 Remediation +"Structure model" "Format fixes, new metadata, initial UniProt release" 3 repository 3 Remediation +"Structure model" "Improved prediction accuracy, small format fixes" 4 repository 4 Remediation +"Structure model" "Update to UniProt 2024_06, small format fixes" 5 repository 5 Release +"Structure model" "Update to UniProt 2025_03" 6 repository 6 Release +# +loop_ +_pdbx_audit_revision_history.data_content_type +_pdbx_audit_revision_history.major_revision +_pdbx_audit_revision_history.minor_revision +_pdbx_audit_revision_history.ordinal +_pdbx_audit_revision_history.revision_date +"Structure model" 2 0 2 2021-12-09 +"Structure model" 3 0 3 2022-06-01 +"Structure model" 4 0 4 2022-09-30 +"Structure model" 5 0 5 2025-03-31 +"Structure model" 6 0 6 2025-08-01 +# +loop_ +_pdbx_data_usage.details +_pdbx_data_usage.id +_pdbx_data_usage.name +_pdbx_data_usage.type +_pdbx_data_usage.url +"Data in this file is available under a CC-BY-4.0 license." 1 CC-BY-4.0 license https://creativecommons.org/licenses/by/4.0/ +;ALPHAFOLD DATA, COPYRIGHT (2021) DEEPMIND TECHNOLOGIES LIMITED. THE INFORMATION +PROVIDED IS THEORETICAL MODELLING ONLY AND CAUTION SHOULD BE EXERCISED IN ITS +USE. IT IS PROVIDED "AS-IS" WITHOUT ANY WARRANTY OF ANY KIND, WHETHER EXPRESSED +OR IMPLIED. NO WARRANTY IS GIVEN THAT USE OF THE INFORMATION SHALL NOT INFRINGE +THE RIGHTS OF ANY THIRD PARTY. DISCLAIMER: THE INFORMATION IS NOT INTENDED TO BE +A SUBSTITUTE FOR PROFESSIONAL MEDICAL ADVICE, DIAGNOSIS, OR TREATMENT, AND DOES +NOT CONSTITUTE MEDICAL OR OTHER PROFESSIONAL ADVICE. IT IS AVAILABLE FOR +ACADEMIC AND COMMERCIAL PURPOSES, UNDER CC-BY 4.0 LICENCE. +; +2 ? disclaimer ? +# +_pdbx_database_status.entry_id AF-P17090-F1 +_pdbx_database_status.recvd_initial_deposition_date 2025-08-01 +_pdbx_database_status.status_code REL +# +loop_ +_pdbx_poly_seq_scheme.asym_id +_pdbx_poly_seq_scheme.auth_seq_num +_pdbx_poly_seq_scheme.entity_id +_pdbx_poly_seq_scheme.hetero +_pdbx_poly_seq_scheme.mon_id +_pdbx_poly_seq_scheme.pdb_ins_code +_pdbx_poly_seq_scheme.pdb_mon_id +_pdbx_poly_seq_scheme.pdb_seq_num +_pdbx_poly_seq_scheme.pdb_strand_id +_pdbx_poly_seq_scheme.seq_id +A 1 1 n MET . MET 1 A 1 +A 2 1 n LYS . LYS 2 A 2 +A 3 1 n LYS . LYS 3 A 3 +A 4 1 n PHE . PHE 4 A 4 +A 5 1 n THR . THR 5 A 5 +A 6 1 n GLN . GLN 6 A 6 +A 7 1 n ILE . ILE 7 A 7 +A 8 1 n ILE . ILE 8 A 8 +A 9 1 n ASP . ASP 9 A 9 +A 10 1 n GLN . GLN 10 A 10 +A 11 1 n GLN . GLN 11 A 11 +A 12 1 n LYS . LYS 12 A 12 +A 13 1 n ALA . ALA 13 A 13 +A 14 1 n LEU . LEU 14 A 14 +A 15 1 n GLU . GLU 15 A 15 +A 16 1 n LEU . LEU 16 A 16 +A 17 1 n THR . THR 17 A 17 +A 18 1 n SER . SER 18 A 18 +A 19 1 n THR . THR 19 A 19 +A 20 1 n GLU . GLU 20 A 20 +A 21 1 n LYS . LYS 21 A 21 +A 22 1 n PRO . PRO 22 A 22 +A 23 1 n LYS . LYS 23 A 23 +A 24 1 n LEU . LEU 24 A 24 +A 25 1 n THR . THR 25 A 25 +A 26 1 n LEU . LEU 26 A 26 +A 27 1 n CYS . CYS 27 A 27 +A 28 1 n LEU . LEU 28 A 28 +A 29 1 n THR . THR 29 A 29 +A 30 1 n MET . MET 30 A 30 +A 31 1 n ASP . ASP 31 A 31 +A 32 1 n GLU . GLU 32 A 32 +A 33 1 n ARG . ARG 33 A 33 +A 34 1 n THR . THR 34 A 34 +A 35 1 n LYS . LYS 35 A 35 +A 36 1 n SER . SER 36 A 36 +A 37 1 n ARG . ARG 37 A 37 +A 38 1 n LEU . LEU 38 A 38 +A 39 1 n LYS . LYS 39 A 39 +A 40 1 n VAL . VAL 40 A 40 +A 41 1 n ALA . ALA 41 A 41 +A 42 1 n LEU . LEU 42 A 42 +A 43 1 n SER . SER 43 A 43 +A 44 1 n ASP . ASP 44 A 44 +A 45 1 n GLY . GLY 45 A 45 +A 46 1 n GLN . GLN 46 A 46 +A 47 1 n GLU . GLU 47 A 47 +A 48 1 n ALA . ALA 48 A 48 +A 49 1 n GLY . GLY 49 A 49 +A 50 1 n LEU . LEU 50 A 50 +A 51 1 n PHE . PHE 51 A 51 +A 52 1 n LEU . LEU 52 A 52 +A 53 1 n PRO . PRO 53 A 53 +A 54 1 n ARG . ARG 54 A 54 +A 55 1 n GLY . GLY 55 A 55 +A 56 1 n THR . THR 56 A 56 +A 57 1 n VAL . VAL 57 A 57 +A 58 1 n LEU . LEU 58 A 58 +A 59 1 n LYS . LYS 59 A 59 +A 60 1 n GLU . GLU 60 A 60 +A 61 1 n GLY . GLY 61 A 61 +A 62 1 n ASP . ASP 62 A 62 +A 63 1 n ILE . ILE 63 A 63 +A 64 1 n LEU . LEU 64 A 64 +A 65 1 n LEU . LEU 65 A 65 +A 66 1 n SER . SER 66 A 66 +A 67 1 n GLU . GLU 67 A 67 +A 68 1 n GLU . GLU 68 A 68 +A 69 1 n GLY . GLY 69 A 69 +A 70 1 n ASP . ASP 70 A 70 +A 71 1 n VAL . VAL 71 A 71 +A 72 1 n VAL . VAL 72 A 72 +A 73 1 n THR . THR 73 A 73 +A 74 1 n ILE . ILE 74 A 74 +A 75 1 n GLU . GLU 75 A 75 +A 76 1 n ALA . ALA 76 A 76 +A 77 1 n ALA . ALA 77 A 77 +A 78 1 n LYS . LYS 78 A 78 +A 79 1 n GLU . GLU 79 A 79 +A 80 1 n GLN . GLN 80 A 80 +A 81 1 n VAL . VAL 81 A 81 +A 82 1 n SER . SER 82 A 82 +A 83 1 n THR . THR 83 A 83 +A 84 1 n VAL . VAL 84 A 84 +A 85 1 n TYR . TYR 85 A 85 +A 86 1 n SER . SER 86 A 86 +A 87 1 n ASP . ASP 87 A 87 +A 88 1 n ASP . ASP 88 A 88 +A 89 1 n PRO . PRO 89 A 89 +A 90 1 n LEU . LEU 90 A 90 +A 91 1 n LEU . LEU 91 A 91 +A 92 1 n LEU . LEU 92 A 92 +A 93 1 n ALA . ALA 93 A 93 +A 94 1 n ARG . ARG 94 A 94 +A 95 1 n VAL . VAL 95 A 95 +A 96 1 n CYS . CYS 96 A 96 +A 97 1 n TYR . TYR 97 A 97 +A 98 1 n HIS . HIS 98 A 98 +A 99 1 n LEU . LEU 99 A 99 +A 100 1 n GLY . GLY 100 A 100 +A 101 1 n ASN . ASN 101 A 101 +A 102 1 n ARG . ARG 102 A 102 +A 103 1 n HIS . HIS 103 A 103 +A 104 1 n VAL . VAL 104 A 104 +A 105 1 n PRO . PRO 105 A 105 +A 106 1 n LEU . LEU 106 A 106 +A 107 1 n GLN . GLN 107 A 107 +A 108 1 n ILE . ILE 108 A 108 +A 109 1 n GLU . GLU 109 A 109 +A 110 1 n ALA . ALA 110 A 110 +A 111 1 n GLY . GLY 111 A 111 +A 112 1 n TRP . TRP 112 A 112 +A 113 1 n CYS . CYS 113 A 113 +A 114 1 n ARG . ARG 114 A 114 +A 115 1 n TYR . TYR 115 A 115 +A 116 1 n PHE . PHE 116 A 116 +A 117 1 n HIS . HIS 117 A 117 +A 118 1 n ASP . ASP 118 A 118 +A 119 1 n HIS . HIS 119 A 119 +A 120 1 n VAL . VAL 120 A 120 +A 121 1 n LEU . LEU 121 A 121 +A 122 1 n ASP . ASP 122 A 122 +A 123 1 n ASP . ASP 123 A 123 +A 124 1 n MET . MET 124 A 124 +A 125 1 n ALA . ALA 125 A 125 +A 126 1 n ARG . ARG 126 A 126 +A 127 1 n GLY . GLY 127 A 127 +A 128 1 n LEU . LEU 128 A 128 +A 129 1 n GLY . GLY 129 A 129 +A 130 1 n ALA . ALA 130 A 130 +A 131 1 n THR . THR 131 A 131 +A 132 1 n VAL . VAL 132 A 132 +A 133 1 n VAL . VAL 133 A 133 +A 134 1 n VAL . VAL 134 A 134 +A 135 1 n GLY . GLY 135 A 135 +A 136 1 n LEU . LEU 136 A 136 +A 137 1 n GLU . GLU 137 A 137 +A 138 1 n LYS . LYS 138 A 138 +A 139 1 n TYR . TYR 139 A 139 +A 140 1 n GLN . GLN 140 A 140 +A 141 1 n PRO . PRO 141 A 141 +A 142 1 n GLU . GLU 142 A 142 +A 143 1 n PRO . PRO 143 A 143 +A 144 1 n GLY . GLY 144 A 144 +A 145 1 n ALA . ALA 145 A 145 +A 146 1 n TYR . TYR 146 A 146 +A 147 1 n GLY . GLY 147 A 147 +A 148 1 n GLY . GLY 148 A 148 +A 149 1 n SER . SER 149 A 149 +A 150 1 n SER . SER 150 A 150 +A 151 1 n GLY . GLY 151 A 151 +A 152 1 n GLY . GLY 152 A 152 +A 153 1 n HIS . HIS 153 A 153 +A 154 1 n HIS . HIS 154 A 154 +A 155 1 n HIS . HIS 155 A 155 +A 156 1 n HIS . HIS 156 A 156 +A 157 1 n HIS . HIS 157 A 157 +A 158 1 n ASP . ASP 158 A 158 +A 159 1 n HIS . HIS 159 A 159 +A 160 1 n HIS . HIS 160 A 160 +A 161 1 n HIS . HIS 161 A 161 +# +loop_ +_software.classification +_software.date +_software.description +_software.name +_software.pdbx_ordinal +_software.type +_software.version +other ? "Structure prediction" AlphaFold 1 package v2.0 +other ? "Secondary structure" dssp 2 library 4 +# +_struct_asym.entity_id 1 +_struct_asym.id A +# +loop_ +_struct_conf.beg_auth_asym_id +_struct_conf.beg_auth_comp_id +_struct_conf.beg_auth_seq_id +_struct_conf.beg_label_asym_id +_struct_conf.beg_label_comp_id +_struct_conf.beg_label_seq_id +_struct_conf.conf_type_id +_struct_conf.end_auth_asym_id +_struct_conf.end_auth_comp_id +_struct_conf.end_auth_seq_id +_struct_conf.end_label_asym_id +_struct_conf.end_label_comp_id +_struct_conf.end_label_seq_id +_struct_conf.id +_struct_conf.pdbx_beg_PDB_ins_code +_struct_conf.pdbx_end_PDB_ins_code +A LYS 2 A LYS 2 STRN A ILE 8 A ILE 8 STRN1 ? ? +A GLN 10 A GLN 10 HELX_RH_AL_P A LEU 16 A LEU 16 HELX_RH_AL_P1 ? ? +A THR 17 A THR 17 TURN_TY1_P A THR 19 A THR 19 TURN_TY1_P1 ? ? +A GLU 20 A GLU 20 BEND A GLU 20 A GLU 20 BEND1 ? ? +A LYS 21 A LYS 21 HELX_LH_PP_P A PRO 22 A PRO 22 HELX_LH_PP_P1 ? ? +A LYS 23 A LYS 23 BEND A LYS 23 A LYS 23 BEND2 ? ? +A LEU 24 A LEU 24 STRN A LEU 28 A LEU 28 STRN2 ? ? +A MET 30 A MET 30 HELX_RH_AL_P A ARG 33 A ARG 33 HELX_RH_AL_P2 ? ? +A THR 34 A THR 34 TURN_TY1_P A THR 34 A THR 34 TURN_TY1_P2 ? ? +A SER 36 A SER 36 BEND A SER 36 A SER 36 BEND3 ? ? +A ARG 37 A ARG 37 STRN A ALA 41 A ALA 41 STRN3 ? ? +A SER 43 A SER 43 TURN_TY1_P A ASP 44 A ASP 44 TURN_TY1_P3 ? ? +A GLY 45 A GLY 45 BEND A GLY 45 A GLY 45 BEND4 ? ? +A GLU 47 A GLU 47 STRN A PHE 51 A PHE 51 STRN4 ? ? +A LEU 52 A LEU 52 HELX_LH_PP_P A PRO 53 A PRO 53 HELX_LH_PP_P2 ? ? +A ARG 54 A ARG 54 TURN_TY1_P A GLY 55 A GLY 55 TURN_TY1_P4 ? ? +A GLU 60 A GLU 60 TURN_TY1_P A GLY 61 A GLY 61 TURN_TY1_P5 ? ? +A ILE 63 A ILE 63 STRN A SER 66 A SER 66 STRN5 ? ? +A GLU 67 A GLU 67 TURN_TY1_P A GLU 68 A GLU 68 TURN_TY1_P6 ? ? +A GLY 69 A GLY 69 BEND A GLY 69 A GLY 69 BEND5 ? ? +A VAL 71 A VAL 71 STRN A ALA 76 A ALA 76 STRN6 ? ? +A ALA 77 A ALA 77 HELX_LH_PP_P A ALA 77 A ALA 77 HELX_LH_PP_P3 ? ? +A LYS 78 A LYS 78 STRN A TYR 85 A TYR 85 STRN7 ? ? +A ASP 87 A ASP 87 BEND A ASP 87 A ASP 87 BEND6 ? ? +A PRO 89 A PRO 89 HELX_RH_AL_P A GLY 100 A GLY 100 HELX_RH_AL_P3 ? ? +A ASN 101 A ASN 101 TURN_TY1_P A HIS 103 A HIS 103 TURN_TY1_P7 ? ? +A GLN 107 A GLN 107 STRN A GLU 109 A GLU 109 STRN8 ? ? +A ALA 110 A ALA 110 TURN_TY1_P A GLY 111 A GLY 111 TURN_TY1_P8 ? ? +A TRP 112 A TRP 112 STRN A PHE 116 A PHE 116 STRN9 ? ? +A HIS 119 A HIS 119 HELX_RH_AL_P A GLY 127 A GLY 127 HELX_RH_AL_P4 ? ? +A LEU 128 A LEU 128 TURN_TY1_P A GLY 129 A GLY 129 TURN_TY1_P9 ? ? +A THR 131 A THR 131 STRN A LYS 138 A LYS 138 STRN10 ? ? +A PRO 143 A PRO 143 HELX_RH_3T_P A TYR 146 A TYR 146 HELX_RH_3T_P1 ? ? +A GLY 147 A GLY 147 TURN_TY1_P A GLY 147 A GLY 147 TURN_TY1_P10 ? ? +A SER 150 A SER 150 BEND A SER 150 A SER 150 BEND7 ? ? +# +loop_ +_struct_conf_type.criteria +_struct_conf_type.id +DSSP STRN +DSSP HELX_RH_AL_P +DSSP TURN_TY1_P +DSSP BEND +DSSP HELX_LH_PP_P +DSSP HELX_RH_3T_P +# +_struct_ref.db_code UREE_PROMH +_struct_ref.db_name UNP +_struct_ref.entity_id 1 +_struct_ref.id 1 +_struct_ref.pdbx_align_begin 1 +_struct_ref.pdbx_align_end 161 +_struct_ref.pdbx_db_accession P17090 +_struct_ref.pdbx_db_isoform ? +_struct_ref.pdbx_seq_one_letter_code +;MKKFTQIIDQQKALELTSTEKPKLTLCLTMDERTKSRLKVALSDGQEAGLFLPRGTVLKEGDILLSEEGDVVTIEAAKEQ +VSTVYSDDPLLLARVCYHLGNRHVPLQIEAGWCRYFHDHVLDDMARGLGATVVVGLEKYQPEPGAYGGSSGGHHHHHDHH +H +; +# +_struct_ref_seq.align_id 1 +_struct_ref_seq.db_align_beg 1 +_struct_ref_seq.db_align_end 161 +_struct_ref_seq.pdbx_PDB_id_code AF-P17090-F1 +_struct_ref_seq.pdbx_auth_seq_align_beg 1 +_struct_ref_seq.pdbx_auth_seq_align_end 161 +_struct_ref_seq.pdbx_db_accession P17090 +_struct_ref_seq.pdbx_db_align_beg_ins_code ? +_struct_ref_seq.pdbx_db_align_end_ins_code ? +_struct_ref_seq.pdbx_seq_align_beg_ins_code ? +_struct_ref_seq.pdbx_seq_align_end_ins_code ? +_struct_ref_seq.pdbx_strand_id A +_struct_ref_seq.ref_id 1 +_struct_ref_seq.seq_align_beg 1 +_struct_ref_seq.seq_align_end 161 +# +loop_ +_atom_site.group_PDB +_atom_site.id +_atom_site.type_symbol +_atom_site.label_atom_id +_atom_site.label_alt_id +_atom_site.label_comp_id +_atom_site.label_asym_id +_atom_site.label_entity_id +_atom_site.label_seq_id +_atom_site.pdbx_PDB_ins_code +_atom_site.Cartn_x +_atom_site.Cartn_y +_atom_site.Cartn_z +_atom_site.occupancy +_atom_site.B_iso_or_equiv +_atom_site.pdbx_formal_charge +_atom_site.auth_seq_id +_atom_site.auth_comp_id +_atom_site.auth_asym_id +_atom_site.auth_atom_id +_atom_site.pdbx_PDB_model_num +_atom_site.pdbx_sifts_xref_db_acc +_atom_site.pdbx_sifts_xref_db_name +_atom_site.pdbx_sifts_xref_db_num +_atom_site.pdbx_sifts_xref_db_res +ATOM 1 N N . MET A 1 1 ? -21.898 -7.377 17.195 1.00 86.62 ? 1 MET A N 1 P17090 UNP 1 M +ATOM 2 C CA . MET A 1 1 ? -20.899 -7.055 16.156 1.00 86.62 ? 1 MET A CA 1 P17090 UNP 1 M +ATOM 3 C C . MET A 1 1 ? -21.185 -5.636 15.713 1.00 86.62 ? 1 MET A C 1 P17090 UNP 1 M +ATOM 4 C CB . MET A 1 1 ? -20.990 -8.037 14.973 1.00 86.62 ? 1 MET A CB 1 P17090 UNP 1 M +ATOM 5 O O . MET A 1 1 ? -22.313 -5.405 15.288 1.00 86.62 ? 1 MET A O 1 P17090 UNP 1 M +ATOM 6 C CG . MET A 1 1 ? -19.918 -7.770 13.912 1.00 86.62 ? 1 MET A CG 1 P17090 UNP 1 M +ATOM 7 S SD . MET A 1 1 ? -19.901 -8.933 12.523 1.00 86.62 ? 1 MET A SD 1 P17090 UNP 1 M +ATOM 8 C CE . MET A 1 1 ? -21.298 -8.312 11.556 1.00 86.62 ? 1 MET A CE 1 P17090 UNP 1 M +ATOM 9 N N . LYS A 1 2 ? -20.223 -4.720 15.870 1.00 91.94 ? 2 LYS A N 1 P17090 UNP 2 K +ATOM 10 C CA . LYS A 1 2 ? -20.383 -3.300 15.513 1.00 91.94 ? 2 LYS A CA 1 P17090 UNP 2 K +ATOM 11 C C . LYS A 1 2 ? -20.649 -3.158 14.014 1.00 91.94 ? 2 LYS A C 1 P17090 UNP 2 K +ATOM 12 C CB . LYS A 1 2 ? -19.122 -2.507 15.904 1.00 91.94 ? 2 LYS A CB 1 P17090 UNP 2 K +ATOM 13 O O . LYS A 1 2 ? -20.098 -3.941 13.229 1.00 91.94 ? 2 LYS A O 1 P17090 UNP 2 K +ATOM 14 C CG . LYS A 1 2 ? -18.833 -2.540 17.414 1.00 91.94 ? 2 LYS A CG 1 P17090 UNP 2 K +ATOM 15 C CD . LYS A 1 2 ? -17.567 -1.744 17.760 1.00 91.94 ? 2 LYS A CD 1 P17090 UNP 2 K +ATOM 16 C CE . LYS A 1 2 ? -17.329 -1.789 19.275 1.00 91.94 ? 2 LYS A CE 1 P17090 UNP 2 K +ATOM 17 N NZ . LYS A 1 2 ? -16.329 -0.790 19.717 1.00 91.94 ? 2 LYS A NZ 1 P17090 UNP 2 K +ATOM 18 N N . LYS A 1 3 ? -21.466 -2.185 13.608 1.00 95.44 ? 3 LYS A N 1 P17090 UNP 3 K +ATOM 19 C CA . LYS A 1 3 ? -21.783 -1.955 12.186 1.00 95.44 ? 3 LYS A CA 1 P17090 UNP 3 K +ATOM 20 C C . LYS A 1 3 ? -21.438 -0.540 11.762 1.00 95.44 ? 3 LYS A C 1 P17090 UNP 3 K +ATOM 21 C CB . LYS A 1 3 ? -23.263 -2.205 11.911 1.00 95.44 ? 3 LYS A CB 1 P17090 UNP 3 K +ATOM 22 O O . LYS A 1 3 ? -22.115 0.398 12.162 1.00 95.44 ? 3 LYS A O 1 P17090 UNP 3 K +ATOM 23 C CG . LYS A 1 3 ? -23.705 -3.648 12.164 1.00 95.44 ? 3 LYS A CG 1 P17090 UNP 3 K +ATOM 24 C CD . LYS A 1 3 ? -25.149 -3.738 11.676 1.00 95.44 ? 3 LYS A CD 1 P17090 UNP 3 K +ATOM 25 C CE . LYS A 1 3 ? -25.912 -4.883 12.326 1.00 95.44 ? 3 LYS A CE 1 P17090 UNP 3 K +ATOM 26 N NZ . LYS A 1 3 ? -27.324 -4.457 12.449 1.00 95.44 ? 3 LYS A NZ 1 P17090 UNP 3 K +ATOM 27 N N . PHE A 1 4 ? -20.433 -0.400 10.906 1.00 96.75 ? 4 PHE A N 1 P17090 UNP 4 F +ATOM 28 C CA . PHE A 1 4 ? -20.032 0.878 10.324 1.00 96.75 ? 4 PHE A CA 1 P17090 UNP 4 F +ATOM 29 C C . PHE A 1 4 ? -20.865 1.182 9.083 1.00 96.75 ? 4 PHE A C 1 P17090 UNP 4 F +ATOM 30 C CB . PHE A 1 4 ? -18.533 0.862 10.034 1.00 96.75 ? 4 PHE A CB 1 P17090 UNP 4 F +ATOM 31 O O . PHE A 1 4 ? -20.854 0.411 8.122 1.00 96.75 ? 4 PHE A O 1 P17090 UNP 4 F +ATOM 32 C CG . PHE A 1 4 ? -17.715 0.792 11.304 1.00 96.75 ? 4 PHE A CG 1 P17090 UNP 4 F +ATOM 33 C CD1 . PHE A 1 4 ? -17.497 1.957 12.061 1.00 96.75 ? 4 PHE A CD1 1 P17090 UNP 4 F +ATOM 34 C CD2 . PHE A 1 4 ? -17.260 -0.450 11.784 1.00 96.75 ? 4 PHE A CD2 1 P17090 UNP 4 F +ATOM 35 C CE1 . PHE A 1 4 ? -16.850 1.883 13.305 1.00 96.75 ? 4 PHE A CE1 1 P17090 UNP 4 F +ATOM 36 C CE2 . PHE A 1 4 ? -16.615 -0.523 13.030 1.00 96.75 ? 4 PHE A CE2 1 P17090 UNP 4 F +ATOM 37 C CZ . PHE A 1 4 ? -16.418 0.639 13.793 1.00 96.75 ? 4 PHE A CZ 1 P17090 UNP 4 F +ATOM 38 N N . THR A 1 5 ? -21.604 2.290 9.116 1.00 95.69 ? 5 THR A N 1 P17090 UNP 5 T +ATOM 39 C CA . THR A 1 5 ? -22.664 2.582 8.132 1.00 95.69 ? 5 THR A CA 1 P17090 UNP 5 T +ATOM 40 C C . THR A 1 5 ? -22.413 3.831 7.301 1.00 95.69 ? 5 THR A C 1 P17090 UNP 5 T +ATOM 41 C CB . THR A 1 5 ? -24.027 2.711 8.823 1.00 95.69 ? 5 THR A CB 1 P17090 UNP 5 T +ATOM 42 O O . THR A 1 5 ? -23.005 3.989 6.234 1.00 95.69 ? 5 THR A O 1 P17090 UNP 5 T +ATOM 43 C CG2 . THR A 1 5 ? -24.482 1.389 9.435 1.00 95.69 ? 5 THR A CG2 1 P17090 UNP 5 T +ATOM 44 O OG1 . THR A 1 5 ? -23.962 3.658 9.865 1.00 95.69 ? 5 THR A OG1 1 P17090 UNP 5 T +ATOM 45 N N . GLN A 1 6 ? -21.528 4.720 7.753 1.00 94.88 ? 6 GLN A N 1 P17090 UNP 6 Q +ATOM 46 C CA . GLN A 1 6 ? -21.265 5.986 7.076 1.00 94.88 ? 6 GLN A CA 1 P17090 UNP 6 Q +ATOM 47 C C . GLN A 1 6 ? -19.831 6.467 7.295 1.00 94.88 ? 6 GLN A C 1 P17090 UNP 6 Q +ATOM 48 C CB . GLN A 1 6 ? -22.295 7.039 7.528 1.00 94.88 ? 6 GLN A CB 1 P17090 UNP 6 Q +ATOM 49 O O . GLN A 1 6 ? -19.219 6.183 8.327 1.00 94.88 ? 6 GLN A O 1 P17090 UNP 6 Q +ATOM 50 C CG . GLN A 1 6 ? -22.160 7.418 9.011 1.00 94.88 ? 6 GLN A CG 1 P17090 UNP 6 Q +ATOM 51 C CD . GLN A 1 6 ? -23.319 8.274 9.503 1.00 94.88 ? 6 GLN A CD 1 P17090 UNP 6 Q +ATOM 52 N NE2 . GLN A 1 6 ? -24.030 7.835 10.518 1.00 94.88 ? 6 GLN A NE2 1 P17090 UNP 6 Q +ATOM 53 O OE1 . GLN A 1 6 ? -23.598 9.361 9.023 1.00 94.88 ? 6 GLN A OE1 1 P17090 UNP 6 Q +ATOM 54 N N . ILE A 1 7 ? -19.339 7.235 6.325 1.00 95.94 ? 7 ILE A N 1 P17090 UNP 7 I +ATOM 55 C CA . ILE A 1 7 ? -18.113 8.026 6.438 1.00 95.94 ? 7 ILE A CA 1 P17090 UNP 7 I +ATOM 56 C C . ILE A 1 7 ? -18.488 9.367 7.078 1.00 95.94 ? 7 ILE A C 1 P17090 UNP 7 I +ATOM 57 C CB . ILE A 1 7 ? -17.439 8.218 5.058 1.00 95.94 ? 7 ILE A CB 1 P17090 UNP 7 I +ATOM 58 O O . ILE A 1 7 ? -19.509 9.957 6.718 1.00 95.94 ? 7 ILE A O 1 P17090 UNP 7 I +ATOM 59 C CG1 . ILE A 1 7 ? -17.171 6.868 4.350 1.00 95.94 ? 7 ILE A CG1 1 P17090 UNP 7 I +ATOM 60 C CG2 . ILE A 1 7 ? -16.118 8.995 5.216 1.00 95.94 ? 7 ILE A CG2 1 P17090 UNP 7 I +ATOM 61 C CD1 . ILE A 1 7 ? -16.811 7.021 2.869 1.00 95.94 ? 7 ILE A CD1 1 P17090 UNP 7 I +ATOM 62 N N . ILE A 1 8 ? -17.679 9.845 8.018 1.00 94.69 ? 8 ILE A N 1 P17090 UNP 8 I +ATOM 63 C CA . ILE A 1 8 ? -17.825 11.157 8.654 1.00 94.69 ? 8 ILE A CA 1 P17090 UNP 8 I +ATOM 64 C C . ILE A 1 8 ? -16.578 12.010 8.412 1.00 94.69 ? 8 ILE A C 1 P17090 UNP 8 I +ATOM 65 C CB . ILE A 1 8 ? -18.163 11.026 10.156 1.00 94.69 ? 8 ILE A CB 1 P17090 UNP 8 I +ATOM 66 O O . ILE A 1 8 ? -15.492 11.487 8.169 1.00 94.69 ? 8 ILE A O 1 P17090 UNP 8 I +ATOM 67 C CG1 . ILE A 1 8 ? -17.072 10.282 10.958 1.00 94.69 ? 8 ILE A CG1 1 P17090 UNP 8 I +ATOM 68 C CG2 . ILE A 1 8 ? -19.539 10.351 10.321 1.00 94.69 ? 8 ILE A CG2 1 P17090 UNP 8 I +ATOM 69 C CD1 . ILE A 1 8 ? -17.257 10.387 12.476 1.00 94.69 ? 8 ILE A CD1 1 P17090 UNP 8 I +ATOM 70 N N . ASP A 1 9 ? -16.732 13.331 8.477 1.00 92.25 ? 9 ASP A N 1 P17090 UNP 9 D +ATOM 71 C CA . ASP A 1 9 ? -15.594 14.246 8.432 1.00 92.25 ? 9 ASP A CA 1 P17090 UNP 9 D +ATOM 72 C C . ASP A 1 9 ? -14.800 14.253 9.755 1.00 92.25 ? 9 ASP A C 1 P17090 UNP 9 D +ATOM 73 C CB . ASP A 1 9 ? -16.063 15.647 8.010 1.00 92.25 ? 9 ASP A CB 1 P17090 UNP 9 D +ATOM 74 O O . ASP A 1 9 ? -15.230 13.732 10.791 1.00 92.25 ? 9 ASP A O 1 P17090 UNP 9 D +ATOM 75 C CG . ASP A 1 9 ? -17.004 16.271 9.038 1.00 92.25 ? 9 ASP A CG 1 P17090 UNP 9 D +ATOM 76 O OD1 . ASP A 1 9 ? -16.540 16.471 10.180 1.00 92.25 ? 9 ASP A OD1 1 P17090 UNP 9 D +ATOM 77 O OD2 . ASP A 1 9 ? -18.181 16.488 8.689 1.00 92.25 ? 9 ASP A OD2 1 P17090 UNP 9 D +ATOM 78 N N . GLN A 1 10 ? -13.613 14.863 9.716 1.00 86.69 ? 10 GLN A N 1 P17090 UNP 10 Q +ATOM 79 C CA . GLN A 1 10 ? -12.721 14.946 10.873 1.00 86.69 ? 10 GLN A CA 1 P17090 UNP 10 Q +ATOM 80 C C . GLN A 1 10 ? -13.297 15.772 12.030 1.00 86.69 ? 10 GLN A C 1 P17090 UNP 10 Q +ATOM 81 C CB . GLN A 1 10 ? -11.366 15.537 10.454 1.00 86.69 ? 10 GLN A CB 1 P17090 UNP 10 Q +ATOM 82 O O . GLN A 1 10 ? -12.977 15.481 13.178 1.00 86.69 ? 10 GLN A O 1 P17090 UNP 10 Q +ATOM 83 C CG . GLN A 1 10 ? -10.570 14.608 9.527 1.00 86.69 ? 10 GLN A CG 1 P17090 UNP 10 Q +ATOM 84 C CD . GLN A 1 10 ? -9.169 15.129 9.214 1.00 86.69 ? 10 GLN A CD 1 P17090 UNP 10 Q +ATOM 85 N NE2 . GLN A 1 10 ? -8.384 14.381 8.470 1.00 86.69 ? 10 GLN A NE2 1 P17090 UNP 10 Q +ATOM 86 O OE1 . GLN A 1 10 ? -8.743 16.197 9.621 1.00 86.69 ? 10 GLN A OE1 1 P17090 UNP 10 Q +ATOM 87 N N . GLN A 1 11 ? -14.129 16.784 11.765 1.00 86.88 ? 11 GLN A N 1 P17090 UNP 11 Q +ATOM 88 C CA . GLN A 1 11 ? -14.695 17.627 12.822 1.00 86.88 ? 11 GLN A CA 1 P17090 UNP 11 Q +ATOM 89 C C . GLN A 1 11 ? -15.701 16.827 13.647 1.00 86.88 ? 11 GLN A C 1 P17090 UNP 11 Q +ATOM 90 C CB . GLN A 1 11 ? -15.350 18.883 12.226 1.00 86.88 ? 11 GLN A CB 1 P17090 UNP 11 Q +ATOM 91 O O . GLN A 1 11 ? -15.555 16.726 14.864 1.00 86.88 ? 11 GLN A O 1 P17090 UNP 11 Q +ATOM 92 C CG . GLN A 1 11 ? -14.323 19.822 11.581 1.00 86.88 ? 11 GLN A CG 1 P17090 UNP 11 Q +ATOM 93 C CD . GLN A 1 11 ? -14.962 21.074 10.987 1.00 86.88 ? 11 GLN A CD 1 P17090 UNP 11 Q +ATOM 94 N NE2 . GLN A 1 11 ? -14.270 22.192 10.989 1.00 86.88 ? 11 GLN A NE2 1 P17090 UNP 11 Q +ATOM 95 O OE1 . GLN A 1 11 ? -16.069 21.092 10.483 1.00 86.88 ? 11 GLN A OE1 1 P17090 UNP 11 Q +ATOM 96 N N . LYS A 1 12 ? -16.637 16.150 12.977 1.00 86.94 ? 12 LYS A N 1 P17090 UNP 12 K +ATOM 97 C CA . LYS A 1 12 ? -17.603 15.251 13.612 1.00 86.94 ? 12 LYS A CA 1 P17090 UNP 12 K +ATOM 98 C C . LYS A 1 12 ? -16.915 14.100 14.343 1.00 86.94 ? 12 LYS A C 1 P17090 UNP 12 K +ATOM 99 C CB . LYS A 1 12 ? -18.559 14.751 12.526 1.00 86.94 ? 12 LYS A CB 1 P17090 UNP 12 K +ATOM 100 O O . LYS A 1 12 ? -17.359 13.696 15.415 1.00 86.94 ? 12 LYS A O 1 P17090 UNP 12 K +ATOM 101 C CG . LYS A 1 12 ? -19.693 13.904 13.116 1.00 86.94 ? 12 LYS A CG 1 P17090 UNP 12 K +ATOM 102 C CD . LYS A 1 12 ? -20.723 13.589 12.031 1.00 86.94 ? 12 LYS A CD 1 P17090 UNP 12 K +ATOM 103 C CE . LYS A 1 12 ? -21.835 12.713 12.609 1.00 86.94 ? 12 LYS A CE 1 P17090 UNP 12 K +ATOM 104 N NZ . LYS A 1 12 ? -22.796 12.314 11.551 1.00 86.94 ? 12 LYS A NZ 1 P17090 UNP 12 K +ATOM 105 N N . ALA A 1 13 ? -15.819 13.578 13.791 1.00 84.44 ? 13 ALA A N 1 P17090 UNP 13 A +ATOM 106 C CA . ALA A 1 13 ? -15.027 12.558 14.468 1.00 84.44 ? 13 ALA A CA 1 P17090 UNP 13 A +ATOM 107 C C . ALA A 1 13 ? -14.459 13.074 15.796 1.00 84.44 ? 13 ALA A C 1 P17090 UNP 13 A +ATOM 108 C CB . ALA A 1 13 ? -13.922 12.080 13.529 1.00 84.44 ? 13 ALA A CB 1 P17090 UNP 13 A +ATOM 109 O O . ALA A 1 13 ? -14.640 12.414 16.814 1.00 84.44 ? 13 ALA A O 1 P17090 UNP 13 A +ATOM 110 N N . LEU A 1 14 ? -13.844 14.262 15.793 1.00 85.12 ? 14 LEU A N 1 P17090 UNP 14 L +ATOM 111 C CA . LEU A 1 14 ? -13.285 14.899 16.990 1.00 85.12 ? 14 LEU A CA 1 P17090 UNP 14 L +ATOM 112 C C . LEU A 1 14 ? -14.358 15.224 18.037 1.00 85.12 ? 14 LEU A C 1 P17090 UNP 14 L +ATOM 113 C CB . LEU A 1 14 ? -12.532 16.177 16.579 1.00 85.12 ? 14 LEU A CB 1 P17090 UNP 14 L +ATOM 114 O O . LEU A 1 14 ? -14.099 15.092 19.230 1.00 85.12 ? 14 LEU A O 1 P17090 UNP 14 L +ATOM 115 C CG . LEU A 1 14 ? -11.214 15.928 15.825 1.00 85.12 ? 14 LEU A CG 1 P17090 UNP 14 L +ATOM 116 C CD1 . LEU A 1 14 ? -10.724 17.238 15.203 1.00 85.12 ? 14 LEU A CD1 1 P17090 UNP 14 L +ATOM 117 C CD2 . LEU A 1 14 ? -10.112 15.399 16.742 1.00 85.12 ? 14 LEU A CD2 1 P17090 UNP 14 L +ATOM 118 N N . GLU A 1 15 ? -15.560 15.623 17.626 1.00 86.25 ? 15 GLU A N 1 P17090 UNP 15 E +ATOM 119 C CA . GLU A 1 15 ? -16.683 15.844 18.548 1.00 86.25 ? 15 GLU A CA 1 P17090 UNP 15 E +ATOM 120 C C . GLU A 1 15 ? -17.076 14.555 19.287 1.00 86.25 ? 15 GLU A C 1 P17090 UNP 15 E +ATOM 121 C CB . GLU A 1 15 ? -17.888 16.392 17.774 1.00 86.25 ? 15 GLU A CB 1 P17090 UNP 15 E +ATOM 122 O O . GLU A 1 15 ? -17.303 14.573 20.497 1.00 86.25 ? 15 GLU A O 1 P17090 UNP 15 E +ATOM 123 C CG . GLU A 1 15 ? -17.688 17.848 17.326 1.00 86.25 ? 15 GLU A CG 1 P17090 UNP 15 E +ATOM 124 C CD . GLU A 1 15 ? -18.808 18.356 16.402 1.00 86.25 ? 15 GLU A CD 1 P17090 UNP 15 E +ATOM 125 O OE1 . GLU A 1 15 ? -18.700 19.528 15.976 1.00 86.25 ? 15 GLU A OE1 1 P17090 UNP 15 E +ATOM 126 O OE2 . GLU A 1 15 ? -19.767 17.593 16.133 1.00 86.25 ? 15 GLU A OE2 1 P17090 UNP 15 E +ATOM 127 N N . LEU A 1 16 ? -17.101 13.422 18.579 1.00 82.00 ? 16 LEU A N 1 P17090 UNP 16 L +ATOM 128 C CA . LEU A 1 16 ? -17.480 12.120 19.137 1.00 82.00 ? 16 LEU A CA 1 P17090 UNP 16 L +ATOM 129 C C . LEU A 1 16 ? -16.395 11.506 20.031 1.00 82.00 ? 16 LEU A C 1 P17090 UNP 16 L +ATOM 130 C CB . LEU A 1 16 ? -17.824 11.177 17.973 1.00 82.00 ? 16 LEU A CB 1 P17090 UNP 16 L +ATOM 131 O O . LEU A 1 16 ? -16.702 10.769 20.966 1.00 82.00 ? 16 LEU A O 1 P17090 UNP 16 L +ATOM 132 C CG . LEU A 1 16 ? -19.119 11.551 17.231 1.00 82.00 ? 16 LEU A CG 1 P17090 UNP 16 L +ATOM 133 C CD1 . LEU A 1 16 ? -19.215 10.728 15.948 1.00 82.00 ? 16 LEU A CD1 1 P17090 UNP 16 L +ATOM 134 C CD2 . LEU A 1 16 ? -20.366 11.262 18.072 1.00 82.00 ? 16 LEU A CD2 1 P17090 UNP 16 L +ATOM 135 N N . THR A 1 17 ? -15.125 11.807 19.771 1.00 78.44 ? 17 THR A N 1 P17090 UNP 17 T +ATOM 136 C CA . THR A 1 17 ? -13.970 11.234 20.481 1.00 78.44 ? 17 THR A CA 1 P17090 UNP 17 T +ATOM 137 C C . THR A 1 17 ? -13.412 12.146 21.574 1.00 78.44 ? 17 THR A C 1 P17090 UNP 17 T +ATOM 138 C CB . THR A 1 17 ? -12.864 10.872 19.489 1.00 78.44 ? 17 THR A CB 1 P17090 UNP 17 T +ATOM 139 O O . THR A 1 17 ? -12.296 11.926 22.044 1.00 78.44 ? 17 THR A O 1 P17090 UNP 17 T +ATOM 140 C CG2 . THR A 1 17 ? -13.272 9.764 18.516 1.00 78.44 ? 17 THR A CG2 1 P17090 UNP 17 T +ATOM 141 O OG1 . THR A 1 17 ? -12.577 12.031 18.759 1.00 78.44 ? 17 THR A OG1 1 P17090 UNP 17 T +ATOM 142 N N . SER A 1 18 ? -14.156 13.173 22.005 1.00 79.31 ? 18 SER A N 1 P17090 UNP 18 S +ATOM 143 C CA . SER A 1 18 ? -13.672 14.173 22.974 1.00 79.31 ? 18 SER A CA 1 P17090 UNP 18 S +ATOM 144 C C . SER A 1 18 ? -12.345 14.821 22.545 1.00 79.31 ? 18 SER A C 1 P17090 UNP 18 S +ATOM 145 C CB . SER A 1 18 ? -13.582 13.591 24.393 1.00 79.31 ? 18 SER A CB 1 P17090 UNP 18 S +ATOM 146 O O . SER A 1 18 ? -11.419 14.959 23.340 1.00 79.31 ? 18 SER A O 1 P17090 UNP 18 S +ATOM 147 O OG . SER A 1 18 ? -14.821 13.035 24.789 1.00 79.31 ? 18 SER A OG 1 P17090 UNP 18 S +ATOM 148 N N . THR A 1 19 ? -12.250 15.224 21.276 1.00 71.88 ? 19 THR A N 1 P17090 UNP 19 T +ATOM 149 C CA . THR A 1 19 ? -11.098 15.863 20.605 1.00 71.88 ? 19 THR A CA 1 P17090 UNP 19 T +ATOM 150 C C . THR A 1 19 ? -9.849 14.997 20.404 1.00 71.88 ? 19 THR A C 1 P17090 UNP 19 T +ATOM 151 C CB . THR A 1 19 ? -10.754 17.250 21.183 1.00 71.88 ? 19 THR A CB 1 P17090 UNP 19 T +ATOM 152 O O . THR A 1 19 ? -8.827 15.494 19.930 1.00 71.88 ? 19 THR A O 1 P17090 UNP 19 T +ATOM 153 C CG2 . THR A 1 19 ? -11.952 18.198 21.172 1.00 71.88 ? 19 THR A CG2 1 P17090 UNP 19 T +ATOM 154 O OG1 . THR A 1 19 ? -10.286 17.181 22.510 1.00 71.88 ? 19 THR A OG1 1 P17090 UNP 19 T +ATOM 155 N N . GLU A 1 20 ? -9.916 13.693 20.682 1.00 75.31 ? 20 GLU A N 1 P17090 UNP 20 E +ATOM 156 C CA . GLU A 1 20 ? -8.833 12.757 20.359 1.00 75.31 ? 20 GLU A CA 1 P17090 UNP 20 E +ATOM 157 C C . GLU A 1 20 ? -8.986 12.179 18.943 1.00 75.31 ? 20 GLU A C 1 P17090 UNP 20 E +ATOM 158 C CB . GLU A 1 20 ? -8.732 11.640 21.413 1.00 75.31 ? 20 GLU A CB 1 P17090 UNP 20 E +ATOM 159 O O . GLU A 1 20 ? -10.084 12.076 18.405 1.00 75.31 ? 20 GLU A O 1 P17090 UNP 20 E +ATOM 160 C CG . GLU A 1 20 ? -8.401 12.183 22.815 1.00 75.31 ? 20 GLU A CG 1 P17090 UNP 20 E +ATOM 161 C CD . GLU A 1 20 ? -8.012 11.089 23.832 1.00 75.31 ? 20 GLU A CD 1 P17090 UNP 20 E +ATOM 162 O OE1 . GLU A 1 20 ? -7.272 11.414 24.785 1.00 75.31 ? 20 GLU A OE1 1 P17090 UNP 20 E +ATOM 163 O OE2 . GLU A 1 20 ? -8.387 9.895 23.677 1.00 75.31 ? 20 GLU A OE2 1 P17090 UNP 20 E +ATOM 164 N N . LYS A 1 21 ? -7.899 11.737 18.307 1.00 74.06 ? 21 LYS A N 1 P17090 UNP 21 K +ATOM 165 C CA . LYS A 1 21 ? -8.044 10.905 17.101 1.00 74.06 ? 21 LYS A CA 1 P17090 UNP 21 K +ATOM 166 C C . LYS A 1 21 ? -8.690 9.558 17.470 1.00 74.06 ? 21 LYS A C 1 P17090 UNP 21 K +ATOM 167 C CB . LYS A 1 21 ? -6.701 10.697 16.395 1.00 74.06 ? 21 LYS A CB 1 P17090 UNP 21 K +ATOM 168 O O . LYS A 1 21 ? -8.428 9.059 18.568 1.00 74.06 ? 21 LYS A O 1 P17090 UNP 21 K +ATOM 169 C CG . LYS A 1 21 ? -6.240 11.977 15.687 1.00 74.06 ? 21 LYS A CG 1 P17090 UNP 21 K +ATOM 170 C CD . LYS A 1 21 ? -4.967 11.697 14.883 1.00 74.06 ? 21 LYS A CD 1 P17090 UNP 21 K +ATOM 171 C CE . LYS A 1 21 ? -4.539 12.952 14.120 1.00 74.06 ? 21 LYS A CE 1 P17090 UNP 21 K +ATOM 172 N NZ . LYS A 1 21 ? -3.349 12.683 13.275 1.00 74.06 ? 21 LYS A NZ 1 P17090 UNP 21 K +ATOM 173 N N . PRO A 1 22 ? -9.482 8.934 16.575 1.00 76.56 ? 22 PRO A N 1 P17090 UNP 22 P +ATOM 174 C CA . PRO A 1 22 ? -10.021 7.600 16.825 1.00 76.56 ? 22 PRO A CA 1 P17090 UNP 22 P +ATOM 175 C C . PRO A 1 22 ? -8.891 6.609 17.134 1.00 76.56 ? 22 PRO A C 1 P17090 UNP 22 P +ATOM 176 C CB . PRO A 1 22 ? -10.795 7.212 15.559 1.00 76.56 ? 22 PRO A CB 1 P17090 UNP 22 P +ATOM 177 O O . PRO A 1 22 ? -7.915 6.530 16.391 1.00 76.56 ? 22 PRO A O 1 P17090 UNP 22 P +ATOM 178 C CG . PRO A 1 22 ? -11.109 8.555 14.900 1.00 76.56 ? 22 PRO A CG 1 P17090 UNP 22 P +ATOM 179 C CD . PRO A 1 22 ? -9.913 9.423 15.273 1.00 76.56 ? 22 PRO A CD 1 P17090 UNP 22 P +ATOM 180 N N . LYS A 1 23 ? -9.010 5.863 18.239 1.00 87.94 ? 23 LYS A N 1 P17090 UNP 23 K +ATOM 181 C CA . LYS A 1 23 ? -7.975 4.912 18.696 1.00 87.94 ? 23 LYS A CA 1 P17090 UNP 23 K +ATOM 182 C C . LYS A 1 23 ? -7.950 3.615 17.889 1.00 87.94 ? 23 LYS A C 1 P17090 UNP 23 K +ATOM 183 C CB . LYS A 1 23 ? -8.159 4.610 20.196 1.00 87.94 ? 23 LYS A CB 1 P17090 UNP 23 K +ATOM 184 O O . LYS A 1 23 ? -6.932 2.932 17.860 1.00 87.94 ? 23 LYS A O 1 P17090 UNP 23 K +ATOM 185 C CG . LYS A 1 23 ? -7.783 5.833 21.040 1.00 87.94 ? 23 LYS A CG 1 P17090 UNP 23 K +ATOM 186 C CD . LYS A 1 23 ? -7.999 5.652 22.551 1.00 87.94 ? 23 LYS A CD 1 P17090 UNP 23 K +ATOM 187 C CE . LYS A 1 23 ? -7.552 6.982 23.173 1.00 87.94 ? 23 LYS A CE 1 P17090 UNP 23 K +ATOM 188 N NZ . LYS A 1 23 ? -8.095 7.274 24.516 1.00 87.94 ? 23 LYS A NZ 1 P17090 UNP 23 K +ATOM 189 N N . LEU A 1 24 ? -9.075 3.267 17.272 1.00 94.44 ? 24 LEU A N 1 P17090 UNP 24 L +ATOM 190 C CA . LEU A 1 24 ? -9.250 2.035 16.515 1.00 94.44 ? 24 LEU A CA 1 P17090 UNP 24 L +ATOM 191 C C . LEU A 1 24 ? -9.072 2.296 15.020 1.00 94.44 ? 24 LEU A C 1 P17090 UNP 24 L +ATOM 192 C CB . LEU A 1 24 ? -10.625 1.436 16.844 1.00 94.44 ? 24 LEU A CB 1 P17090 UNP 24 L +ATOM 193 O O . LEU A 1 24 ? -9.527 3.317 14.493 1.00 94.44 ? 24 LEU A O 1 P17090 UNP 24 L +ATOM 194 C CG . LEU A 1 24 ? -10.789 0.935 18.289 1.00 94.44 ? 24 LEU A CG 1 P17090 UNP 24 L +ATOM 195 C CD1 . LEU A 1 24 ? -12.225 0.461 18.511 1.00 94.44 ? 24 LEU A CD1 1 P17090 UNP 24 L +ATOM 196 C CD2 . LEU A 1 24 ? -9.847 -0.222 18.614 1.00 94.44 ? 24 LEU A CD2 1 P17090 UNP 24 L +ATOM 197 N N . THR A 1 25 ? -8.439 1.347 14.337 1.00 96.75 ? 25 THR A N 1 P17090 UNP 25 T +ATOM 198 C CA . THR A 1 25 ? -8.218 1.400 12.892 1.00 96.75 ? 25 THR A CA 1 P17090 UNP 25 T +ATOM 199 C C . THR A 1 25 ? -8.768 0.161 12.201 1.00 96.75 ? 25 THR A C 1 P17090 UNP 25 T +ATOM 200 C CB . THR A 1 25 ? -6.749 1.670 12.503 1.00 96.75 ? 25 THR A CB 1 P17090 UNP 25 T +ATOM 201 O O . THR A 1 25 ? -9.012 -0.878 12.822 1.00 96.75 ? 25 THR A O 1 P17090 UNP 25 T +ATOM 202 C CG2 . THR A 1 25 ? -6.198 2.915 13.200 1.00 96.75 ? 25 THR A CG2 1 P17090 UNP 25 T +ATOM 203 O OG1 . THR A 1 25 ? -5.894 0.596 12.808 1.00 96.75 ? 25 THR A OG1 1 P17090 UNP 25 T +ATOM 204 N N . LEU A 1 26 ? -9.005 0.305 10.900 1.00 97.00 ? 26 LEU A N 1 P17090 UNP 26 L +ATOM 205 C CA . LEU A 1 26 ? -9.389 -0.759 9.984 1.00 97.00 ? 26 LEU A CA 1 P17090 UNP 26 L +ATOM 206 C C . LEU A 1 26 ? -8.390 -0.785 8.830 1.00 97.00 ? 26 LEU A C 1 P17090 UNP 26 L +ATOM 207 C CB . LEU A 1 26 ? -10.822 -0.501 9.485 1.00 97.00 ? 26 LEU A CB 1 P17090 UNP 26 L +ATOM 208 O O . LEU A 1 26 ? -8.444 0.070 7.946 1.00 97.00 ? 26 LEU A O 1 P17090 UNP 26 L +ATOM 209 C CG . LEU A 1 26 ? -11.925 -1.077 10.381 1.00 97.00 ? 26 LEU A CG 1 P17090 UNP 26 L +ATOM 210 C CD1 . LEU A 1 26 ? -13.289 -0.707 9.803 1.00 97.00 ? 26 LEU A CD1 1 P17090 UNP 26 L +ATOM 211 C CD2 . LEU A 1 26 ? -11.832 -2.602 10.409 1.00 97.00 ? 26 LEU A CD2 1 P17090 UNP 26 L +ATOM 212 N N . CYS A 1 27 ? -7.488 -1.766 8.852 1.00 97.75 ? 27 CYS A N 1 P17090 UNP 27 C +ATOM 213 C CA . CYS A 1 27 ? -6.506 -1.980 7.796 1.00 97.75 ? 27 CYS A CA 1 P17090 UNP 27 C +ATOM 214 C C . CYS A 1 27 ? -7.133 -2.811 6.669 1.00 97.75 ? 27 CYS A C 1 P17090 UNP 27 C +ATOM 215 C CB . CYS A 1 27 ? -5.258 -2.626 8.402 1.00 97.75 ? 27 CYS A CB 1 P17090 UNP 27 C +ATOM 216 O O . CYS A 1 27 ? -7.443 -3.981 6.880 1.00 97.75 ? 27 CYS A O 1 P17090 UNP 27 C +ATOM 217 S SG . CYS A 1 27 ? -3.929 -2.682 7.167 1.00 97.75 ? 27 CYS A SG 1 P17090 UNP 27 C +ATOM 218 N N . LEU A 1 28 ? -7.354 -2.201 5.502 1.00 98.12 ? 28 LEU A N 1 P17090 UNP 28 L +ATOM 219 C CA . LEU A 1 28 ? -8.092 -2.798 4.385 1.00 98.12 ? 28 LEU A CA 1 P17090 UNP 28 L +ATOM 220 C C . LEU A 1 28 ? -7.308 -2.696 3.072 1.00 98.12 ? 28 LEU A C 1 P17090 UNP 28 L +ATOM 221 C CB . LEU A 1 28 ? -9.462 -2.110 4.236 1.00 98.12 ? 28 LEU A CB 1 P17090 UNP 28 L +ATOM 222 O O . LEU A 1 28 ? -6.778 -1.636 2.717 1.00 98.12 ? 28 LEU A O 1 P17090 UNP 28 L +ATOM 223 C CG . LEU A 1 28 ? -10.412 -2.191 5.442 1.00 98.12 ? 28 LEU A CG 1 P17090 UNP 28 L +ATOM 224 C CD1 . LEU A 1 28 ? -11.693 -1.414 5.121 1.00 98.12 ? 28 LEU A CD1 1 P17090 UNP 28 L +ATOM 225 C CD2 . LEU A 1 28 ? -10.813 -3.621 5.805 1.00 98.12 ? 28 LEU A CD2 1 P17090 UNP 28 L +ATOM 226 N N . THR A 1 29 ? -7.294 -3.787 2.312 1.00 97.62 ? 29 THR A N 1 P17090 UNP 29 T +ATOM 227 C CA . THR A 1 29 ? -6.827 -3.815 0.917 1.00 97.62 ? 29 THR A CA 1 P17090 UNP 29 T +ATOM 228 C C . THR A 1 29 ? -7.699 -2.934 0.021 1.00 97.62 ? 29 THR A C 1 P17090 UNP 29 T +ATOM 229 C CB . THR A 1 29 ? -6.811 -5.244 0.353 1.00 97.62 ? 29 THR A CB 1 P17090 UNP 29 T +ATOM 230 O O . THR A 1 29 ? -8.815 -2.545 0.374 1.00 97.62 ? 29 THR A O 1 P17090 UNP 29 T +ATOM 231 C CG2 . THR A 1 29 ? -5.909 -6.190 1.146 1.00 97.62 ? 29 THR A CG2 1 P17090 UNP 29 T +ATOM 232 O OG1 . THR A 1 29 ? -8.111 -5.776 0.368 1.00 97.62 ? 29 THR A OG1 1 P17090 UNP 29 T +ATOM 233 N N . MET A 1 30 ? -7.206 -2.597 -1.166 1.00 96.12 ? 30 MET A N 1 P17090 UNP 30 M +ATOM 234 C CA . MET A 1 30 ? -7.967 -1.868 -2.177 1.00 96.12 ? 30 MET A CA 1 P17090 UNP 30 M +ATOM 235 C C . MET A 1 30 ? -9.274 -2.572 -2.551 1.00 96.12 ? 30 MET A C 1 P17090 UNP 30 M +ATOM 236 C CB . MET A 1 30 ? -7.106 -1.720 -3.431 1.00 96.12 ? 30 MET A CB 1 P17090 UNP 30 M +ATOM 237 O O . MET A 1 30 ? -10.301 -1.900 -2.635 1.00 96.12 ? 30 MET A O 1 P17090 UNP 30 M +ATOM 238 C CG . MET A 1 30 ? -6.217 -0.482 -3.425 1.00 96.12 ? 30 MET A CG 1 P17090 UNP 30 M +ATOM 239 S SD . MET A 1 30 ? -7.077 1.102 -3.242 1.00 96.12 ? 30 MET A SD 1 P17090 UNP 30 M +ATOM 240 C CE . MET A 1 30 ? -8.374 1.000 -4.486 1.00 96.12 ? 30 MET A CE 1 P17090 UNP 30 M +ATOM 241 N N . ASP A 1 31 ? -9.268 -3.899 -2.741 1.00 94.56 ? 31 ASP A N 1 P17090 UNP 31 D +ATOM 242 C CA . ASP A 1 31 ? -10.496 -4.643 -3.063 1.00 94.56 ? 31 ASP A CA 1 P17090 UNP 31 D +ATOM 243 C C . ASP A 1 31 ? -11.521 -4.530 -1.925 1.00 94.56 ? 31 ASP A C 1 P17090 UNP 31 D +ATOM 244 C CB . ASP A 1 31 ? -10.197 -6.119 -3.382 1.00 94.56 ? 31 ASP A CB 1 P17090 UNP 31 D +ATOM 245 O O . ASP A 1 31 ? -12.689 -4.219 -2.169 1.00 94.56 ? 31 ASP A O 1 P17090 UNP 31 D +ATOM 246 C CG . ASP A 1 31 ? -11.482 -6.867 -3.775 1.00 94.56 ? 31 ASP A CG 1 P17090 UNP 31 D +ATOM 247 O OD1 . ASP A 1 31 ? -12.147 -6.478 -4.762 1.00 94.56 ? 31 ASP A OD1 1 P17090 UNP 31 D +ATOM 248 O OD2 . ASP A 1 31 ? -11.925 -7.798 -3.066 1.00 94.56 ? 31 ASP A OD2 1 P17090 UNP 31 D +ATOM 249 N N . GLU A 1 32 ? -11.079 -4.686 -0.674 1.00 96.88 ? 32 GLU A N 1 P17090 UNP 32 E +ATOM 250 C CA . GLU A 1 32 ? -11.928 -4.546 0.514 1.00 96.88 ? 32 GLU A CA 1 P17090 UNP 32 E +ATOM 251 C C . GLU A 1 32 ? -12.510 -3.136 0.651 1.00 96.88 ? 32 GLU A C 1 P17090 UNP 32 E +ATOM 252 C CB . GLU A 1 32 ? -11.122 -4.901 1.764 1.00 96.88 ? 32 GLU A CB 1 P17090 UNP 32 E +ATOM 253 O O . GLU A 1 32 ? -13.695 -2.985 0.954 1.00 96.88 ? 32 GLU A O 1 P17090 UNP 32 E +ATOM 254 C CG . GLU A 1 32 ? -10.854 -6.411 1.846 1.00 96.88 ? 32 GLU A CG 1 P17090 UNP 32 E +ATOM 255 C CD . GLU A 1 32 ? -9.845 -6.740 2.948 1.00 96.88 ? 32 GLU A CD 1 P17090 UNP 32 E +ATOM 256 O OE1 . GLU A 1 32 ? -10.079 -7.726 3.676 1.00 96.88 ? 32 GLU A OE1 1 P17090 UNP 32 E +ATOM 257 O OE2 . GLU A 1 32 ? -8.828 -6.010 3.020 1.00 96.88 ? 32 GLU A OE2 1 P17090 UNP 32 E +ATOM 258 N N . ARG A 1 33 ? -11.720 -2.099 0.342 1.00 96.38 ? 33 ARG A N 1 P17090 UNP 33 R +ATOM 259 C CA . ARG A 1 33 ? -12.152 -0.692 0.374 1.00 96.38 ? 33 ARG A CA 1 P17090 UNP 33 R +ATOM 260 C C . ARG A 1 33 ? -13.213 -0.336 -0.664 1.00 96.38 ? 33 ARG A C 1 P17090 UNP 33 R +ATOM 261 C CB . ARG A 1 33 ? -10.926 0.226 0.263 1.00 96.38 ? 33 ARG A CB 1 P17090 UNP 33 R +ATOM 262 O O . ARG A 1 33 ? -13.824 0.724 -0.547 1.00 96.38 ? 33 ARG A O 1 P17090 UNP 33 R +ATOM 263 C CG . ARG A 1 33 ? -10.193 0.250 1.610 1.00 96.38 ? 33 ARG A CG 1 P17090 UNP 33 R +ATOM 264 C CD . ARG A 1 33 ? -9.084 1.290 1.676 1.00 96.38 ? 33 ARG A CD 1 P17090 UNP 33 R +ATOM 265 N NE . ARG A 1 33 ? -7.962 0.912 0.820 1.00 96.38 ? 33 ARG A NE 1 P17090 UNP 33 R +ATOM 266 N NH1 . ARG A 1 33 ? -7.752 2.851 -0.422 1.00 96.38 ? 33 ARG A NH1 1 P17090 UNP 33 R +ATOM 267 N NH2 . ARG A 1 33 ? -6.183 1.235 -0.447 1.00 96.38 ? 33 ARG A NH2 1 P17090 UNP 33 R +ATOM 268 C CZ . ARG A 1 33 ? -7.319 1.683 -0.023 1.00 96.38 ? 33 ARG A CZ 1 P17090 UNP 33 R +ATOM 269 N N . THR A 1 34 ? -13.472 -1.211 -1.635 1.00 94.19 ? 34 THR A N 1 P17090 UNP 34 T +ATOM 270 C CA . THR A 1 34 ? -14.572 -1.052 -2.603 1.00 94.19 ? 34 THR A CA 1 P17090 UNP 34 T +ATOM 271 C C . THR A 1 34 ? -15.833 -1.840 -2.241 1.00 94.19 ? 34 THR A C 1 P17090 UNP 34 T +ATOM 272 C CB . THR A 1 34 ? -14.125 -1.407 -4.024 1.00 94.19 ? 34 THR A CB 1 P17090 UNP 34 T +ATOM 273 O O . THR A 1 34 ? -16.870 -1.709 -2.900 1.00 94.19 ? 34 THR A O 1 P17090 UNP 34 T +ATOM 274 C CG2 . THR A 1 34 ? -12.865 -0.654 -4.449 1.00 94.19 ? 34 THR A CG2 1 P17090 UNP 34 T +ATOM 275 O OG1 . THR A 1 34 ? -13.926 -2.798 -4.170 1.00 94.19 ? 34 THR A OG1 1 P17090 UNP 34 T +ATOM 276 N N . LYS A 1 35 ? -15.790 -2.679 -1.195 1.00 94.88 ? 35 LYS A N 1 P17090 UNP 35 K +ATOM 277 C CA . LYS A 1 35 ? -16.949 -3.480 -0.795 1.00 94.88 ? 35 LYS A CA 1 P17090 UNP 35 K +ATOM 278 C C . LYS A 1 35 ? -17.932 -2.637 0.014 1.00 94.88 ? 35 LYS A C 1 P17090 UNP 35 K +ATOM 279 C CB . LYS A 1 35 ? -16.534 -4.728 -0.001 1.00 94.88 ? 35 LYS A CB 1 P17090 UNP 35 K +ATOM 280 O O . LYS A 1 35 ? -17.632 -2.146 1.094 1.00 94.88 ? 35 LYS A O 1 P17090 UNP 35 K +ATOM 281 C CG . LYS A 1 35 ? -15.539 -5.669 -0.690 1.00 94.88 ? 35 LYS A CG 1 P17090 UNP 35 K +ATOM 282 C CD . LYS A 1 35 ? -15.902 -6.148 -2.104 1.00 94.88 ? 35 LYS A CD 1 P17090 UNP 35 K +ATOM 283 C CE . LYS A 1 35 ? -14.877 -7.236 -2.451 1.00 94.88 ? 35 LYS A CE 1 P17090 UNP 35 K +ATOM 284 N NZ . LYS A 1 35 ? -14.568 -7.359 -3.889 1.00 94.88 ? 35 LYS A NZ 1 P17090 UNP 35 K +ATOM 285 N N . SER A 1 36 ? -19.176 -2.582 -0.459 1.00 94.69 ? 36 SER A N 1 P17090 UNP 36 S +ATOM 286 C CA . SER A 1 36 ? -20.291 -1.998 0.310 1.00 94.69 ? 36 SER A CA 1 P17090 UNP 36 S +ATOM 287 C C . SER A 1 36 ? -20.651 -2.805 1.563 1.00 94.69 ? 36 SER A C 1 P17090 UNP 36 S +ATOM 288 C CB . SER A 1 36 ? -21.536 -1.856 -0.569 1.00 94.69 ? 36 SER A CB 1 P17090 UNP 36 S +ATOM 289 O O . SER A 1 36 ? -21.167 -2.253 2.532 1.00 94.69 ? 36 SER A O 1 P17090 UNP 36 S +ATOM 290 O OG . SER A 1 36 ? -21.950 -3.103 -1.116 1.00 94.69 ? 36 SER A OG 1 P17090 UNP 36 S +ATOM 291 N N . ARG A 1 37 ? -20.413 -4.122 1.545 1.00 96.62 ? 37 ARG A N 1 P17090 UNP 37 R +ATOM 292 C CA . ARG A 1 37 ? -20.680 -5.028 2.665 1.00 96.62 ? 37 ARG A CA 1 P17090 UNP 37 R +ATOM 293 C C . ARG A 1 37 ? -19.522 -5.989 2.848 1.00 96.62 ? 37 ARG A C 1 P17090 UNP 37 R +ATOM 294 C CB . ARG A 1 37 ? -21.997 -5.789 2.475 1.00 96.62 ? 37 ARG A CB 1 P17090 UNP 37 R +ATOM 295 O O . ARG A 1 37 ? -19.204 -6.730 1.922 1.00 96.62 ? 37 ARG A O 1 P17090 UNP 37 R +ATOM 296 C CG . ARG A 1 37 ? -23.204 -4.846 2.459 1.00 96.62 ? 37 ARG A CG 1 P17090 UNP 37 R +ATOM 297 C CD . ARG A 1 37 ? -24.494 -5.655 2.350 1.00 96.62 ? 37 ARG A CD 1 P17090 UNP 37 R +ATOM 298 N NE . ARG A 1 37 ? -25.661 -4.756 2.310 1.00 96.62 ? 37 ARG A NE 1 P17090 UNP 37 R +ATOM 299 N NH1 . ARG A 1 37 ? -27.174 -6.154 3.326 1.00 96.62 ? 37 ARG A NH1 1 P17090 UNP 37 R +ATOM 300 N NH2 . ARG A 1 37 ? -27.796 -4.097 2.730 1.00 96.62 ? 37 ARG A NH2 1 P17090 UNP 37 R +ATOM 301 C CZ . ARG A 1 37 ? -26.866 -5.008 2.785 1.00 96.62 ? 37 ARG A CZ 1 P17090 UNP 37 R +ATOM 302 N N . LEU A 1 38 ? -18.921 -5.982 4.031 1.00 97.19 ? 38 LEU A N 1 P17090 UNP 38 L +ATOM 303 C CA . LEU A 1 38 ? -17.749 -6.796 4.341 1.00 97.19 ? 38 LEU A CA 1 P17090 UNP 38 L +ATOM 304 C C . LEU A 1 38 ? -17.682 -7.068 5.844 1.00 97.19 ? 38 LEU A C 1 P17090 UNP 38 L +ATOM 305 C CB . LEU A 1 38 ? -16.500 -6.042 3.849 1.00 97.19 ? 38 LEU A CB 1 P17090 UNP 38 L +ATOM 306 O O . LEU A 1 38 ? -17.934 -6.169 6.643 1.00 97.19 ? 38 LEU A O 1 P17090 UNP 38 L +ATOM 307 C CG . LEU A 1 38 ? -15.170 -6.790 4.026 1.00 97.19 ? 38 LEU A CG 1 P17090 UNP 38 L +ATOM 308 C CD1 . LEU A 1 38 ? -15.106 -8.063 3.179 1.00 97.19 ? 38 LEU A CD1 1 P17090 UNP 38 L +ATOM 309 C CD2 . LEU A 1 38 ? -14.024 -5.871 3.628 1.00 97.19 ? 38 LEU A CD2 1 P17090 UNP 38 L +ATOM 310 N N . LYS A 1 39 ? -17.336 -8.297 6.233 1.00 97.38 ? 39 LYS A N 1 P17090 UNP 39 K +ATOM 311 C CA . LYS A 1 39 ? -16.970 -8.619 7.617 1.00 97.38 ? 39 LYS A CA 1 P17090 UNP 39 K +ATOM 312 C C . LYS A 1 39 ? -15.490 -8.286 7.808 1.00 97.38 ? 39 LYS A C 1 P17090 UNP 39 K +ATOM 313 C CB . LYS A 1 39 ? -17.276 -10.096 7.908 1.00 97.38 ? 39 LYS A CB 1 P17090 UNP 39 K +ATOM 314 O O . LYS A 1 39 ? -14.676 -8.732 7.009 1.00 97.38 ? 39 LYS A O 1 P17090 UNP 39 K +ATOM 315 C CG . LYS A 1 39 ? -17.051 -10.416 9.391 1.00 97.38 ? 39 LYS A CG 1 P17090 UNP 39 K +ATOM 316 C CD . LYS A 1 39 ? -17.294 -11.895 9.717 1.00 97.38 ? 39 LYS A CD 1 P17090 UNP 39 K +ATOM 317 C CE . LYS A 1 39 ? -17.029 -12.050 11.216 1.00 97.38 ? 39 LYS A CE 1 P17090 UNP 39 K +ATOM 318 N NZ . LYS A 1 39 ? -17.050 -13.445 11.708 1.00 97.38 ? 39 LYS A NZ 1 P17090 UNP 39 K +ATOM 319 N N . VAL A 1 40 ? -15.162 -7.524 8.845 1.00 97.12 ? 40 VAL A N 1 P17090 UNP 40 V +ATOM 320 C CA . VAL A 1 40 ? -13.814 -6.994 9.102 1.00 97.12 ? 40 VAL A CA 1 P17090 UNP 40 V +ATOM 321 C C . VAL A 1 40 ? -13.410 -7.213 10.561 1.00 97.12 ? 40 VAL A C 1 P17090 UNP 40 V +ATOM 322 C CB . VAL A 1 40 ? -13.715 -5.501 8.713 1.00 97.12 ? 40 VAL A CB 1 P17090 UNP 40 V +ATOM 323 O O . VAL A 1 40 ? -14.262 -7.465 11.417 1.00 97.12 ? 40 VAL A O 1 P17090 UNP 40 V +ATOM 324 C CG1 . VAL A 1 40 ? -13.921 -5.296 7.210 1.00 97.12 ? 40 VAL A CG1 1 P17090 UNP 40 V +ATOM 325 C CG2 . VAL A 1 40 ? -14.729 -4.618 9.452 1.00 97.12 ? 40 VAL A CG2 1 P17090 UNP 40 V +ATOM 326 N N . ALA A 1 41 ? -12.115 -7.103 10.847 1.00 96.44 ? 41 ALA A N 1 P17090 UNP 41 A +ATOM 327 C CA . ALA A 1 41 ? -11.575 -7.087 12.203 1.00 96.44 ? 41 ALA A CA 1 P17090 UNP 41 A +ATOM 328 C C . ALA A 1 41 ? -10.947 -5.718 12.484 1.00 96.44 ? 41 ALA A C 1 P17090 UNP 41 A +ATOM 329 C CB . ALA A 1 41 ? -10.573 -8.235 12.365 1.00 96.44 ? 41 ALA A CB 1 P17090 UNP 41 A +ATOM 330 O O . ALA A 1 41 ? -10.185 -5.206 11.665 1.00 96.44 ? 41 ALA A O 1 P17090 UNP 41 A +ATOM 331 N N . LEU A 1 42 ? -11.291 -5.128 13.626 1.00 96.12 ? 42 LEU A N 1 P17090 UNP 42 L +ATOM 332 C CA . LEU A 1 42 ? -10.697 -3.883 14.113 1.00 96.12 ? 42 LEU A CA 1 P17090 UNP 42 L +ATOM 333 C C . LEU A 1 42 ? -9.255 -4.118 14.585 1.00 96.12 ? 42 LEU A C 1 P17090 UNP 42 L +ATOM 334 C CB . LEU A 1 42 ? -11.576 -3.327 15.250 1.00 96.12 ? 42 LEU A CB 1 P17090 UNP 42 L +ATOM 335 O O . LEU A 1 42 ? -8.853 -5.253 14.846 1.00 96.12 ? 42 LEU A O 1 P17090 UNP 42 L +ATOM 336 C CG . LEU A 1 42 ? -13.039 -3.027 14.883 1.00 96.12 ? 42 LEU A CG 1 P17090 UNP 42 L +ATOM 337 C CD1 . LEU A 1 42 ? -13.779 -2.357 16.037 1.00 96.12 ? 42 LEU A CD1 1 P17090 UNP 42 L +ATOM 338 C CD2 . LEU A 1 42 ? -13.122 -2.092 13.687 1.00 96.12 ? 42 LEU A CD2 1 P17090 UNP 42 L +ATOM 339 N N . SER A 1 43 ? -8.487 -3.041 14.759 1.00 96.19 ? 43 SER A N 1 P17090 UNP 43 S +ATOM 340 C CA . SER A 1 43 ? -7.106 -3.105 15.260 1.00 96.19 ? 43 SER A CA 1 P17090 UNP 43 S +ATOM 341 C C . SER A 1 43 ? -6.951 -3.722 16.660 1.00 96.19 ? 43 SER A C 1 P17090 UNP 43 S +ATOM 342 C CB . SER A 1 43 ? -6.475 -1.711 15.230 1.00 96.19 ? 43 SER A CB 1 P17090 UNP 43 S +ATOM 343 O O . SER A 1 43 ? -5.856 -4.148 17.016 1.00 96.19 ? 43 SER A O 1 P17090 UNP 43 S +ATOM 344 O OG . SER A 1 43 ? -7.174 -0.785 16.047 1.00 96.19 ? 43 SER A OG 1 P17090 UNP 43 S +ATOM 345 N N . ASP A 1 44 ? -8.030 -3.819 17.441 1.00 95.00 ? 44 ASP A N 1 P17090 UNP 44 D +ATOM 346 C CA . ASP A 1 44 ? -8.073 -4.501 18.742 1.00 95.00 ? 44 ASP A CA 1 P17090 UNP 44 D +ATOM 347 C C . ASP A 1 44 ? -8.530 -5.974 18.661 1.00 95.00 ? 44 ASP A C 1 P17090 UNP 44 D +ATOM 348 C CB . ASP A 1 44 ? -8.938 -3.683 19.711 1.00 95.00 ? 44 ASP A CB 1 P17090 UNP 44 D +ATOM 349 O O . ASP A 1 44 ? -8.665 -6.644 19.685 1.00 95.00 ? 44 ASP A O 1 P17090 UNP 44 D +ATOM 350 C CG . ASP A 1 44 ? -10.434 -3.681 19.378 1.00 95.00 ? 44 ASP A CG 1 P17090 UNP 44 D +ATOM 351 O OD1 . ASP A 1 44 ? -10.840 -4.244 18.337 1.00 95.00 ? 44 ASP A OD1 1 P17090 UNP 44 D +ATOM 352 O OD2 . ASP A 1 44 ? -11.199 -3.120 20.194 1.00 95.00 ? 44 ASP A OD2 1 P17090 UNP 44 D +ATOM 353 N N . GLY A 1 45 ? -8.775 -6.487 17.452 1.00 94.56 ? 45 GLY A N 1 P17090 UNP 45 G +ATOM 354 C CA . GLY A 1 45 ? -9.228 -7.852 17.195 1.00 94.56 ? 45 GLY A CA 1 P17090 UNP 45 G +ATOM 355 C C . GLY A 1 45 ? -10.744 -8.060 17.281 1.00 94.56 ? 45 GLY A C 1 P17090 UNP 45 G +ATOM 356 O O . GLY A 1 45 ? -11.205 -9.170 17.011 1.00 94.56 ? 45 GLY A O 1 P17090 UNP 45 G +ATOM 357 N N . GLN A 1 46 ? -11.542 -7.041 17.624 1.00 94.56 ? 46 GLN A N 1 P17090 UNP 46 Q +ATOM 358 C CA . GLN A 1 46 ? -13.003 -7.169 17.626 1.00 94.56 ? 46 GLN A CA 1 P17090 UNP 46 Q +ATOM 359 C C . GLN A 1 46 ? -13.552 -7.315 16.200 1.00 94.56 ? 46 GLN A C 1 P17090 UNP 46 Q +ATOM 360 C CB . GLN A 1 46 ? -13.674 -5.975 18.321 1.00 94.56 ? 46 GLN A CB 1 P17090 UNP 46 Q +ATOM 361 O O . GLN A 1 46 ? -13.164 -6.588 15.285 1.00 94.56 ? 46 GLN A O 1 P17090 UNP 46 Q +ATOM 362 C CG . GLN A 1 46 ? -13.368 -5.901 19.822 1.00 94.56 ? 46 GLN A CG 1 P17090 UNP 46 Q +ATOM 363 C CD . GLN A 1 46 ? -14.080 -4.737 20.509 1.00 94.56 ? 46 GLN A CD 1 P17090 UNP 46 Q +ATOM 364 N NE2 . GLN A 1 46 ? -13.431 -4.066 21.427 1.00 94.56 ? 46 GLN A NE2 1 P17090 UNP 46 Q +ATOM 365 O OE1 . GLN A 1 46 ? -15.240 -4.420 20.267 1.00 94.56 ? 46 GLN A OE1 1 P17090 UNP 46 Q +ATOM 366 N N . GLU A 1 47 ? -14.516 -8.218 16.012 1.00 96.00 ? 47 GLU A N 1 P17090 UNP 47 E +ATOM 367 C CA . GLU A 1 47 ? -15.227 -8.342 14.738 1.00 96.00 ? 47 GLU A CA 1 P17090 UNP 47 E +ATOM 368 C C . GLU A 1 47 ? -16.232 -7.197 14.539 1.00 96.00 ? 47 GLU A C 1 P17090 UNP 47 E +ATOM 369 C CB . GLU A 1 47 ? -15.947 -9.692 14.612 1.00 96.00 ? 47 GLU A CB 1 P17090 UNP 47 E +ATOM 370 O O . GLU A 1 47 ? -17.014 -6.848 15.436 1.00 96.00 ? 47 GLU A O 1 P17090 UNP 47 E +ATOM 371 C CG . GLU A 1 47 ? -15.015 -10.916 14.638 1.00 96.00 ? 47 GLU A CG 1 P17090 UNP 47 E +ATOM 372 C CD . GLU A 1 47 ? -15.743 -12.192 14.182 1.00 96.00 ? 47 GLU A CD 1 P17090 UNP 47 E +ATOM 373 O OE1 . GLU A 1 47 ? -15.109 -13.094 13.593 1.00 96.00 ? 47 GLU A OE1 1 P17090 UNP 47 E +ATOM 374 O OE2 . GLU A 1 47 ? -16.994 -12.265 14.234 1.00 96.00 ? 47 GLU A OE2 1 P17090 UNP 47 E +ATOM 375 N N . ALA A 1 48 ? -16.271 -6.668 13.319 1.00 96.12 ? 48 ALA A N 1 P17090 UNP 48 A +ATOM 376 C CA . ALA A 1 48 ? -17.214 -5.652 12.877 1.00 96.12 ? 48 ALA A CA 1 P17090 UNP 48 A +ATOM 377 C C . ALA A 1 48 ? -17.708 -5.934 11.447 1.00 96.12 ? 48 ALA A C 1 P17090 UNP 48 A +ATOM 378 C CB . ALA A 1 48 ? -16.553 -4.276 13.024 1.00 96.12 ? 48 ALA A CB 1 P17090 UNP 48 A +ATOM 379 O O . ALA A 1 48 ? -17.212 -6.820 10.747 1.00 96.12 ? 48 ALA A O 1 P17090 UNP 48 A +ATOM 380 N N . GLY A 1 49 ? -18.719 -5.188 11.007 1.00 96.81 ? 49 GLY A N 1 P17090 UNP 49 G +ATOM 381 C CA . GLY A 1 49 ? -19.208 -5.222 9.631 1.00 96.81 ? 49 GLY A CA 1 P17090 UNP 49 G +ATOM 382 C C . GLY A 1 49 ? -19.242 -3.835 8.997 1.00 96.81 ? 49 GLY A C 1 P17090 UNP 49 G +ATOM 383 O O . GLY A 1 49 ? -19.658 -2.870 9.638 1.00 96.81 ? 49 GLY A O 1 P17090 UNP 49 G +ATOM 384 N N . LEU A 1 50 ? -18.851 -3.752 7.728 1.00 97.44 ? 50 LEU A N 1 P17090 UNP 50 L +ATOM 385 C CA . LEU A 1 50 ? -19.079 -2.599 6.860 1.00 97.44 ? 50 LEU A CA 1 P17090 UNP 50 L +ATOM 386 C C . LEU A 1 50 ? -20.456 -2.723 6.198 1.00 97.44 ? 50 LEU A C 1 P17090 UNP 50 L +ATOM 387 C CB . LEU A 1 50 ? -17.962 -2.497 5.802 1.00 97.44 ? 50 LEU A CB 1 P17090 UNP 50 L +ATOM 388 O O . LEU A 1 50 ? -20.803 -3.793 5.697 1.00 97.44 ? 50 LEU A O 1 P17090 UNP 50 L +ATOM 389 C CG . LEU A 1 50 ? -16.530 -2.391 6.360 1.00 97.44 ? 50 LEU A CG 1 P17090 UNP 50 L +ATOM 390 C CD1 . LEU A 1 50 ? -15.543 -2.172 5.215 1.00 97.44 ? 50 LEU A CD1 1 P17090 UNP 50 L +ATOM 391 C CD2 . LEU A 1 50 ? -16.387 -1.231 7.344 1.00 97.44 ? 50 LEU A CD2 1 P17090 UNP 50 L +ATOM 392 N N . PHE A 1 51 ? -21.226 -1.636 6.193 1.00 96.94 ? 51 PHE A N 1 P17090 UNP 51 F +ATOM 393 C CA . PHE A 1 51 ? -22.542 -1.514 5.558 1.00 96.94 ? 51 PHE A CA 1 P17090 UNP 51 F +ATOM 394 C C . PHE A 1 51 ? -22.685 -0.129 4.915 1.00 96.94 ? 51 PHE A C 1 P17090 UNP 51 F +ATOM 395 C CB . PHE A 1 51 ? -23.657 -1.777 6.583 1.00 96.94 ? 51 PHE A CB 1 P17090 UNP 51 F +ATOM 396 O O . PHE A 1 51 ? -23.478 0.701 5.349 1.00 96.94 ? 51 PHE A O 1 P17090 UNP 51 F +ATOM 397 C CG . PHE A 1 51 ? -23.761 -3.213 7.046 1.00 96.94 ? 51 PHE A CG 1 P17090 UNP 51 F +ATOM 398 C CD1 . PHE A 1 51 ? -24.607 -4.114 6.371 1.00 96.94 ? 51 PHE A CD1 1 P17090 UNP 51 F +ATOM 399 C CD2 . PHE A 1 51 ? -23.012 -3.648 8.154 1.00 96.94 ? 51 PHE A CD2 1 P17090 UNP 51 F +ATOM 400 C CE1 . PHE A 1 51 ? -24.702 -5.449 6.803 1.00 96.94 ? 51 PHE A CE1 1 P17090 UNP 51 F +ATOM 401 C CE2 . PHE A 1 51 ? -23.101 -4.984 8.580 1.00 96.94 ? 51 PHE A CE2 1 P17090 UNP 51 F +ATOM 402 C CZ . PHE A 1 51 ? -23.945 -5.884 7.907 1.00 96.94 ? 51 PHE A CZ 1 P17090 UNP 51 F +ATOM 403 N N . LEU A 1 52 ? -21.888 0.120 3.882 1.00 96.06 ? 52 LEU A N 1 P17090 UNP 52 L +ATOM 404 C CA . LEU A 1 52 ? -21.793 1.407 3.199 1.00 96.06 ? 52 LEU A CA 1 P17090 UNP 52 L +ATOM 405 C C . LEU A 1 52 ? -22.714 1.463 1.965 1.00 96.06 ? 52 LEU A C 1 P17090 UNP 52 L +ATOM 406 C CB . LEU A 1 52 ? -20.317 1.656 2.835 1.00 96.06 ? 52 LEU A CB 1 P17090 UNP 52 L +ATOM 407 O O . LEU A 1 52 ? -23.108 0.416 1.431 1.00 96.06 ? 52 LEU A O 1 P17090 UNP 52 L +ATOM 408 C CG . LEU A 1 52 ? -19.375 1.701 4.054 1.00 96.06 ? 52 LEU A CG 1 P17090 UNP 52 L +ATOM 409 C CD1 . LEU A 1 52 ? -17.928 1.720 3.583 1.00 96.06 ? 52 LEU A CD1 1 P17090 UNP 52 L +ATOM 410 C CD2 . LEU A 1 52 ? -19.618 2.931 4.932 1.00 96.06 ? 52 LEU A CD2 1 P17090 UNP 52 L +ATOM 411 N N . PRO A 1 53 ? -23.058 2.667 1.472 1.00 93.62 ? 53 PRO A N 1 P17090 UNP 53 P +ATOM 412 C CA . PRO A 1 53 ? -23.712 2.825 0.178 1.00 93.62 ? 53 PRO A CA 1 P17090 UNP 53 P +ATOM 413 C C . PRO A 1 53 ? -22.953 2.114 -0.955 1.00 93.62 ? 53 PRO A C 1 P17090 UNP 53 P +ATOM 414 C CB . PRO A 1 53 ? -23.817 4.336 -0.050 1.00 93.62 ? 53 PRO A CB 1 P17090 UNP 53 P +ATOM 415 O O . PRO A 1 53 ? -21.735 1.935 -0.930 1.00 93.62 ? 53 PRO A O 1 P17090 UNP 53 P +ATOM 416 C CG . PRO A 1 53 ? -23.824 4.905 1.370 1.00 93.62 ? 53 PRO A CG 1 P17090 UNP 53 P +ATOM 417 C CD . PRO A 1 53 ? -22.880 3.963 2.113 1.00 93.62 ? 53 PRO A CD 1 P17090 UNP 53 P +ATOM 418 N N . ARG A 1 54 ? -23.680 1.678 -1.989 1.00 91.44 ? 54 ARG A N 1 P17090 UNP 54 R +ATOM 419 C CA . ARG A 1 54 ? -23.041 1.088 -3.175 1.00 91.44 ? 54 ARG A CA 1 P17090 UNP 54 R +ATOM 420 C C . ARG A 1 54 ? -22.209 2.147 -3.898 1.00 91.44 ? 54 ARG A C 1 P17090 UNP 54 R +ATOM 421 C CB . ARG A 1 54 ? -24.076 0.476 -4.122 1.00 91.44 ? 54 ARG A CB 1 P17090 UNP 54 R +ATOM 422 O O . ARG A 1 54 ? -22.654 3.281 -4.035 1.00 91.44 ? 54 ARG A O 1 P17090 UNP 54 R +ATOM 423 C CG . ARG A 1 54 ? -24.701 -0.801 -3.550 1.00 91.44 ? 54 ARG A CG 1 P17090 UNP 54 R +ATOM 424 C CD . ARG A 1 54 ? -25.684 -1.373 -4.575 1.00 91.44 ? 54 ARG A CD 1 P17090 UNP 54 R +ATOM 425 N NE . ARG A 1 54 ? -26.283 -2.639 -4.115 1.00 91.44 ? 54 ARG A NE 1 P17090 UNP 54 R +ATOM 426 N NH1 . ARG A 1 54 ? -27.921 -2.765 -5.720 1.00 91.44 ? 54 ARG A NH1 1 P17090 UNP 54 R +ATOM 427 N NH2 . ARG A 1 54 ? -27.747 -4.383 -4.195 1.00 91.44 ? 54 ARG A NH2 1 P17090 UNP 54 R +ATOM 428 C CZ . ARG A 1 54 ? -27.311 -3.253 -4.675 1.00 91.44 ? 54 ARG A CZ 1 P17090 UNP 54 R +ATOM 429 N N . GLY A 1 55 ? -21.036 1.750 -4.387 1.00 89.69 ? 55 GLY A N 1 P17090 UNP 55 G +ATOM 430 C CA . GLY A 1 55 ? -20.099 2.650 -5.066 1.00 89.69 ? 55 GLY A CA 1 P17090 UNP 55 G +ATOM 431 C C . GLY A 1 55 ? -19.213 3.466 -4.122 1.00 89.69 ? 55 GLY A C 1 P17090 UNP 55 G +ATOM 432 O O . GLY A 1 55 ? -18.398 4.251 -4.597 1.00 89.69 ? 55 GLY A O 1 P17090 UNP 55 G +ATOM 433 N N . THR A 1 56 ? -19.331 3.288 -2.801 1.00 92.00 ? 56 THR A N 1 P17090 UNP 56 T +ATOM 434 C CA . THR A 1 56 ? -18.376 3.870 -1.856 1.00 92.00 ? 56 THR A CA 1 P17090 UNP 56 T +ATOM 435 C C . THR A 1 56 ? -16.997 3.238 -2.045 1.00 92.00 ? 56 THR A C 1 P17090 UNP 56 T +ATOM 436 C CB . THR A 1 56 ? -18.856 3.709 -0.407 1.00 92.00 ? 56 THR A CB 1 P17090 UNP 56 T +ATOM 437 O O . THR A 1 56 ? -16.858 2.017 -1.996 1.00 92.00 ? 56 THR A O 1 P17090 UNP 56 T +ATOM 438 C CG2 . THR A 1 56 ? -17.906 4.362 0.593 1.00 92.00 ? 56 THR A CG2 1 P17090 UNP 56 T +ATOM 439 O OG1 . THR A 1 56 ? -20.094 4.365 -0.241 1.00 92.00 ? 56 THR A OG1 1 P17090 UNP 56 T +ATOM 440 N N . VAL A 1 57 ? -15.985 4.086 -2.236 1.00 93.44 ? 57 VAL A N 1 P17090 UNP 57 V +ATOM 441 C CA . VAL A 1 57 ? -14.570 3.706 -2.269 1.00 93.44 ? 57 VAL A CA 1 P17090 UNP 57 V +ATOM 442 C C . VAL A 1 57 ? -13.887 4.380 -1.091 1.00 93.44 ? 57 VAL A C 1 P17090 UNP 57 V +ATOM 443 C CB . VAL A 1 57 ? -13.896 4.106 -3.596 1.00 93.44 ? 57 VAL A CB 1 P17090 UNP 57 V +ATOM 444 O O . VAL A 1 57 ? -13.770 5.605 -1.067 1.00 93.44 ? 57 VAL A O 1 P17090 UNP 57 V +ATOM 445 C CG1 . VAL A 1 57 ? -12.416 3.696 -3.612 1.00 93.44 ? 57 VAL A CG1 1 P17090 UNP 57 V +ATOM 446 C CG2 . VAL A 1 57 ? -14.588 3.445 -4.794 1.00 93.44 ? 57 VAL A CG2 1 P17090 UNP 57 V +ATOM 447 N N . LEU A 1 58 ? -13.464 3.577 -0.119 1.00 95.38 ? 58 LEU A N 1 P17090 UNP 58 L +ATOM 448 C CA . LEU A 1 58 ? -12.777 4.063 1.071 1.00 95.38 ? 58 LEU A CA 1 P17090 UNP 58 L +ATOM 449 C C . LEU A 1 58 ? -11.341 4.488 0.749 1.00 95.38 ? 58 LEU A C 1 P17090 UNP 58 L +ATOM 450 C CB . LEU A 1 58 ? -12.808 2.991 2.171 1.00 95.38 ? 58 LEU A CB 1 P17090 UNP 58 L +ATOM 451 O O . LEU A 1 58 ? -10.607 3.814 0.014 1.00 95.38 ? 58 LEU A O 1 P17090 UNP 58 L +ATOM 452 C CG . LEU A 1 58 ? -14.205 2.627 2.695 1.00 95.38 ? 58 LEU A CG 1 P17090 UNP 58 L +ATOM 453 C CD1 . LEU A 1 58 ? -14.093 1.432 3.644 1.00 95.38 ? 58 LEU A CD1 1 P17090 UNP 58 L +ATOM 454 C CD2 . LEU A 1 58 ? -14.822 3.804 3.443 1.00 95.38 ? 58 LEU A CD2 1 P17090 UNP 58 L +ATOM 455 N N . LYS A 1 59 ? -10.923 5.597 1.348 1.00 94.81 ? 59 LYS A N 1 P17090 UNP 59 K +ATOM 456 C CA . LYS A 1 59 ? -9.578 6.166 1.243 1.00 94.81 ? 59 LYS A CA 1 P17090 UNP 59 K +ATOM 457 C C . LYS A 1 59 ? -8.820 6.010 2.555 1.00 94.81 ? 59 LYS A C 1 P17090 UNP 59 K +ATOM 458 C CB . LYS A 1 59 ? -9.683 7.639 0.832 1.00 94.81 ? 59 LYS A CB 1 P17090 UNP 59 K +ATOM 459 O O . LYS A 1 59 ? -9.411 5.889 3.625 1.00 94.81 ? 59 LYS A O 1 P17090 UNP 59 K +ATOM 460 C CG . LYS A 1 59 ? -10.344 7.795 -0.546 1.00 94.81 ? 59 LYS A CG 1 P17090 UNP 59 K +ATOM 461 C CD . LYS A 1 59 ? -10.443 9.275 -0.911 1.00 94.81 ? 59 LYS A CD 1 P17090 UNP 59 K +ATOM 462 C CE . LYS A 1 59 ? -11.187 9.424 -2.238 1.00 94.81 ? 59 LYS A CE 1 P17090 UNP 59 K +ATOM 463 N NZ . LYS A 1 59 ? -11.312 10.853 -2.605 1.00 94.81 ? 59 LYS A NZ 1 P17090 UNP 59 K +ATOM 464 N N . GLU A 1 60 ? -7.495 6.025 2.466 1.00 95.38 ? 60 GLU A N 1 P17090 UNP 60 E +ATOM 465 C CA . GLU A 1 60 ? -6.629 6.194 3.632 1.00 95.38 ? 60 GLU A CA 1 P17090 UNP 60 E +ATOM 466 C C . GLU A 1 60 ? -7.070 7.433 4.423 1.00 95.38 ? 60 GLU A C 1 P17090 UNP 60 E +ATOM 467 C CB . GLU A 1 60 ? -5.180 6.354 3.146 1.00 95.38 ? 60 GLU A CB 1 P17090 UNP 60 E +ATOM 468 O O . GLU A 1 60 ? -7.208 8.522 3.862 1.00 95.38 ? 60 GLU A O 1 P17090 UNP 60 E +ATOM 469 C CG . GLU A 1 60 ? -4.150 6.702 4.237 1.00 95.38 ? 60 GLU A CG 1 P17090 UNP 60 E +ATOM 470 C CD . GLU A 1 60 ? -3.738 5.538 5.140 1.00 95.38 ? 60 GLU A CD 1 P17090 UNP 60 E +ATOM 471 O OE1 . GLU A 1 60 ? -3.177 5.772 6.228 1.00 95.38 ? 60 GLU A OE1 1 P17090 UNP 60 E +ATOM 472 O OE2 . GLU A 1 60 ? -3.750 4.371 4.705 1.00 95.38 ? 60 GLU A OE2 1 P17090 UNP 60 E +ATOM 473 N N . GLY A 1 61 ? -7.275 7.264 5.728 1.00 95.38 ? 61 GLY A N 1 P17090 UNP 61 G +ATOM 474 C CA . GLY A 1 61 ? -7.678 8.341 6.625 1.00 95.38 ? 61 GLY A CA 1 P17090 UNP 61 G +ATOM 475 C C . GLY A 1 61 ? -9.178 8.640 6.656 1.00 95.38 ? 61 GLY A C 1 P17090 UNP 61 G +ATOM 476 O O . GLY A 1 61 ? -9.578 9.485 7.457 1.00 95.38 ? 61 GLY A O 1 P17090 UNP 61 G +ATOM 477 N N . ASP A 1 62 ? -10.008 7.959 5.853 1.00 96.00 ? 62 ASP A N 1 P17090 UNP 62 D +ATOM 478 C CA . ASP A 1 62 ? -11.464 8.039 6.010 1.00 96.00 ? 62 ASP A CA 1 P17090 UNP 62 D +ATOM 479 C C . ASP A 1 62 ? -11.860 7.589 7.417 1.00 96.00 ? 62 ASP A C 1 P17090 UNP 62 D +ATOM 480 C CB . ASP A 1 62 ? -12.223 7.187 4.976 1.00 96.00 ? 62 ASP A CB 1 P17090 UNP 62 D +ATOM 481 O O . ASP A 1 62 ? -11.293 6.647 7.976 1.00 96.00 ? 62 ASP A O 1 P17090 UNP 62 D +ATOM 482 C CG . ASP A 1 62 ? -12.393 7.838 3.601 1.00 96.00 ? 62 ASP A CG 1 P17090 UNP 62 D +ATOM 483 O OD1 . ASP A 1 62 ? -12.119 9.048 3.446 1.00 96.00 ? 62 ASP A OD1 1 P17090 UNP 62 D +ATOM 484 O OD2 . ASP A 1 62 ? -12.847 7.108 2.689 1.00 96.00 ? 62 ASP A OD2 1 P17090 UNP 62 D +ATOM 485 N N . ILE A 1 63 ? -12.859 8.253 7.990 1.00 96.50 ? 63 ILE A N 1 P17090 UNP 63 I +ATOM 486 C CA . ILE A 1 63 ? -13.334 7.955 9.335 1.00 96.50 ? 63 ILE A CA 1 P17090 UNP 63 I +ATOM 487 C C . ILE A 1 63 ? -14.728 7.352 9.237 1.00 96.50 ? 63 ILE A C 1 P17090 UNP 63 I +ATOM 488 C CB . ILE A 1 63 ? -13.265 9.204 10.231 1.00 96.50 ? 63 ILE A CB 1 P17090 UNP 63 I +ATOM 489 O O . ILE A 1 63 ? -15.638 7.969 8.686 1.00 96.50 ? 63 ILE A O 1 P17090 UNP 63 I +ATOM 490 C CG1 . ILE A 1 63 ? -11.822 9.759 10.290 1.00 96.50 ? 63 ILE A CG1 1 P17090 UNP 63 I +ATOM 491 C CG2 . ILE A 1 63 ? -13.746 8.795 11.623 1.00 96.50 ? 63 ILE A CG2 1 P17090 UNP 63 I +ATOM 492 C CD1 . ILE A 1 63 ? -11.666 11.025 11.135 1.00 96.50 ? 63 ILE A CD1 1 P17090 UNP 63 I +ATOM 493 N N . LEU A 1 64 ? -14.904 6.148 9.778 1.00 96.44 ? 64 LEU A N 1 P17090 UNP 64 L +ATOM 494 C CA . LEU A 1 64 ? -16.191 5.465 9.798 1.00 96.44 ? 64 LEU A CA 1 P17090 UNP 64 L +ATOM 495 C C . LEU A 1 64 ? -16.869 5.595 11.155 1.00 96.44 ? 64 LEU A C 1 P17090 UNP 64 L +ATOM 496 C CB . LEU A 1 64 ? -16.055 3.992 9.399 1.00 96.44 ? 64 LEU A CB 1 P17090 UNP 64 L +ATOM 497 O O . LEU A 1 64 ? -16.234 5.436 12.197 1.00 96.44 ? 64 LEU A O 1 P17090 UNP 64 L +ATOM 498 C CG . LEU A 1 64 ? -15.419 3.712 8.034 1.00 96.44 ? 64 LEU A CG 1 P17090 UNP 64 L +ATOM 499 C CD1 . LEU A 1 64 ? -15.555 2.219 7.731 1.00 96.44 ? 64 LEU A CD1 1 P17090 UNP 64 L +ATOM 500 C CD2 . LEU A 1 64 ? -16.128 4.488 6.930 1.00 96.44 ? 64 LEU A CD2 1 P17090 UNP 64 L +ATOM 501 N N . LEU A 1 65 ? -18.182 5.808 11.113 1.00 95.94 ? 65 LEU A N 1 P17090 UNP 65 L +ATOM 502 C CA . LEU A 1 65 ? -19.061 5.829 12.276 1.00 95.94 ? 65 LEU A CA 1 P17090 UNP 65 L +ATOM 503 C C . LEU A 1 65 ? -19.942 4.579 12.297 1.00 95.94 ? 65 LEU A C 1 P17090 UNP 65 L +ATOM 504 C CB . LEU A 1 65 ? -19.883 7.125 12.238 1.00 95.94 ? 65 LEU A CB 1 P17090 UNP 65 L +ATOM 505 O O . LEU A 1 65 ? -20.546 4.208 11.282 1.00 95.94 ? 65 LEU A O 1 P17090 UNP 65 L +ATOM 506 C CG . LEU A 1 65 ? -20.873 7.304 13.403 1.00 95.94 ? 65 LEU A CG 1 P17090 UNP 65 L +ATOM 507 C CD1 . LEU A 1 65 ? -20.164 7.345 14.753 1.00 95.94 ? 65 LEU A CD1 1 P17090 UNP 65 L +ATOM 508 C CD2 . LEU A 1 65 ? -21.632 8.620 13.231 1.00 95.94 ? 65 LEU A CD2 1 P17090 UNP 65 L +ATOM 509 N N . SER A 1 66 ? -20.015 3.938 13.459 1.00 95.12 ? 66 SER A N 1 P17090 UNP 66 S +ATOM 510 C CA . SER A 1 66 ? -20.928 2.825 13.705 1.00 95.12 ? 66 SER A CA 1 P17090 UNP 66 S +ATOM 511 C C . SER A 1 66 ? -22.325 3.274 14.137 1.00 95.12 ? 66 SER A C 1 P17090 UNP 66 S +ATOM 512 C CB . SER A 1 66 ? -20.340 1.837 14.708 1.00 95.12 ? 66 SER A CB 1 P17090 UNP 66 S +ATOM 513 O O . SER A 1 66 ? -22.522 4.416 14.555 1.00 95.12 ? 66 SER A O 1 P17090 UNP 66 S +ATOM 514 O OG . SER A 1 66 ? -20.298 2.454 15.968 1.00 95.12 ? 66 SER A OG 1 P17090 UNP 66 S +ATOM 515 N N . GLU A 1 67 ? -23.300 2.364 14.067 1.00 93.12 ? 67 GLU A N 1 P17090 UNP 67 E +ATOM 516 C CA . GLU A 1 67 ? -24.640 2.567 14.646 1.00 93.12 ? 67 GLU A CA 1 P17090 UNP 67 E +ATOM 517 C C . GLU A 1 67 ? -24.575 2.828 16.163 1.00 93.12 ? 67 GLU A C 1 P17090 UNP 67 E +ATOM 518 C CB . GLU A 1 67 ? -25.535 1.338 14.360 1.00 93.12 ? 67 GLU A CB 1 P17090 UNP 67 E +ATOM 519 O O . GLU A 1 67 ? -25.415 3.545 16.703 1.00 93.12 ? 67 GLU A O 1 P17090 UNP 67 E +ATOM 520 C CG . GLU A 1 67 ? -25.843 1.152 12.863 1.00 93.12 ? 67 GLU A CG 1 P17090 UNP 67 E +ATOM 521 C CD . GLU A 1 67 ? -26.743 -0.058 12.510 1.00 93.12 ? 67 GLU A CD 1 P17090 UNP 67 E +ATOM 522 O OE1 . GLU A 1 67 ? -27.237 -0.088 11.359 1.00 93.12 ? 67 GLU A OE1 1 P17090 UNP 67 E +ATOM 523 O OE2 . GLU A 1 67 ? -26.898 -1.024 13.299 1.00 93.12 ? 67 GLU A OE2 1 P17090 UNP 67 E +ATOM 524 N N . GLU A 1 68 ? -23.561 2.284 16.839 1.00 89.69 ? 68 GLU A N 1 P17090 UNP 68 E +ATOM 525 C CA . GLU A 1 68 ? -23.343 2.403 18.281 1.00 89.69 ? 68 GLU A CA 1 P17090 UNP 68 E +ATOM 526 C C . GLU A 1 68 ? -22.556 3.661 18.701 1.00 89.69 ? 68 GLU A C 1 P17090 UNP 68 E +ATOM 527 C CB . GLU A 1 68 ? -22.661 1.117 18.783 1.00 89.69 ? 68 GLU A CB 1 P17090 UNP 68 E +ATOM 528 O O . GLU A 1 68 ? -22.369 3.901 19.893 1.00 89.69 ? 68 GLU A O 1 P17090 UNP 68 E +ATOM 529 C CG . GLU A 1 68 ? -23.469 -0.170 18.509 1.00 89.69 ? 68 GLU A CG 1 P17090 UNP 68 E +ATOM 530 C CD . GLU A 1 68 ? -23.210 -0.880 17.157 1.00 89.69 ? 68 GLU A CD 1 P17090 UNP 68 E +ATOM 531 O OE1 . GLU A 1 68 ? -23.672 -2.039 17.025 1.00 89.69 ? 68 GLU A OE1 1 P17090 UNP 68 E +ATOM 532 O OE2 . GLU A 1 68 ? -22.521 -0.343 16.254 1.00 89.69 ? 68 GLU A OE2 1 P17090 UNP 68 E +ATOM 533 N N . GLY A 1 69 ? -22.104 4.481 17.745 1.00 90.69 ? 69 GLY A N 1 P17090 UNP 69 G +ATOM 534 C CA . GLY A 1 69 ? -21.330 5.700 18.009 1.00 90.69 ? 69 GLY A CA 1 P17090 UNP 69 G +ATOM 535 C C . GLY A 1 69 ? -19.811 5.500 18.073 1.00 90.69 ? 69 GLY A C 1 P17090 UNP 69 G +ATOM 536 O O . GLY A 1 69 ? -19.075 6.474 18.213 1.00 90.69 ? 69 GLY A O 1 P17090 UNP 69 G +ATOM 537 N N . ASP A 1 70 ? -19.319 4.268 17.923 1.00 91.62 ? 70 ASP A N 1 P17090 UNP 70 D +ATOM 538 C CA . ASP A 1 70 ? -17.888 3.999 17.770 1.00 91.62 ? 70 ASP A CA 1 P17090 UNP 70 D +ATOM 539 C C . ASP A 1 70 ? -17.341 4.587 16.467 1.00 91.62 ? 70 ASP A C 1 P17090 UNP 70 D +ATOM 540 C CB . ASP A 1 70 ? -17.576 2.500 17.770 1.00 91.62 ? 70 ASP A CB 1 P17090 UNP 70 D +ATOM 541 O O . ASP A 1 70 ? -17.994 4.514 15.419 1.00 91.62 ? 70 ASP A O 1 P17090 UNP 70 D +ATOM 542 C CG . ASP A 1 70 ? -17.913 1.794 19.073 1.00 91.62 ? 70 ASP A CG 1 P17090 UNP 70 D +ATOM 543 O OD1 . ASP A 1 70 ? -17.079 1.888 19.998 1.00 91.62 ? 70 ASP A OD1 1 P17090 UNP 70 D +ATOM 544 O OD2 . ASP A 1 70 ? -18.782 0.901 19.075 1.00 91.62 ? 70 ASP A OD2 1 P17090 UNP 70 D +ATOM 545 N N . VAL A 1 71 ? -16.107 5.082 16.533 1.00 94.56 ? 71 VAL A N 1 P17090 UNP 71 V +ATOM 546 C CA . VAL A 1 71 ? -15.394 5.702 15.416 1.00 94.56 ? 71 VAL A CA 1 P17090 UNP 71 V +ATOM 547 C C . VAL A 1 71 ? -14.108 4.930 15.121 1.00 94.56 ? 71 VAL A C 1 P17090 UNP 71 V +ATOM 548 C CB . VAL A 1 71 ? -15.107 7.186 15.712 1.00 94.56 ? 71 VAL A CB 1 P17090 UNP 71 V +ATOM 549 O O . VAL A 1 71 ? -13.362 4.593 16.043 1.00 94.56 ? 71 VAL A O 1 P17090 UNP 71 V +ATOM 550 C CG1 . VAL A 1 71 ? -14.509 7.859 14.485 1.00 94.56 ? 71 VAL A CG1 1 P17090 UNP 71 V +ATOM 551 C CG2 . VAL A 1 71 ? -16.378 7.977 16.051 1.00 94.56 ? 71 VAL A CG2 1 P17090 UNP 71 V +ATOM 552 N N . VAL A 1 72 ? -13.830 4.671 13.842 1.00 95.69 ? 72 VAL A N 1 P17090 UNP 72 V +ATOM 553 C CA . VAL A 1 72 ? -12.597 4.004 13.382 1.00 95.69 ? 72 VAL A CA 1 P17090 UNP 72 V +ATOM 554 C C . VAL A 1 72 ? -11.990 4.736 12.192 1.00 95.69 ? 72 VAL A C 1 P17090 UNP 72 V +ATOM 555 C CB . VAL A 1 72 ? -12.816 2.517 13.031 1.00 95.69 ? 72 VAL A CB 1 P17090 UNP 72 V +ATOM 556 O O . VAL A 1 72 ? -12.720 5.302 11.382 1.00 95.69 ? 72 VAL A O 1 P17090 UNP 72 V +ATOM 557 C CG1 . VAL A 1 72 ? -13.335 1.732 14.236 1.00 95.69 ? 72 VAL A CG1 1 P17090 UNP 72 V +ATOM 558 C CG2 . VAL A 1 72 ? -13.798 2.315 11.879 1.00 95.69 ? 72 VAL A CG2 1 P17090 UNP 72 V +ATOM 559 N N . THR A 1 73 ? -10.664 4.707 12.069 1.00 97.00 ? 73 THR A N 1 P17090 UNP 73 T +ATOM 560 C CA . THR A 1 73 ? -9.952 5.289 10.916 1.00 97.00 ? 73 THR A CA 1 P17090 UNP 73 T +ATOM 561 C C . THR A 1 73 ? -9.544 4.196 9.931 1.00 97.00 ? 73 THR A C 1 P17090 UNP 73 T +ATOM 562 C CB . THR A 1 73 ? -8.728 6.103 11.356 1.00 97.00 ? 73 THR A CB 1 P17090 UNP 73 T +ATOM 563 O O . THR A 1 73 ? -9.040 3.149 10.338 1.00 97.00 ? 73 THR A O 1 P17090 UNP 73 T +ATOM 564 C CG2 . THR A 1 73 ? -8.118 6.910 10.212 1.00 97.00 ? 73 THR A CG2 1 P17090 UNP 73 T +ATOM 565 O OG1 . THR A 1 73 ? -9.090 7.024 12.363 1.00 97.00 ? 73 THR A OG1 1 P17090 UNP 73 T +ATOM 566 N N . ILE A 1 74 ? -9.745 4.427 8.637 1.00 97.56 ? 74 ILE A N 1 P17090 UNP 74 I +ATOM 567 C CA . ILE A 1 74 ? -9.288 3.534 7.573 1.00 97.56 ? 74 ILE A CA 1 P17090 UNP 74 I +ATOM 568 C C . ILE A 1 74 ? -7.782 3.678 7.372 1.00 97.56 ? 74 ILE A C 1 P17090 UNP 74 I +ATOM 569 C CB . ILE A 1 74 ? -10.057 3.800 6.260 1.00 97.56 ? 74 ILE A CB 1 P17090 UNP 74 I +ATOM 570 O O . ILE A 1 74 ? -7.266 4.778 7.171 1.00 97.56 ? 74 ILE A O 1 P17090 UNP 74 I +ATOM 571 C CG1 . ILE A 1 74 ? -11.573 3.539 6.401 1.00 97.56 ? 74 ILE A CG1 1 P17090 UNP 74 I +ATOM 572 C CG2 . ILE A 1 74 ? -9.493 2.963 5.093 1.00 97.56 ? 74 ILE A CG2 1 P17090 UNP 74 I +ATOM 573 C CD1 . ILE A 1 74 ? -11.930 2.151 6.946 1.00 97.56 ? 74 ILE A CD1 1 P17090 UNP 74 I +ATOM 574 N N . GLU A 1 75 ? -7.097 2.542 7.342 1.00 97.50 ? 75 GLU A N 1 P17090 UNP 75 E +ATOM 575 C CA . GLU A 1 75 ? -5.710 2.415 6.916 1.00 97.50 ? 75 GLU A CA 1 P17090 UNP 75 E +ATOM 576 C C . GLU A 1 75 ? -5.679 1.543 5.657 1.00 97.50 ? 75 GLU A C 1 P17090 UNP 75 E +ATOM 577 C CB . GLU A 1 75 ? -4.855 1.828 8.053 1.00 97.50 ? 75 GLU A CB 1 P17090 UNP 75 E +ATOM 578 O O . GLU A 1 75 ? -6.205 0.432 5.626 1.00 97.50 ? 75 GLU A O 1 P17090 UNP 75 E +ATOM 579 C CG . GLU A 1 75 ? -4.767 2.783 9.256 1.00 97.50 ? 75 GLU A CG 1 P17090 UNP 75 E +ATOM 580 C CD . GLU A 1 75 ? -3.916 2.230 10.410 1.00 97.50 ? 75 GLU A CD 1 P17090 UNP 75 E +ATOM 581 O OE1 . GLU A 1 75 ? -3.255 3.048 11.085 1.00 97.50 ? 75 GLU A OE1 1 P17090 UNP 75 E +ATOM 582 O OE2 . GLU A 1 75 ? -3.956 1.003 10.659 1.00 97.50 ? 75 GLU A OE2 1 P17090 UNP 75 E +ATOM 583 N N . ALA A 1 76 ? -5.074 2.033 4.583 1.00 97.94 ? 76 ALA A N 1 P17090 UNP 76 A +ATOM 584 C CA . ALA A 1 76 ? -4.781 1.227 3.416 1.00 97.94 ? 76 ALA A CA 1 P17090 UNP 76 A +ATOM 585 C C . ALA A 1 76 ? -3.740 0.166 3.793 1.00 97.94 ? 76 ALA A C 1 P17090 UNP 76 A +ATOM 586 C CB . ALA A 1 76 ? -4.309 2.135 2.274 1.00 97.94 ? 76 ALA A CB 1 P17090 UNP 76 A +ATOM 587 O O . ALA A 1 76 ? -2.657 0.483 4.302 1.00 97.94 ? 76 ALA A O 1 P17090 UNP 76 A +ATOM 588 N N . ALA A 1 77 ? -4.063 -1.094 3.516 1.00 98.12 ? 77 ALA A N 1 P17090 UNP 77 A +ATOM 589 C CA . ALA A 1 77 ? -3.117 -2.187 3.644 1.00 98.12 ? 77 ALA A CA 1 P17090 UNP 77 A +ATOM 590 C C . ALA A 1 77 ? -1.948 -2.001 2.665 1.00 98.12 ? 77 ALA A C 1 P17090 UNP 77 A +ATOM 591 C CB . ALA A 1 77 ? -3.842 -3.522 3.441 1.00 98.12 ? 77 ALA A CB 1 P17090 UNP 77 A +ATOM 592 O O . ALA A 1 77 ? -2.091 -1.416 1.588 1.00 98.12 ? 77 ALA A O 1 P17090 UNP 77 A +ATOM 593 N N . LYS A 1 78 ? -0.771 -2.506 3.047 1.00 98.44 ? 78 LYS A N 1 P17090 UNP 78 K +ATOM 594 C CA . LYS A 1 78 ? 0.354 -2.615 2.119 1.00 98.44 ? 78 LYS A CA 1 P17090 UNP 78 K +ATOM 595 C C . LYS A 1 78 ? 0.113 -3.796 1.190 1.00 98.44 ? 78 LYS A C 1 P17090 UNP 78 K +ATOM 596 C CB . LYS A 1 78 ? 1.689 -2.755 2.853 1.00 98.44 ? 78 LYS A CB 1 P17090 UNP 78 K +ATOM 597 O O . LYS A 1 78 ? -0.029 -4.924 1.655 1.00 98.44 ? 78 LYS A O 1 P17090 UNP 78 K +ATOM 598 C CG . LYS A 1 78 ? 2.098 -1.459 3.560 1.00 98.44 ? 78 LYS A CG 1 P17090 UNP 78 K +ATOM 599 C CD . LYS A 1 78 ? 3.528 -1.593 4.096 1.00 98.44 ? 78 LYS A CD 1 P17090 UNP 78 K +ATOM 600 C CE . LYS A 1 78 ? 4.058 -0.230 4.548 1.00 98.44 ? 78 LYS A CE 1 P17090 UNP 78 K +ATOM 601 N NZ . LYS A 1 78 ? 5.521 -0.134 4.335 1.00 98.44 ? 78 LYS A NZ 1 P17090 UNP 78 K +ATOM 602 N N . GLU A 1 79 ? 0.111 -3.533 -0.106 1.00 98.38 ? 79 GLU A N 1 P17090 UNP 79 E +ATOM 603 C CA . GLU A 1 79 ? -0.149 -4.519 -1.151 1.00 98.38 ? 79 GLU A CA 1 P17090 UNP 79 E +ATOM 604 C C . GLU A 1 79 ? 1.032 -4.576 -2.121 1.00 98.38 ? 79 GLU A C 1 P17090 UNP 79 E +ATOM 605 C CB . GLU A 1 79 ? -1.473 -4.195 -1.859 1.00 98.38 ? 79 GLU A CB 1 P17090 UNP 79 E +ATOM 606 O O . GLU A 1 79 ? 1.840 -3.646 -2.193 1.00 98.38 ? 79 GLU A O 1 P17090 UNP 79 E +ATOM 607 C CG . GLU A 1 79 ? -2.671 -4.378 -0.914 1.00 98.38 ? 79 GLU A CG 1 P17090 UNP 79 E +ATOM 608 C CD . GLU A 1 79 ? -3.986 -3.983 -1.587 1.00 98.38 ? 79 GLU A CD 1 P17090 UNP 79 E +ATOM 609 O OE1 . GLU A 1 79 ? -4.484 -2.867 -1.314 1.00 98.38 ? 79 GLU A OE1 1 P17090 UNP 79 E +ATOM 610 O OE2 . GLU A 1 79 ? -4.533 -4.798 -2.356 1.00 98.38 ? 79 GLU A OE2 1 P17090 UNP 79 E +ATOM 611 N N . GLN A 1 80 ? 1.166 -5.687 -2.847 1.00 98.50 ? 80 GLN A N 1 P17090 UNP 80 Q +ATOM 612 C CA . GLN A 1 80 ? 2.252 -5.848 -3.808 1.00 98.50 ? 80 GLN A CA 1 P17090 UNP 80 Q +ATOM 613 C C . GLN A 1 80 ? 1.993 -4.976 -5.038 1.00 98.50 ? 80 GLN A C 1 P17090 UNP 80 Q +ATOM 614 C CB . GLN A 1 80 ? 2.451 -7.326 -4.160 1.00 98.50 ? 80 GLN A CB 1 P17090 UNP 80 Q +ATOM 615 O O . GLN A 1 80 ? 1.060 -5.204 -5.809 1.00 98.50 ? 80 GLN A O 1 P17090 UNP 80 Q +ATOM 616 C CG . GLN A 1 80 ? 3.771 -7.524 -4.920 1.00 98.50 ? 80 GLN A CG 1 P17090 UNP 80 Q +ATOM 617 C CD . GLN A 1 80 ? 4.049 -8.982 -5.267 1.00 98.50 ? 80 GLN A CD 1 P17090 UNP 80 Q +ATOM 618 N NE2 . GLN A 1 80 ? 5.256 -9.301 -5.674 1.00 98.50 ? 80 GLN A NE2 1 P17090 UNP 80 Q +ATOM 619 O OE1 . GLN A 1 80 ? 3.211 -9.861 -5.183 1.00 98.50 ? 80 GLN A OE1 1 P17090 UNP 80 Q +ATOM 620 N N . VAL A 1 81 ? 2.845 -3.975 -5.219 1.00 98.75 ? 81 VAL A N 1 P17090 UNP 81 V +ATOM 621 C CA . VAL A 1 81 ? 2.691 -2.944 -6.242 1.00 98.75 ? 81 VAL A CA 1 P17090 UNP 81 V +ATOM 622 C C . VAL A 1 81 ? 3.979 -2.739 -7.020 1.00 98.75 ? 81 VAL A C 1 P17090 UNP 81 V +ATOM 623 C CB . VAL A 1 81 ? 2.224 -1.613 -5.633 1.00 98.75 ? 81 VAL A CB 1 P17090 UNP 81 V +ATOM 624 O O . VAL A 1 81 ? 5.081 -2.941 -6.505 1.00 98.75 ? 81 VAL A O 1 P17090 UNP 81 V +ATOM 625 C CG1 . VAL A 1 81 ? 0.798 -1.702 -5.084 1.00 98.75 ? 81 VAL A CG1 1 P17090 UNP 81 V +ATOM 626 C CG2 . VAL A 1 81 ? 3.168 -1.112 -4.533 1.00 98.75 ? 81 VAL A CG2 1 P17090 UNP 81 V +ATOM 627 N N . SER A 1 82 ? 3.819 -2.266 -8.248 1.00 98.81 ? 82 SER A N 1 P17090 UNP 82 S +ATOM 628 C CA . SER A 1 82 ? 4.886 -1.718 -9.073 1.00 98.81 ? 82 SER A CA 1 P17090 UNP 82 S +ATOM 629 C C . SER A 1 82 ? 4.798 -0.196 -9.038 1.00 98.81 ? 82 SER A C 1 P17090 UNP 82 S +ATOM 630 C CB . SER A 1 82 ? 4.753 -2.241 -10.499 1.00 98.81 ? 82 SER A CB 1 P17090 UNP 82 S +ATOM 631 O O . SER A 1 82 ? 3.753 0.385 -9.334 1.00 98.81 ? 82 SER A O 1 P17090 UNP 82 S +ATOM 632 O OG . SER A 1 82 ? 5.094 -3.610 -10.552 1.00 98.81 ? 82 SER A OG 1 P17090 UNP 82 S +ATOM 633 N N . THR A 1 83 ? 5.892 0.460 -8.652 1.00 98.75 ? 83 THR A N 1 P17090 UNP 83 T +ATOM 634 C CA . THR A 1 83 ? 6.006 1.923 -8.625 1.00 98.75 ? 83 THR A CA 1 P17090 UNP 83 T +ATOM 635 C C . THR A 1 83 ? 7.015 2.376 -9.667 1.00 98.75 ? 83 THR A C 1 P17090 UNP 83 T +ATOM 636 C CB . THR A 1 83 ? 6.391 2.457 -7.238 1.00 98.75 ? 83 THR A CB 1 P17090 UNP 83 T +ATOM 637 O O . THR A 1 83 ? 8.159 1.924 -9.674 1.00 98.75 ? 83 THR A O 1 P17090 UNP 83 T +ATOM 638 C CG2 . THR A 1 83 ? 6.246 3.977 -7.157 1.00 98.75 ? 83 THR A CG2 1 P17090 UNP 83 T +ATOM 639 O OG1 . THR A 1 83 ? 5.541 1.909 -6.248 1.00 98.75 ? 83 THR A OG1 1 P17090 UNP 83 T +ATOM 640 N N . VAL A 1 84 ? 6.589 3.281 -10.538 1.00 98.62 ? 84 VAL A N 1 P17090 UNP 84 V +ATOM 641 C CA . VAL A 1 84 ? 7.453 3.985 -11.481 1.00 98.62 ? 84 VAL A CA 1 P17090 UNP 84 V +ATOM 642 C C . VAL A 1 84 ? 7.861 5.305 -10.853 1.00 98.62 ? 84 VAL A C 1 P17090 UNP 84 V +ATOM 643 C CB . VAL A 1 84 ? 6.730 4.208 -12.818 1.00 98.62 ? 84 VAL A CB 1 P17090 UNP 84 V +ATOM 644 O O . VAL A 1 84 ? 6.992 6.121 -10.563 1.00 98.62 ? 84 VAL A O 1 P17090 UNP 84 V +ATOM 645 C CG1 . VAL A 1 84 ? 7.552 5.109 -13.745 1.00 98.62 ? 84 VAL A CG1 1 P17090 UNP 84 V +ATOM 646 C CG2 . VAL A 1 84 ? 6.497 2.869 -13.524 1.00 98.62 ? 84 VAL A CG2 1 P17090 UNP 84 V +ATOM 647 N N . TYR A 1 85 ? 9.162 5.520 -10.673 1.00 97.81 ? 85 TYR A N 1 P17090 UNP 85 Y +ATOM 648 C CA . TYR A 1 85 ? 9.724 6.796 -10.222 1.00 97.81 ? 85 TYR A CA 1 P17090 UNP 85 Y +ATOM 649 C C . TYR A 1 85 ? 10.365 7.521 -11.404 1.00 97.81 ? 85 TYR A C 1 P17090 UNP 85 Y +ATOM 650 C CB . TYR A 1 85 ? 10.746 6.567 -9.103 1.00 97.81 ? 85 TYR A CB 1 P17090 UNP 85 Y +ATOM 651 O O . TYR A 1 85 ? 11.086 6.902 -12.193 1.00 97.81 ? 85 TYR A O 1 P17090 UNP 85 Y +ATOM 652 C CG . TYR A 1 85 ? 10.151 6.016 -7.823 1.00 97.81 ? 85 TYR A CG 1 P17090 UNP 85 Y +ATOM 653 C CD1 . TYR A 1 85 ? 9.573 6.898 -6.890 1.00 97.81 ? 85 TYR A CD1 1 P17090 UNP 85 Y +ATOM 654 C CD2 . TYR A 1 85 ? 10.171 4.631 -7.565 1.00 97.81 ? 85 TYR A CD2 1 P17090 UNP 85 Y +ATOM 655 C CE1 . TYR A 1 85 ? 9.016 6.401 -5.696 1.00 97.81 ? 85 TYR A CE1 1 P17090 UNP 85 Y +ATOM 656 C CE2 . TYR A 1 85 ? 9.624 4.131 -6.367 1.00 97.81 ? 85 TYR A CE2 1 P17090 UNP 85 Y +ATOM 657 O OH . TYR A 1 85 ? 8.508 4.531 -4.283 1.00 97.81 ? 85 TYR A OH 1 P17090 UNP 85 Y +ATOM 658 C CZ . TYR A 1 85 ? 9.048 5.015 -5.432 1.00 97.81 ? 85 TYR A CZ 1 P17090 UNP 85 Y +ATOM 659 N N . SER A 1 86 ? 10.117 8.823 -11.538 1.00 97.25 ? 86 SER A N 1 P17090 UNP 86 S +ATOM 660 C CA . SER A 1 86 ? 10.741 9.636 -12.578 1.00 97.25 ? 86 SER A CA 1 P17090 UNP 86 S +ATOM 661 C C . SER A 1 86 ? 10.737 11.121 -12.227 1.00 97.25 ? 86 SER A C 1 P17090 UNP 86 S +ATOM 662 C CB . SER A 1 86 ? 10.005 9.436 -13.906 1.00 97.25 ? 86 SER A CB 1 P17090 UNP 86 S +ATOM 663 O O . SER A 1 86 ? 9.681 11.700 -11.977 1.00 97.25 ? 86 SER A O 1 P17090 UNP 86 S +ATOM 664 O OG . SER A 1 86 ? 10.759 10.003 -14.955 1.00 97.25 ? 86 SER A OG 1 P17090 UNP 86 S +ATOM 665 N N . ASP A 1 87 ? 11.913 11.744 -12.308 1.00 96.19 ? 87 ASP A N 1 P17090 UNP 87 D +ATOM 666 C CA . ASP A 1 87 ? 12.073 13.203 -12.246 1.00 96.19 ? 87 ASP A CA 1 P17090 UNP 87 D +ATOM 667 C C . ASP A 1 87 ? 11.763 13.888 -13.594 1.00 96.19 ? 87 ASP A C 1 P17090 UNP 87 D +ATOM 668 C CB . ASP A 1 87 ? 13.496 13.552 -11.777 1.00 96.19 ? 87 ASP A CB 1 P17090 UNP 87 D +ATOM 669 O O . ASP A 1 87 ? 11.844 15.110 -13.696 1.00 96.19 ? 87 ASP A O 1 P17090 UNP 87 D +ATOM 670 C CG . ASP A 1 87 ? 13.829 13.042 -10.372 1.00 96.19 ? 87 ASP A CG 1 P17090 UNP 87 D +ATOM 671 O OD1 . ASP A 1 87 ? 12.923 13.035 -9.510 1.00 96.19 ? 87 ASP A OD1 1 P17090 UNP 87 D +ATOM 672 O OD2 . ASP A 1 87 ? 15.004 12.658 -10.176 1.00 96.19 ? 87 ASP A OD2 1 P17090 UNP 87 D +ATOM 673 N N . ASP A 1 88 ? 11.414 13.117 -14.635 1.00 97.69 ? 88 ASP A N 1 P17090 UNP 88 D +ATOM 674 C CA . ASP A 1 88 ? 10.960 13.609 -15.937 1.00 97.69 ? 88 ASP A CA 1 P17090 UNP 88 D +ATOM 675 C C . ASP A 1 88 ? 9.419 13.520 -16.024 1.00 97.69 ? 88 ASP A C 1 P17090 UNP 88 D +ATOM 676 C CB . ASP A 1 88 ? 11.667 12.842 -17.071 1.00 97.69 ? 88 ASP A CB 1 P17090 UNP 88 D +ATOM 677 O O . ASP A 1 88 ? 8.864 12.436 -16.257 1.00 97.69 ? 88 ASP A O 1 P17090 UNP 88 D +ATOM 678 C CG . ASP A 1 88 ? 11.207 13.262 -18.477 1.00 97.69 ? 88 ASP A CG 1 P17090 UNP 88 D +ATOM 679 O OD1 . ASP A 1 88 ? 10.307 14.127 -18.596 1.00 97.69 ? 88 ASP A OD1 1 P17090 UNP 88 D +ATOM 680 O OD2 . ASP A 1 88 ? 11.718 12.679 -19.457 1.00 97.69 ? 88 ASP A OD2 1 P17090 UNP 88 D +ATOM 681 N N . PRO A 1 89 ? 8.694 14.651 -15.887 1.00 97.56 ? 89 PRO A N 1 P17090 UNP 89 P +ATOM 682 C CA . PRO A 1 89 ? 7.237 14.662 -15.969 1.00 97.56 ? 89 PRO A CA 1 P17090 UNP 89 P +ATOM 683 C C . PRO A 1 89 ? 6.699 14.183 -17.322 1.00 97.56 ? 89 PRO A C 1 P17090 UNP 89 P +ATOM 684 C CB . PRO A 1 89 ? 6.819 16.115 -15.706 1.00 97.56 ? 89 PRO A CB 1 P17090 UNP 89 P +ATOM 685 O O . PRO A 1 89 ? 5.596 13.637 -17.377 1.00 97.56 ? 89 PRO A O 1 P17090 UNP 89 P +ATOM 686 C CG . PRO A 1 89 ? 7.990 16.699 -14.922 1.00 97.56 ? 89 PRO A CG 1 P17090 UNP 89 P +ATOM 687 C CD . PRO A 1 89 ? 9.181 15.979 -15.539 1.00 97.56 ? 89 PRO A CD 1 P17090 UNP 89 P +ATOM 688 N N . LEU A 1 90 ? 7.449 14.367 -18.416 1.00 98.06 ? 90 LEU A N 1 P17090 UNP 90 L +ATOM 689 C CA . LEU A 1 90 ? 7.027 13.934 -19.747 1.00 98.06 ? 90 LEU A CA 1 P17090 UNP 90 L +ATOM 690 C C . LEU A 1 90 ? 7.097 12.409 -19.869 1.00 98.06 ? 90 LEU A C 1 P17090 UNP 90 L +ATOM 691 C CB . LEU A 1 90 ? 7.886 14.637 -20.814 1.00 98.06 ? 90 LEU A CB 1 P17090 UNP 90 L +ATOM 692 O O . LEU A 1 90 ? 6.160 11.793 -20.384 1.00 98.06 ? 90 LEU A O 1 P17090 UNP 90 L +ATOM 693 C CG . LEU A 1 90 ? 7.551 14.236 -22.261 1.00 98.06 ? 90 LEU A CG 1 P17090 UNP 90 L +ATOM 694 C CD1 . LEU A 1 90 ? 6.114 14.595 -22.647 1.00 98.06 ? 90 LEU A CD1 1 P17090 UNP 90 L +ATOM 695 C CD2 . LEU A 1 90 ? 8.499 14.946 -23.227 1.00 98.06 ? 90 LEU A CD2 1 P17090 UNP 90 L +ATOM 696 N N . LEU A 1 91 ? 8.172 11.789 -19.377 1.00 98.19 ? 91 LEU A N 1 P17090 UNP 91 L +ATOM 697 C CA . LEU A 1 91 ? 8.276 10.331 -19.310 1.00 98.19 ? 91 LEU A CA 1 P17090 UNP 91 L +ATOM 698 C C . LEU A 1 91 ? 7.159 9.745 -18.440 1.00 98.19 ? 91 LEU A C 1 P17090 UNP 91 L +ATOM 699 C CB . LEU A 1 91 ? 9.668 9.935 -18.795 1.00 98.19 ? 91 LEU A CB 1 P17090 UNP 91 L +ATOM 700 O O . LEU A 1 91 ? 6.458 8.831 -18.882 1.00 98.19 ? 91 LEU A O 1 P17090 UNP 91 L +ATOM 701 C CG . LEU A 1 91 ? 9.862 8.420 -18.588 1.00 98.19 ? 91 LEU A CG 1 P17090 UNP 91 L +ATOM 702 C CD1 . LEU A 1 91 ? 9.612 7.609 -19.862 1.00 98.19 ? 91 LEU A CD1 1 P17090 UNP 91 L +ATOM 703 C CD2 . LEU A 1 91 ? 11.290 8.146 -18.124 1.00 98.19 ? 91 LEU A CD2 1 P17090 UNP 91 L +ATOM 704 N N . LEU A 1 92 ? 6.941 10.307 -17.246 1.00 98.31 ? 92 LEU A N 1 P17090 UNP 92 L +ATOM 705 C CA . LEU A 1 92 ? 5.883 9.850 -16.344 1.00 98.31 ? 92 LEU A CA 1 P17090 UNP 92 L +ATOM 706 C C . LEU A 1 92 ? 4.496 9.964 -16.996 1.00 98.31 ? 92 LEU A C 1 P17090 UNP 92 L +ATOM 707 C CB . LEU A 1 92 ? 5.972 10.636 -15.024 1.00 98.31 ? 92 LEU A CB 1 P17090 UNP 92 L +ATOM 708 O O . LEU A 1 92 ? 3.722 9.008 -16.959 1.00 98.31 ? 92 LEU A O 1 P17090 UNP 92 L +ATOM 709 C CG . LEU A 1 92 ? 5.040 10.108 -13.917 1.00 98.31 ? 92 LEU A CG 1 P17090 UNP 92 L +ATOM 710 C CD1 . LEU A 1 92 ? 5.386 8.676 -13.499 1.00 98.31 ? 92 LEU A CD1 1 P17090 UNP 92 L +ATOM 711 C CD2 . LEU A 1 92 ? 5.149 11.003 -12.684 1.00 98.31 ? 92 LEU A CD2 1 P17090 UNP 92 L +ATOM 712 N N . ALA A 1 93 ? 4.201 11.077 -17.677 1.00 98.19 ? 93 ALA A N 1 P17090 UNP 93 A +ATOM 713 C CA . ALA A 1 93 ? 2.943 11.260 -18.400 1.00 98.19 ? 93 ALA A CA 1 P17090 UNP 93 A +ATOM 714 C C . ALA A 1 93 ? 2.733 10.205 -19.501 1.00 98.19 ? 93 ALA A C 1 P17090 UNP 93 A +ATOM 715 C CB . ALA A 1 93 ? 2.907 12.680 -18.978 1.00 98.19 ? 93 ALA A CB 1 P17090 UNP 93 A +ATOM 716 O O . ALA A 1 93 ? 1.627 9.682 -19.649 1.00 98.19 ? 93 ALA A O 1 P17090 UNP 93 A +ATOM 717 N N . ARG A 1 94 ? 3.786 9.837 -20.248 1.00 98.25 ? 94 ARG A N 1 P17090 UNP 94 R +ATOM 718 C CA . ARG A 1 94 ? 3.715 8.773 -21.268 1.00 98.25 ? 94 ARG A CA 1 P17090 UNP 94 R +ATOM 719 C C . ARG A 1 94 ? 3.424 7.409 -20.648 1.00 98.25 ? 94 ARG A C 1 P17090 UNP 94 R +ATOM 720 C CB . ARG A 1 94 ? 5.018 8.715 -22.076 1.00 98.25 ? 94 ARG A CB 1 P17090 UNP 94 R +ATOM 721 O O . ARG A 1 94 ? 2.591 6.671 -21.175 1.00 98.25 ? 94 ARG A O 1 P17090 UNP 94 R +ATOM 722 C CG . ARG A 1 94 ? 5.180 9.929 -23.001 1.00 98.25 ? 94 ARG A CG 1 P17090 UNP 94 R +ATOM 723 C CD . ARG A 1 94 ? 6.544 9.909 -23.697 1.00 98.25 ? 94 ARG A CD 1 P17090 UNP 94 R +ATOM 724 N NE . ARG A 1 94 ? 6.627 8.821 -24.693 1.00 98.25 ? 94 ARG A NE 1 P17090 UNP 94 R +ATOM 725 N NH1 . ARG A 1 94 ? 8.860 9.026 -25.176 1.00 98.25 ? 94 ARG A NH1 1 P17090 UNP 94 R +ATOM 726 N NH2 . ARG A 1 94 ? 7.641 7.465 -26.211 1.00 98.25 ? 94 ARG A NH2 1 P17090 UNP 94 R +ATOM 727 C CZ . ARG A 1 94 ? 7.706 8.446 -25.355 1.00 98.25 ? 94 ARG A CZ 1 P17090 UNP 94 R +ATOM 728 N N . VAL A 1 95 ? 4.072 7.085 -19.529 1.00 98.38 ? 95 VAL A N 1 P17090 UNP 95 V +ATOM 729 C CA . VAL A 1 95 ? 3.804 5.848 -18.780 1.00 98.38 ? 95 VAL A CA 1 P17090 UNP 95 V +ATOM 730 C C . VAL A 1 95 ? 2.347 5.817 -18.309 1.00 98.38 ? 95 VAL A C 1 P17090 UNP 95 V +ATOM 731 C CB . VAL A 1 95 ? 4.789 5.695 -17.606 1.00 98.38 ? 95 VAL A CB 1 P17090 UNP 95 V +ATOM 732 O O . VAL A 1 95 ? 1.633 4.860 -18.608 1.00 98.38 ? 95 VAL A O 1 P17090 UNP 95 V +ATOM 733 C CG1 . VAL A 1 95 ? 4.432 4.502 -16.717 1.00 98.38 ? 95 VAL A CG1 1 P17090 UNP 95 V +ATOM 734 C CG2 . VAL A 1 95 ? 6.222 5.475 -18.108 1.00 98.38 ? 95 VAL A CG2 1 P17090 UNP 95 V +ATOM 735 N N . CYS A 1 96 ? 1.870 6.886 -17.663 1.00 98.12 ? 96 CYS A N 1 P17090 UNP 96 C +ATOM 736 C CA . CYS A 1 96 ? 0.481 7.006 -17.211 1.00 98.12 ? 96 CYS A CA 1 P17090 UNP 96 C +ATOM 737 C C . CYS A 1 96 ? -0.523 6.881 -18.368 1.00 98.12 ? 96 CYS A C 1 P17090 UNP 96 C +ATOM 738 C CB . CYS A 1 96 ? 0.298 8.342 -16.476 1.00 98.12 ? 96 CYS A CB 1 P17090 UNP 96 C +ATOM 739 O O . CYS A 1 96 ? -1.527 6.187 -18.227 1.00 98.12 ? 96 CYS A O 1 P17090 UNP 96 C +ATOM 740 S SG . CYS A 1 96 ? 1.248 8.346 -14.928 1.00 98.12 ? 96 CYS A SG 1 P17090 UNP 96 C +ATOM 741 N N . TYR A 1 97 ? -0.242 7.482 -19.531 1.00 98.06 ? 97 TYR A N 1 P17090 UNP 97 Y +ATOM 742 C CA . TYR A 1 97 ? -1.077 7.350 -20.728 1.00 98.06 ? 97 TYR A CA 1 P17090 UNP 97 Y +ATOM 743 C C . TYR A 1 97 ? -1.205 5.890 -21.184 1.00 98.06 ? 97 TYR A C 1 P17090 UNP 97 Y +ATOM 744 C CB . TYR A 1 97 ? -0.501 8.222 -21.854 1.00 98.06 ? 97 TYR A CB 1 P17090 UNP 97 Y +ATOM 745 O O . TYR A 1 97 ? -2.311 5.398 -21.415 1.00 98.06 ? 97 TYR A O 1 P17090 UNP 97 Y +ATOM 746 C CG . TYR A 1 97 ? -1.208 8.043 -23.184 1.00 98.06 ? 97 TYR A CG 1 P17090 UNP 97 Y +ATOM 747 C CD1 . TYR A 1 97 ? -0.644 7.226 -24.186 1.00 98.06 ? 97 TYR A CD1 1 P17090 UNP 97 Y +ATOM 748 C CD2 . TYR A 1 97 ? -2.453 8.664 -23.399 1.00 98.06 ? 97 TYR A CD2 1 P17090 UNP 97 Y +ATOM 749 C CE1 . TYR A 1 97 ? -1.327 7.035 -25.403 1.00 98.06 ? 97 TYR A CE1 1 P17090 UNP 97 Y +ATOM 750 C CE2 . TYR A 1 97 ? -3.140 8.472 -24.613 1.00 98.06 ? 97 TYR A CE2 1 P17090 UNP 97 Y +ATOM 751 O OH . TYR A 1 97 ? -3.231 7.460 -26.790 1.00 98.06 ? 97 TYR A OH 1 P17090 UNP 97 Y +ATOM 752 C CZ . TYR A 1 97 ? -2.576 7.656 -25.616 1.00 98.06 ? 97 TYR A CZ 1 P17090 UNP 97 Y +ATOM 753 N N . HIS A 1 98 ? -0.089 5.163 -21.279 1.00 98.00 ? 98 HIS A N 1 P17090 UNP 98 H +ATOM 754 C CA . HIS A 1 98 ? -0.102 3.768 -21.715 1.00 98.00 ? 98 HIS A CA 1 P17090 UNP 98 H +ATOM 755 C C . HIS A 1 98 ? -0.746 2.812 -20.699 1.00 98.00 ? 98 HIS A C 1 P17090 UNP 98 H +ATOM 756 C CB . HIS A 1 98 ? 1.326 3.329 -22.054 1.00 98.00 ? 98 HIS A CB 1 P17090 UNP 98 H +ATOM 757 O O . HIS A 1 98 ? -1.368 1.833 -21.125 1.00 98.00 ? 98 HIS A O 1 P17090 UNP 98 H +ATOM 758 C CG . HIS A 1 98 ? 1.805 3.840 -23.389 1.00 98.00 ? 98 HIS A CG 1 P17090 UNP 98 H +ATOM 759 C CD2 . HIS A 1 98 ? 2.859 4.684 -23.608 1.00 98.00 ? 98 HIS A CD2 1 P17090 UNP 98 H +ATOM 760 N ND1 . HIS A 1 98 ? 1.274 3.532 -24.624 1.00 98.00 ? 98 HIS A ND1 1 P17090 UNP 98 H +ATOM 761 C CE1 . HIS A 1 98 ? 2.007 4.162 -25.557 1.00 98.00 ? 98 HIS A CE1 1 P17090 UNP 98 H +ATOM 762 N NE2 . HIS A 1 98 ? 2.985 4.878 -24.987 1.00 98.00 ? 98 HIS A NE2 1 P17090 UNP 98 H +ATOM 763 N N . LEU A 1 99 ? -0.613 3.082 -19.395 1.00 97.69 ? 99 LEU A N 1 P17090 UNP 99 L +ATOM 764 C CA . LEU A 1 99 ? -1.307 2.350 -18.327 1.00 97.69 ? 99 LEU A CA 1 P17090 UNP 99 L +ATOM 765 C C . LEU A 1 99 ? -2.816 2.633 -18.359 1.00 97.69 ? 99 LEU A C 1 P17090 UNP 99 L +ATOM 766 C CB . LEU A 1 99 ? -0.694 2.727 -16.960 1.00 97.69 ? 99 LEU A CB 1 P17090 UNP 99 L +ATOM 767 O O . LEU A 1 99 ? -3.618 1.699 -18.367 1.00 97.69 ? 99 LEU A O 1 P17090 UNP 99 L +ATOM 768 C CG . LEU A 1 99 ? 0.730 2.186 -16.733 1.00 97.69 ? 99 LEU A CG 1 P17090 UNP 99 L +ATOM 769 C CD1 . LEU A 1 99 ? 1.364 2.811 -15.494 1.00 97.69 ? 99 LEU A CD1 1 P17090 UNP 99 L +ATOM 770 C CD2 . LEU A 1 99 ? 0.749 0.667 -16.544 1.00 97.69 ? 99 LEU A CD2 1 P17090 UNP 99 L +ATOM 771 N N . GLY A 1 100 ? -3.208 3.903 -18.487 1.00 96.56 ? 100 GLY A N 1 P17090 UNP 100 G +ATOM 772 C CA . GLY A 1 100 ? -4.608 4.317 -18.600 1.00 96.56 ? 100 GLY A CA 1 P17090 UNP 100 G +ATOM 773 C C . GLY A 1 100 ? -5.305 3.733 -19.832 1.00 96.56 ? 100 GLY A C 1 P17090 UNP 100 G +ATOM 774 O O . GLY A 1 100 ? -6.412 3.214 -19.720 1.00 96.56 ? 100 GLY A O 1 P17090 UNP 100 G +ATOM 775 N N . ASN A 1 101 ? -4.631 3.701 -20.989 1.00 96.38 ? 101 ASN A N 1 P17090 UNP 101 N +ATOM 776 C CA . ASN A 1 101 ? -5.143 3.068 -22.215 1.00 96.38 ? 101 ASN A CA 1 P17090 UNP 101 N +ATOM 777 C C . ASN A 1 101 ? -5.346 1.544 -22.081 1.00 96.38 ? 101 ASN A C 1 P17090 UNP 101 N +ATOM 778 C CB . ASN A 1 101 ? -4.180 3.404 -23.366 1.00 96.38 ? 101 ASN A CB 1 P17090 UNP 101 N +ATOM 779 O O . ASN A 1 101 ? -6.004 0.927 -22.912 1.00 96.38 ? 101 ASN A O 1 P17090 UNP 101 N +ATOM 780 C CG . ASN A 1 101 ? -4.722 2.950 -24.712 1.00 96.38 ? 101 ASN A CG 1 P17090 UNP 101 N +ATOM 781 N ND2 . ASN A 1 101 ? -4.141 1.944 -25.324 1.00 96.38 ? 101 ASN A ND2 1 P17090 UNP 101 N +ATOM 782 O OD1 . ASN A 1 101 ? -5.675 3.492 -25.237 1.00 96.38 ? 101 ASN A OD1 1 P17090 UNP 101 N +ATOM 783 N N . ARG A 1 102 ? -4.767 0.922 -21.050 1.00 96.75 ? 102 ARG A N 1 P17090 UNP 102 R +ATOM 784 C CA . ARG A 1 102 ? -4.958 -0.494 -20.707 1.00 96.75 ? 102 ARG A CA 1 P17090 UNP 102 R +ATOM 785 C C . ARG A 1 102 ? -5.951 -0.691 -19.560 1.00 96.75 ? 102 ARG A C 1 P17090 UNP 102 R +ATOM 786 C CB . ARG A 1 102 ? -3.593 -1.131 -20.415 1.00 96.75 ? 102 ARG A CB 1 P17090 UNP 102 R +ATOM 787 O O . ARG A 1 102 ? -6.070 -1.803 -19.063 1.00 96.75 ? 102 ARG A O 1 P17090 UNP 102 R +ATOM 788 C CG . ARG A 1 102 ? -2.770 -1.284 -21.695 1.00 96.75 ? 102 ARG A CG 1 P17090 UNP 102 R +ATOM 789 C CD . ARG A 1 102 ? -1.362 -1.766 -21.340 1.00 96.75 ? 102 ARG A CD 1 P17090 UNP 102 R +ATOM 790 N NE . ARG A 1 102 ? -0.562 -2.021 -22.550 1.00 96.75 ? 102 ARG A NE 1 P17090 UNP 102 R +ATOM 791 N NH1 . ARG A 1 102 ? -0.095 0.166 -23.093 1.00 96.75 ? 102 ARG A NH1 1 P17090 UNP 102 R +ATOM 792 N NH2 . ARG A 1 102 ? 0.744 -1.489 -24.331 1.00 96.75 ? 102 ARG A NH2 1 P17090 UNP 102 R +ATOM 793 C CZ . ARG A 1 102 ? 0.017 -1.115 -23.315 1.00 96.75 ? 102 ARG A CZ 1 P17090 UNP 102 R +ATOM 794 N N . HIS A 1 103 ? -6.654 0.368 -19.150 1.00 94.69 ? 103 HIS A N 1 P17090 UNP 103 H +ATOM 795 C CA . HIS A 1 103 ? -7.589 0.369 -18.024 1.00 94.69 ? 103 HIS A CA 1 P17090 UNP 103 H +ATOM 796 C C . HIS A 1 103 ? -6.960 -0.103 -16.706 1.00 94.69 ? 103 HIS A C 1 P17090 UNP 103 H +ATOM 797 C CB . HIS A 1 103 ? -8.874 -0.387 -18.395 1.00 94.69 ? 103 HIS A CB 1 P17090 UNP 103 H +ATOM 798 O O . HIS A 1 103 ? -7.636 -0.692 -15.866 1.00 94.69 ? 103 HIS A O 1 P17090 UNP 103 H +ATOM 799 C CG . HIS A 1 103 ? -9.575 0.197 -19.589 1.00 94.69 ? 103 HIS A CG 1 P17090 UNP 103 H +ATOM 800 C CD2 . HIS A 1 103 ? -9.484 -0.225 -20.888 1.00 94.69 ? 103 HIS A CD2 1 P17090 UNP 103 H +ATOM 801 N ND1 . HIS A 1 103 ? -10.428 1.275 -19.568 1.00 94.69 ? 103 HIS A ND1 1 P17090 UNP 103 H +ATOM 802 C CE1 . HIS A 1 103 ? -10.848 1.493 -20.824 1.00 94.69 ? 103 HIS A CE1 1 P17090 UNP 103 H +ATOM 803 N NE2 . HIS A 1 103 ? -10.304 0.601 -21.664 1.00 94.69 ? 103 HIS A NE2 1 P17090 UNP 103 H +ATOM 804 N N . VAL A 1 104 ? -5.663 0.156 -16.516 1.00 96.94 ? 104 VAL A N 1 P17090 UNP 104 V +ATOM 805 C CA . VAL A 1 104 ? -4.963 -0.173 -15.273 1.00 96.94 ? 104 VAL A CA 1 P17090 UNP 104 V +ATOM 806 C C . VAL A 1 104 ? -5.347 0.865 -14.216 1.00 96.94 ? 104 VAL A C 1 P17090 UNP 104 V +ATOM 807 C CB . VAL A 1 104 ? -3.439 -0.211 -15.490 1.00 96.94 ? 104 VAL A CB 1 P17090 UNP 104 V +ATOM 808 O O . VAL A 1 104 ? -5.115 2.057 -14.444 1.00 96.94 ? 104 VAL A O 1 P17090 UNP 104 V +ATOM 809 C CG1 . VAL A 1 104 ? -2.685 -0.566 -14.205 1.00 96.94 ? 104 VAL A CG1 1 P17090 UNP 104 V +ATOM 810 C CG2 . VAL A 1 104 ? -3.063 -1.251 -16.554 1.00 96.94 ? 104 VAL A CG2 1 P17090 UNP 104 V +ATOM 811 N N . PRO A 1 105 ? -5.909 0.464 -13.059 1.00 96.50 ? 105 PRO A N 1 P17090 UNP 105 P +ATOM 812 C CA . PRO A 1 105 ? -6.060 1.371 -11.931 1.00 96.50 ? 105 PRO A CA 1 P17090 UNP 105 P +ATOM 813 C C . PRO A 1 105 ? -4.699 1.966 -11.562 1.00 96.50 ? 105 PRO A C 1 P17090 UNP 105 P +ATOM 814 C CB . PRO A 1 105 ? -6.672 0.527 -10.807 1.00 96.50 ? 105 PRO A CB 1 P17090 UNP 105 P +ATOM 815 O O . PRO A 1 105 ? -3.711 1.243 -11.436 1.00 96.50 ? 105 PRO A O 1 P17090 UNP 105 P +ATOM 816 C CG . PRO A 1 105 ? -7.393 -0.596 -11.549 1.00 96.50 ? 105 PRO A CG 1 P17090 UNP 105 P +ATOM 817 C CD . PRO A 1 105 ? -6.453 -0.846 -12.726 1.00 96.50 ? 105 PRO A CD 1 P17090 UNP 105 P +ATOM 818 N N . LEU A 1 106 ? -4.614 3.285 -11.406 1.00 97.06 ? 106 LEU A N 1 P17090 UNP 106 L +ATOM 819 C CA . LEU A 1 106 ? -3.329 3.965 -11.252 1.00 97.06 ? 106 LEU A CA 1 P17090 UNP 106 L +ATOM 820 C C . LEU A 1 106 ? -3.405 4.990 -10.133 1.00 97.06 ? 106 LEU A C 1 P17090 UNP 106 L +ATOM 821 C CB . LEU A 1 106 ? -2.948 4.607 -12.600 1.00 97.06 ? 106 LEU A CB 1 P17090 UNP 106 L +ATOM 822 O O . LEU A 1 106 ? -4.303 5.824 -10.133 1.00 97.06 ? 106 LEU A O 1 P17090 UNP 106 L +ATOM 823 C CG . LEU A 1 106 ? -1.483 5.065 -12.690 1.00 97.06 ? 106 LEU A CG 1 P17090 UNP 106 L +ATOM 824 C CD1 . LEU A 1 106 ? -0.518 3.884 -12.644 1.00 97.06 ? 106 LEU A CD1 1 P17090 UNP 106 L +ATOM 825 C CD2 . LEU A 1 106 ? -1.240 5.760 -14.027 1.00 97.06 ? 106 LEU A CD2 1 P17090 UNP 106 L +ATOM 826 N N . GLN A 1 107 ? -2.464 4.934 -9.196 1.00 97.69 ? 107 GLN A N 1 P17090 UNP 107 Q +ATOM 827 C CA . GLN A 1 107 ? -2.179 6.050 -8.301 1.00 97.69 ? 107 GLN A CA 1 P17090 UNP 107 Q +ATOM 828 C C . GLN A 1 107 ? -1.140 6.930 -8.983 1.00 97.69 ? 107 GLN A C 1 P17090 UNP 107 Q +ATOM 829 C CB . GLN A 1 107 ? -1.703 5.531 -6.941 1.00 97.69 ? 107 GLN A CB 1 P17090 UNP 107 Q +ATOM 830 O O . GLN A 1 107 ? -0.123 6.419 -9.454 1.00 97.69 ? 107 GLN A O 1 P17090 UNP 107 Q +ATOM 831 C CG . GLN A 1 107 ? -1.363 6.690 -5.992 1.00 97.69 ? 107 GLN A CG 1 P17090 UNP 107 Q +ATOM 832 C CD . GLN A 1 107 ? -1.128 6.250 -4.555 1.00 97.69 ? 107 GLN A CD 1 P17090 UNP 107 Q +ATOM 833 N NE2 . GLN A 1 107 ? -0.986 7.192 -3.649 1.00 97.69 ? 107 GLN A NE2 1 P17090 UNP 107 Q +ATOM 834 O OE1 . GLN A 1 107 ? -1.058 5.068 -4.226 1.00 97.69 ? 107 GLN A OE1 1 P17090 UNP 107 Q +ATOM 835 N N . ILE A 1 108 ? -1.404 8.229 -9.053 1.00 97.44 ? 108 ILE A N 1 P17090 UNP 108 I +ATOM 836 C CA . ILE A 1 108 ? -0.532 9.201 -9.710 1.00 97.44 ? 108 ILE A CA 1 P17090 UNP 108 I +ATOM 837 C C . ILE A 1 108 ? -0.193 10.277 -8.691 1.00 97.44 ? 108 ILE A C 1 P17090 UNP 108 I +ATOM 838 C CB . ILE A 1 108 ? -1.205 9.809 -10.959 1.00 97.44 ? 108 ILE A CB 1 P17090 UNP 108 I +ATOM 839 O O . ILE A 1 108 ? -1.085 10.883 -8.112 1.00 97.44 ? 108 ILE A O 1 P17090 UNP 108 I +ATOM 840 C CG1 . ILE A 1 108 ? -1.718 8.720 -11.930 1.00 97.44 ? 108 ILE A CG1 1 P17090 UNP 108 I +ATOM 841 C CG2 . ILE A 1 108 ? -0.203 10.740 -11.672 1.00 97.44 ? 108 ILE A CG2 1 P17090 UNP 108 I +ATOM 842 C CD1 . ILE A 1 108 ? -2.497 9.286 -13.124 1.00 97.44 ? 108 ILE A CD1 1 P17090 UNP 108 I +ATOM 843 N N . GLU A 1 109 ? 1.094 10.517 -8.489 1.00 97.19 ? 109 GLU A N 1 P17090 UNP 109 E +ATOM 844 C CA . GLU A 1 109 ? 1.606 11.502 -7.543 1.00 97.19 ? 109 GLU A CA 1 P17090 UNP 109 E +ATOM 845 C C . GLU A 1 109 ? 2.766 12.275 -8.179 1.00 97.19 ? 109 GLU A C 1 P17090 UNP 109 E +ATOM 846 C CB . GLU A 1 109 ? 2.057 10.778 -6.270 1.00 97.19 ? 109 GLU A CB 1 P17090 UNP 109 E +ATOM 847 O O . GLU A 1 109 ? 3.261 11.944 -9.263 1.00 97.19 ? 109 GLU A O 1 P17090 UNP 109 E +ATOM 848 C CG . GLU A 1 109 ? 0.903 10.124 -5.490 1.00 97.19 ? 109 GLU A CG 1 P17090 UNP 109 E +ATOM 849 C CD . GLU A 1 109 ? -0.031 11.079 -4.757 1.00 97.19 ? 109 GLU A CD 1 P17090 UNP 109 E +ATOM 850 O OE1 . GLU A 1 109 ? -0.960 10.524 -4.119 1.00 97.19 ? 109 GLU A OE1 1 P17090 UNP 109 E +ATOM 851 O OE2 . GLU A 1 109 ? 0.257 12.300 -4.735 1.00 97.19 ? 109 GLU A OE2 1 P17090 UNP 109 E +ATOM 852 N N . ALA A 1 110 ? 3.222 13.333 -7.513 1.00 96.25 ? 110 ALA A N 1 P17090 UNP 110 A +ATOM 853 C CA . ALA A 1 110 ? 4.370 14.094 -7.990 1.00 96.25 ? 110 ALA A CA 1 P17090 UNP 110 A +ATOM 854 C C . ALA A 1 110 ? 5.636 13.213 -8.013 1.00 96.25 ? 110 ALA A C 1 P17090 UNP 110 A +ATOM 855 C CB . ALA A 1 110 ? 4.533 15.351 -7.131 1.00 96.25 ? 110 ALA A CB 1 P17090 UNP 110 A +ATOM 856 O O . ALA A 1 110 ? 6.128 12.779 -6.970 1.00 96.25 ? 110 ALA A O 1 P17090 UNP 110 A +ATOM 857 N N . GLY A 1 111 ? 6.160 12.962 -9.216 1.00 97.50 ? 111 GLY A N 1 P17090 UNP 111 G +ATOM 858 C CA . GLY A 1 111 ? 7.393 12.200 -9.445 1.00 97.50 ? 111 GLY A CA 1 P17090 UNP 111 G +ATOM 859 C C . GLY A 1 111 ? 7.224 10.679 -9.486 1.00 97.50 ? 111 GLY A C 1 P17090 UNP 111 G +ATOM 860 O O . GLY A 1 111 ? 8.215 9.968 -9.670 1.00 97.50 ? 111 GLY A O 1 P17090 UNP 111 G +ATOM 861 N N . TRP A 1 112 ? 6.005 10.148 -9.330 1.00 98.31 ? 112 TRP A N 1 P17090 UNP 112 W +ATOM 862 C CA . TRP A 1 112 ? 5.783 8.706 -9.426 1.00 98.31 ? 112 TRP A CA 1 P17090 UNP 112 W +ATOM 863 C C . TRP A 1 112 ? 4.347 8.302 -9.766 1.00 98.31 ? 112 TRP A C 1 P17090 UNP 112 W +ATOM 864 C CB . TRP A 1 112 ? 6.249 8.023 -8.132 1.00 98.31 ? 112 TRP A CB 1 P17090 UNP 112 W +ATOM 865 O O . TRP A 1 112 ? 3.386 9.028 -9.526 1.00 98.31 ? 112 TRP A O 1 P17090 UNP 112 W +ATOM 866 C CG . TRP A 1 112 ? 5.576 8.456 -6.871 1.00 98.31 ? 112 TRP A CG 1 P17090 UNP 112 W +ATOM 867 C CD1 . TRP A 1 112 ? 5.950 9.493 -6.086 1.00 98.31 ? 112 TRP A CD1 1 P17090 UNP 112 W +ATOM 868 C CD2 . TRP A 1 112 ? 4.398 7.879 -6.240 1.00 98.31 ? 112 TRP A CD2 1 P17090 UNP 112 W +ATOM 869 C CE2 . TRP A 1 112 ? 4.196 8.539 -4.993 1.00 98.31 ? 112 TRP A CE2 1 P17090 UNP 112 W +ATOM 870 C CE3 . TRP A 1 112 ? 3.483 6.864 -6.595 1.00 98.31 ? 112 TRP A CE3 1 P17090 UNP 112 W +ATOM 871 N NE1 . TRP A 1 112 ? 5.125 9.556 -4.982 1.00 98.31 ? 112 TRP A NE1 1 P17090 UNP 112 W +ATOM 872 C CH2 . TRP A 1 112 ? 2.309 7.127 -4.476 1.00 98.31 ? 112 TRP A CH2 1 P17090 UNP 112 W +ATOM 873 C CZ2 . TRP A 1 112 ? 3.201 8.142 -4.095 1.00 98.31 ? 112 TRP A CZ2 1 P17090 UNP 112 W +ATOM 874 C CZ3 . TRP A 1 112 ? 2.427 6.515 -5.734 1.00 98.31 ? 112 TRP A CZ3 1 P17090 UNP 112 W +ATOM 875 N N . CYS A 1 113 ? 4.191 7.093 -10.303 1.00 98.50 ? 113 CYS A N 1 P17090 UNP 113 C +ATOM 876 C CA . CYS A 1 113 ? 2.896 6.425 -10.408 1.00 98.50 ? 113 CYS A CA 1 P17090 UNP 113 C +ATOM 877 C C . CYS A 1 113 ? 2.995 4.972 -9.935 1.00 98.50 ? 113 CYS A C 1 P17090 UNP 113 C +ATOM 878 C CB . CYS A 1 113 ? 2.308 6.589 -11.817 1.00 98.50 ? 113 CYS A CB 1 P17090 UNP 113 C +ATOM 879 O O . CYS A 1 113 ? 4.075 4.380 -9.929 1.00 98.50 ? 113 CYS A O 1 P17090 UNP 113 C +ATOM 880 S SG . CYS A 1 113 ? 3.170 5.580 -13.058 1.00 98.50 ? 113 CYS A SG 1 P17090 UNP 113 C +ATOM 881 N N . ARG A 1 114 ? 1.878 4.401 -9.485 1.00 98.56 ? 114 ARG A N 1 P17090 UNP 114 R +ATOM 882 C CA . ARG A 1 114 ? 1.832 3.076 -8.858 1.00 98.56 ? 114 ARG A CA 1 P17090 UNP 114 R +ATOM 883 C C . ARG A 1 114 ? 0.602 2.299 -9.291 1.00 98.56 ? 114 ARG A C 1 P17090 UNP 114 R +ATOM 884 C CB . ARG A 1 114 ? 1.891 3.257 -7.338 1.00 98.56 ? 114 ARG A CB 1 P17090 UNP 114 R +ATOM 885 O O . ARG A 1 114 ? -0.492 2.852 -9.349 1.00 98.56 ? 114 ARG A O 1 P17090 UNP 114 R +ATOM 886 C CG . ARG A 1 114 ? 1.803 1.959 -6.527 1.00 98.56 ? 114 ARG A CG 1 P17090 UNP 114 R +ATOM 887 C CD . ARG A 1 114 ? 1.865 2.297 -5.034 1.00 98.56 ? 114 ARG A CD 1 P17090 UNP 114 R +ATOM 888 N NE . ARG A 1 114 ? 3.232 2.684 -4.653 1.00 98.56 ? 114 ARG A NE 1 P17090 UNP 114 R +ATOM 889 N NH1 . ARG A 1 114 ? 2.756 3.728 -2.660 1.00 98.56 ? 114 ARG A NH1 1 P17090 UNP 114 R +ATOM 890 N NH2 . ARG A 1 114 ? 4.833 3.747 -3.473 1.00 98.56 ? 114 ARG A NH2 1 P17090 UNP 114 R +ATOM 891 C CZ . ARG A 1 114 ? 3.590 3.386 -3.600 1.00 98.56 ? 114 ARG A CZ 1 P17090 UNP 114 R +ATOM 892 N N . TYR A 1 115 ? 0.786 1.015 -9.551 1.00 98.50 ? 115 TYR A N 1 P17090 UNP 115 Y +ATOM 893 C CA . TYR A 1 115 ? -0.257 0.064 -9.929 1.00 98.50 ? 115 TYR A CA 1 P17090 UNP 115 Y +ATOM 894 C C . TYR A 1 115 ? 0.018 -1.283 -9.255 1.00 98.50 ? 115 TYR A C 1 P17090 UNP 115 Y +ATOM 895 C CB . TYR A 1 115 ? -0.334 -0.041 -11.464 1.00 98.50 ? 115 TYR A CB 1 P17090 UNP 115 Y +ATOM 896 O O . TYR A 1 115 ? 1.105 -1.503 -8.714 1.00 98.50 ? 115 TYR A O 1 P17090 UNP 115 Y +ATOM 897 C CG . TYR A 1 115 ? 0.986 -0.315 -12.171 1.00 98.50 ? 115 TYR A CG 1 P17090 UNP 115 Y +ATOM 898 C CD1 . TYR A 1 115 ? 1.877 0.743 -12.437 1.00 98.50 ? 115 TYR A CD1 1 P17090 UNP 115 Y +ATOM 899 C CD2 . TYR A 1 115 ? 1.326 -1.621 -12.570 1.00 98.50 ? 115 TYR A CD2 1 P17090 UNP 115 Y +ATOM 900 C CE1 . TYR A 1 115 ? 3.110 0.493 -13.066 1.00 98.50 ? 115 TYR A CE1 1 P17090 UNP 115 Y +ATOM 901 C CE2 . TYR A 1 115 ? 2.571 -1.884 -13.171 1.00 98.50 ? 115 TYR A CE2 1 P17090 UNP 115 Y +ATOM 902 O OH . TYR A 1 115 ? 4.650 -1.057 -14.037 1.00 98.50 ? 115 TYR A OH 1 P17090 UNP 115 Y +ATOM 903 C CZ . TYR A 1 115 ? 3.462 -0.824 -13.427 1.00 98.50 ? 115 TYR A CZ 1 P17090 UNP 115 Y +ATOM 904 N N . PHE A 1 116 ? -0.961 -2.186 -9.251 1.00 98.25 ? 116 PHE A N 1 P17090 UNP 116 F +ATOM 905 C CA . PHE A 1 116 ? -0.728 -3.552 -8.782 1.00 98.25 ? 116 PHE A CA 1 P17090 UNP 116 F +ATOM 906 C C . PHE A 1 116 ? 0.374 -4.229 -9.586 1.00 98.25 ? 116 PHE A C 1 P17090 UNP 116 F +ATOM 907 C CB . PHE A 1 116 ? -2.009 -4.375 -8.877 1.00 98.25 ? 116 PHE A CB 1 P17090 UNP 116 F +ATOM 908 O O . PHE A 1 116 ? 0.449 -4.044 -10.796 1.00 98.25 ? 116 PHE A O 1 P17090 UNP 116 F +ATOM 909 C CG . PHE A 1 116 ? -3.005 -4.052 -7.793 1.00 98.25 ? 116 PHE A CG 1 P17090 UNP 116 F +ATOM 910 C CD1 . PHE A 1 116 ? -2.616 -4.166 -6.445 1.00 98.25 ? 116 PHE A CD1 1 P17090 UNP 116 F +ATOM 911 C CD2 . PHE A 1 116 ? -4.330 -3.718 -8.125 1.00 98.25 ? 116 PHE A CD2 1 P17090 UNP 116 F +ATOM 912 C CE1 . PHE A 1 116 ? -3.561 -3.974 -5.431 1.00 98.25 ? 116 PHE A CE1 1 P17090 UNP 116 F +ATOM 913 C CE2 . PHE A 1 116 ? -5.281 -3.546 -7.107 1.00 98.25 ? 116 PHE A CE2 1 P17090 UNP 116 F +ATOM 914 C CZ . PHE A 1 116 ? -4.894 -3.698 -5.766 1.00 98.25 ? 116 PHE A CZ 1 P17090 UNP 116 F +ATOM 915 N N . HIS A 1 117 ? 1.226 -5.001 -8.916 1.00 98.50 ? 117 HIS A N 1 P17090 UNP 117 H +ATOM 916 C CA . HIS A 1 117 ? 2.357 -5.622 -9.589 1.00 98.50 ? 117 HIS A CA 1 P17090 UNP 117 H +ATOM 917 C C . HIS A 1 117 ? 1.906 -6.533 -10.742 1.00 98.50 ? 117 HIS A C 1 P17090 UNP 117 H +ATOM 918 C CB . HIS A 1 117 ? 3.209 -6.382 -8.573 1.00 98.50 ? 117 HIS A CB 1 P17090 UNP 117 H +ATOM 919 O O . HIS A 1 117 ? 1.144 -7.477 -10.539 1.00 98.50 ? 117 HIS A O 1 P17090 UNP 117 H +ATOM 920 C CG . HIS A 1 117 ? 4.332 -7.136 -9.231 1.00 98.50 ? 117 HIS A CG 1 P17090 UNP 117 H +ATOM 921 C CD2 . HIS A 1 117 ? 4.495 -8.494 -9.258 1.00 98.50 ? 117 HIS A CD2 1 P17090 UNP 117 H +ATOM 922 N ND1 . HIS A 1 117 ? 5.314 -6.592 -10.027 1.00 98.50 ? 117 HIS A ND1 1 P17090 UNP 117 H +ATOM 923 C CE1 . HIS A 1 117 ? 6.052 -7.598 -10.520 1.00 98.50 ? 117 HIS A CE1 1 P17090 UNP 117 H +ATOM 924 N NE2 . HIS A 1 117 ? 5.606 -8.781 -10.061 1.00 98.50 ? 117 HIS A NE2 1 P17090 UNP 117 H +ATOM 925 N N . ASP A 1 118 ? 2.425 -6.259 -11.937 1.00 98.19 ? 118 ASP A N 1 P17090 UNP 118 D +ATOM 926 C CA . ASP A 1 118 ? 2.251 -7.075 -13.133 1.00 98.19 ? 118 ASP A CA 1 P17090 UNP 118 D +ATOM 927 C C . ASP A 1 118 ? 3.513 -6.952 -13.993 1.00 98.19 ? 118 ASP A C 1 P17090 UNP 118 D +ATOM 928 C CB . ASP A 1 118 ? 0.999 -6.623 -13.903 1.00 98.19 ? 118 ASP A CB 1 P17090 UNP 118 D +ATOM 929 O O . ASP A 1 118 ? 3.802 -5.894 -14.555 1.00 98.19 ? 118 ASP A O 1 P17090 UNP 118 D +ATOM 930 C CG . ASP A 1 118 ? 0.702 -7.479 -15.144 1.00 98.19 ? 118 ASP A CG 1 P17090 UNP 118 D +ATOM 931 O OD1 . ASP A 1 118 ? 1.664 -7.944 -15.800 1.00 98.19 ? 118 ASP A OD1 1 P17090 UNP 118 D +ATOM 932 O OD2 . ASP A 1 118 ? -0.493 -7.663 -15.453 1.00 98.19 ? 118 ASP A OD2 1 P17090 UNP 118 D +ATOM 933 N N . HIS A 1 119 ? 4.258 -8.049 -14.120 1.00 97.69 ? 119 HIS A N 1 P17090 UNP 119 H +ATOM 934 C CA . HIS A 1 119 ? 5.498 -8.093 -14.894 1.00 97.69 ? 119 HIS A CA 1 P17090 UNP 119 H +ATOM 935 C C . HIS A 1 119 ? 5.354 -7.633 -16.361 1.00 97.69 ? 119 HIS A C 1 P17090 UNP 119 H +ATOM 936 C CB . HIS A 1 119 ? 6.080 -9.512 -14.822 1.00 97.69 ? 119 HIS A CB 1 P17090 UNP 119 H +ATOM 937 O O . HIS A 1 119 ? 6.290 -7.040 -16.893 1.00 97.69 ? 119 HIS A O 1 P17090 UNP 119 H +ATOM 938 C CG . HIS A 1 119 ? 5.288 -10.556 -15.578 1.00 97.69 ? 119 HIS A CG 1 P17090 UNP 119 H +ATOM 939 C CD2 . HIS A 1 119 ? 5.718 -11.267 -16.667 1.00 97.69 ? 119 HIS A CD2 1 P17090 UNP 119 H +ATOM 940 N ND1 . HIS A 1 119 ? 3.990 -10.950 -15.329 1.00 97.69 ? 119 HIS A ND1 1 P17090 UNP 119 H +ATOM 941 C CE1 . HIS A 1 119 ? 3.659 -11.887 -16.230 1.00 97.69 ? 119 HIS A CE1 1 P17090 UNP 119 H +ATOM 942 N NE2 . HIS A 1 119 ? 4.683 -12.121 -17.065 1.00 97.69 ? 119 HIS A NE2 1 P17090 UNP 119 H +ATOM 943 N N . VAL A 1 120 ? 4.200 -7.836 -17.010 1.00 98.19 ? 120 VAL A N 1 P17090 UNP 120 V +ATOM 944 C CA . VAL A 1 120 ? 3.955 -7.388 -18.394 1.00 98.19 ? 120 VAL A CA 1 P17090 UNP 120 V +ATOM 945 C C . VAL A 1 120 ? 3.838 -5.865 -18.455 1.00 98.19 ? 120 VAL A C 1 P17090 UNP 120 V +ATOM 946 C CB . VAL A 1 120 ? 2.673 -8.032 -18.968 1.00 98.19 ? 120 VAL A CB 1 P17090 UNP 120 V +ATOM 947 O O . VAL A 1 120 ? 4.357 -5.227 -19.376 1.00 98.19 ? 120 VAL A O 1 P17090 UNP 120 V +ATOM 948 C CG1 . VAL A 1 120 ? 2.398 -7.585 -20.412 1.00 98.19 ? 120 VAL A CG1 1 P17090 UNP 120 V +ATOM 949 C CG2 . VAL A 1 120 ? 2.760 -9.562 -18.970 1.00 98.19 ? 120 VAL A CG2 1 P17090 UNP 120 V +ATOM 950 N N . LEU A 1 121 ? 3.163 -5.264 -17.471 1.00 98.38 ? 121 LEU A N 1 P17090 UNP 121 L +ATOM 951 C CA . LEU A 1 121 ? 3.065 -3.809 -17.350 1.00 98.38 ? 121 LEU A CA 1 P17090 UNP 121 L +ATOM 952 C C . LEU A 1 121 ? 4.410 -3.192 -16.960 1.00 98.38 ? 121 LEU A C 1 P17090 UNP 121 L +ATOM 953 C CB . LEU A 1 121 ? 1.984 -3.436 -16.327 1.00 98.38 ? 121 LEU A CB 1 P17090 UNP 121 L +ATOM 954 O O . LEU A 1 121 ? 4.769 -2.137 -17.489 1.00 98.38 ? 121 LEU A O 1 P17090 UNP 121 L +ATOM 955 C CG . LEU A 1 121 ? 0.558 -3.897 -16.671 1.00 98.38 ? 121 LEU A CG 1 P17090 UNP 121 L +ATOM 956 C CD1 . LEU A 1 121 ? -0.392 -3.393 -15.586 1.00 98.38 ? 121 LEU A CD1 1 P17090 UNP 121 L +ATOM 957 C CD2 . LEU A 1 121 ? 0.076 -3.349 -18.021 1.00 98.38 ? 121 LEU A CD2 1 P17090 UNP 121 L +ATOM 958 N N . ASP A 1 122 ? 5.175 -3.876 -16.111 1.00 98.50 ? 122 ASP A N 1 P17090 UNP 122 D +ATOM 959 C CA . ASP A 1 122 ? 6.523 -3.458 -15.750 1.00 98.50 ? 122 ASP A CA 1 P17090 UNP 122 D +ATOM 960 C C . ASP A 1 122 ? 7.432 -3.402 -16.984 1.00 98.50 ? 122 ASP A C 1 P17090 UNP 122 D +ATOM 961 C CB . ASP A 1 122 ? 7.167 -4.416 -14.745 1.00 98.50 ? 122 ASP A CB 1 P17090 UNP 122 D +ATOM 962 O O . ASP A 1 122 ? 8.124 -2.407 -17.198 1.00 98.50 ? 122 ASP A O 1 P17090 UNP 122 D +ATOM 963 C CG . ASP A 1 122 ? 6.521 -4.575 -13.376 1.00 98.50 ? 122 ASP A CG 1 P17090 UNP 122 D +ATOM 964 O OD1 . ASP A 1 122 ? 5.584 -3.831 -13.030 1.00 98.50 ? 122 ASP A OD1 1 P17090 UNP 122 D +ATOM 965 O OD2 . ASP A 1 122 ? 7.083 -5.386 -12.605 1.00 98.50 ? 122 ASP A OD2 1 P17090 UNP 122 D +ATOM 966 N N . ASP A 1 123 ? 7.416 -4.443 -17.820 1.00 98.25 ? 123 ASP A N 1 P17090 UNP 123 D +ATOM 967 C CA . ASP A 1 123 ? 8.219 -4.504 -19.045 1.00 98.25 ? 123 ASP A CA 1 P17090 UNP 123 D +ATOM 968 C C . ASP A 1 123 ? 7.798 -3.437 -20.058 1.00 98.25 ? 123 ASP A C 1 P17090 UNP 123 D +ATOM 969 C CB . ASP A 1 123 ? 8.132 -5.908 -19.659 1.00 98.25 ? 123 ASP A CB 1 P17090 UNP 123 D +ATOM 970 O O . ASP A 1 123 ? 8.647 -2.832 -20.714 1.00 98.25 ? 123 ASP A O 1 P17090 UNP 123 D +ATOM 971 C CG . ASP A 1 123 ? 8.949 -6.950 -18.887 1.00 98.25 ? 123 ASP A CG 1 P17090 UNP 123 D +ATOM 972 O OD1 . ASP A 1 123 ? 9.797 -6.542 -18.047 1.00 98.25 ? 123 ASP A OD1 1 P17090 UNP 123 D +ATOM 973 O OD2 . ASP A 1 123 ? 8.770 -8.148 -19.197 1.00 98.25 ? 123 ASP A OD2 1 P17090 UNP 123 D +ATOM 974 N N . MET A 1 124 ? 6.501 -3.129 -20.134 1.00 97.94 ? 124 MET A N 1 P17090 UNP 124 M +ATOM 975 C CA . MET A 1 124 ? 6.000 -2.005 -20.924 1.00 97.94 ? 124 MET A CA 1 P17090 UNP 124 M +ATOM 976 C C . MET A 1 124 ? 6.553 -0.664 -20.415 1.00 97.94 ? 124 MET A C 1 P17090 UNP 124 M +ATOM 977 C CB . MET A 1 124 ? 4.466 -2.066 -20.940 1.00 97.94 ? 124 MET A CB 1 P17090 UNP 124 M +ATOM 978 O O . MET A 1 124 ? 7.052 0.129 -21.216 1.00 97.94 ? 124 MET A O 1 P17090 UNP 124 M +ATOM 979 C CG . MET A 1 124 ? 3.788 -0.934 -21.724 1.00 97.94 ? 124 MET A CG 1 P17090 UNP 124 M +ATOM 980 S SD . MET A 1 124 ? 3.636 0.683 -20.909 1.00 97.94 ? 124 MET A SD 1 P17090 UNP 124 M +ATOM 981 C CE . MET A 1 124 ? 2.656 0.255 -19.447 1.00 97.94 ? 124 MET A CE 1 P17090 UNP 124 M +ATOM 982 N N . ALA A 1 125 ? 6.530 -0.421 -19.101 1.00 98.12 ? 125 ALA A N 1 P17090 UNP 125 A +ATOM 983 C CA . ALA A 1 125 ? 7.075 0.801 -18.511 1.00 98.12 ? 125 ALA A CA 1 P17090 UNP 125 A +ATOM 984 C C . ALA A 1 125 ? 8.601 0.903 -18.701 1.00 98.12 ? 125 ALA A C 1 P17090 UNP 125 A +ATOM 985 C CB . ALA A 1 125 ? 6.663 0.859 -17.036 1.00 98.12 ? 125 ALA A CB 1 P17090 UNP 125 A +ATOM 986 O O . ALA A 1 125 ? 9.102 1.956 -19.104 1.00 98.12 ? 125 ALA A O 1 P17090 UNP 125 A +ATOM 987 N N . ARG A 1 126 ? 9.339 -0.199 -18.508 1.00 98.12 ? 126 ARG A N 1 P17090 UNP 126 R +ATOM 988 C CA . ARG A 1 126 ? 10.784 -0.279 -18.797 1.00 98.12 ? 126 ARG A CA 1 P17090 UNP 126 R +ATOM 989 C C . ARG A 1 126 ? 11.080 -0.022 -20.274 1.00 98.12 ? 126 ARG A C 1 P17090 UNP 126 R +ATOM 990 C CB . ARG A 1 126 ? 11.341 -1.649 -18.384 1.00 98.12 ? 126 ARG A CB 1 P17090 UNP 126 R +ATOM 991 O O . ARG A 1 126 ? 12.019 0.702 -20.586 1.00 98.12 ? 126 ARG A O 1 P17090 UNP 126 R +ATOM 992 C CG . ARG A 1 126 ? 11.388 -1.858 -16.864 1.00 98.12 ? 126 ARG A CG 1 P17090 UNP 126 R +ATOM 993 C CD . ARG A 1 126 ? 11.896 -3.273 -16.552 1.00 98.12 ? 126 ARG A CD 1 P17090 UNP 126 R +ATOM 994 N NE . ARG A 1 126 ? 11.629 -3.642 -15.149 1.00 98.12 ? 126 ARG A NE 1 P17090 UNP 126 R +ATOM 995 N NH1 . ARG A 1 126 ? 10.161 -5.412 -15.519 1.00 98.12 ? 126 ARG A NH1 1 P17090 UNP 126 R +ATOM 996 N NH2 . ARG A 1 126 ? 10.478 -4.640 -13.462 1.00 98.12 ? 126 ARG A NH2 1 P17090 UNP 126 R +ATOM 997 C CZ . ARG A 1 126 ? 10.770 -4.564 -14.733 1.00 98.12 ? 126 ARG A CZ 1 P17090 UNP 126 R +ATOM 998 N N . GLY A 1 127 ? 10.251 -0.540 -21.182 1.00 97.88 ? 127 GLY A N 1 P17090 UNP 127 G +ATOM 999 C CA . GLY A 1 127 ? 10.352 -0.303 -22.626 1.00 97.88 ? 127 GLY A CA 1 P17090 UNP 127 G +ATOM 1000 C C . GLY A 1 127 ? 10.161 1.163 -23.036 1.00 97.88 ? 127 GLY A C 1 P17090 UNP 127 G +ATOM 1001 O O . GLY A 1 127 ? 10.676 1.580 -24.071 1.00 97.88 ? 127 GLY A O 1 P17090 UNP 127 G +ATOM 1002 N N . LEU A 1 128 ? 9.479 1.968 -22.213 1.00 97.44 ? 128 LEU A N 1 P17090 UNP 128 L +ATOM 1003 C CA . LEU A 1 128 ? 9.376 3.425 -22.380 1.00 97.44 ? 128 LEU A CA 1 P17090 UNP 128 L +ATOM 1004 C C . LEU A 1 128 ? 10.580 4.191 -21.804 1.00 97.44 ? 128 LEU A C 1 P17090 UNP 128 L +ATOM 1005 C CB . LEU A 1 128 ? 8.060 3.921 -21.752 1.00 97.44 ? 128 LEU A CB 1 P17090 UNP 128 L +ATOM 1006 O O . LEU A 1 128 ? 10.662 5.403 -21.995 1.00 97.44 ? 128 LEU A O 1 P17090 UNP 128 L +ATOM 1007 C CG . LEU A 1 128 ? 6.792 3.424 -22.463 1.00 97.44 ? 128 LEU A CG 1 P17090 UNP 128 L +ATOM 1008 C CD1 . LEU A 1 128 ? 5.575 3.743 -21.598 1.00 97.44 ? 128 LEU A CD1 1 P17090 UNP 128 L +ATOM 1009 C CD2 . LEU A 1 128 ? 6.606 4.094 -23.830 1.00 97.44 ? 128 LEU A CD2 1 P17090 UNP 128 L +ATOM 1010 N N . GLY A 1 129 ? 11.502 3.504 -21.124 1.00 97.12 ? 129 GLY A N 1 P17090 UNP 129 G +ATOM 1011 C CA . GLY A 1 129 ? 12.669 4.088 -20.460 1.00 97.12 ? 129 GLY A CA 1 P17090 UNP 129 G +ATOM 1012 C C . GLY A 1 129 ? 12.475 4.375 -18.969 1.00 97.12 ? 129 GLY A C 1 P17090 UNP 129 G +ATOM 1013 O O . GLY A 1 129 ? 13.317 5.043 -18.376 1.00 97.12 ? 129 GLY A O 1 P17090 UNP 129 G +ATOM 1014 N N . ALA A 1 130 ? 11.386 3.907 -18.352 1.00 97.44 ? 130 ALA A N 1 P17090 UNP 130 A +ATOM 1015 C CA . ALA A 1 130 ? 11.109 4.160 -16.941 1.00 97.44 ? 130 ALA A CA 1 P17090 UNP 130 A +ATOM 1016 C C . ALA A 1 130 ? 11.760 3.130 -15.999 1.00 97.44 ? 130 ALA A C 1 P17090 UNP 130 A +ATOM 1017 C CB . ALA A 1 130 ? 9.596 4.252 -16.748 1.00 97.44 ? 130 ALA A CB 1 P17090 UNP 130 A +ATOM 1018 O O . ALA A 1 130 ? 11.912 1.954 -16.335 1.00 97.44 ? 130 ALA A O 1 P17090 UNP 130 A +ATOM 1019 N N . THR A 1 131 ? 12.079 3.561 -14.776 1.00 96.94 ? 131 THR A N 1 P17090 UNP 131 T +ATOM 1020 C CA . THR A 1 131 ? 12.537 2.680 -13.692 1.00 96.94 ? 131 THR A CA 1 P17090 UNP 131 T +ATOM 1021 C C . THR A 1 131 ? 11.338 2.187 -12.889 1.00 96.94 ? 131 THR A C 1 P17090 UNP 131 T +ATOM 1022 C CB . THR A 1 131 ? 13.533 3.402 -12.774 1.00 96.94 ? 131 THR A CB 1 P17090 UNP 131 T +ATOM 1023 O O . THR A 1 131 ? 10.582 2.995 -12.351 1.00 96.94 ? 131 THR A O 1 P17090 UNP 131 T +ATOM 1024 C CG2 . THR A 1 131 ? 14.060 2.509 -11.648 1.00 96.94 ? 131 THR A CG2 1 P17090 UNP 131 T +ATOM 1025 O OG1 . THR A 1 131 ? 14.656 3.790 -13.529 1.00 96.94 ? 131 THR A OG1 1 P17090 UNP 131 T +ATOM 1026 N N . VAL A 1 132 ? 11.182 0.865 -12.779 1.00 98.44 ? 132 VAL A N 1 P17090 UNP 132 V +ATOM 1027 C CA . VAL A 1 132 ? 10.098 0.217 -12.021 1.00 98.44 ? 132 VAL A CA 1 P17090 UNP 132 V +ATOM 1028 C C . VAL A 1 132 ? 10.666 -0.458 -10.774 1.00 98.44 ? 132 VAL A C 1 P17090 UNP 132 V +ATOM 1029 C CB . VAL A 1 132 ? 9.338 -0.821 -12.872 1.00 98.44 ? 132 VAL A CB 1 P17090 UNP 132 V +ATOM 1030 O O . VAL A 1 132 ? 11.580 -1.276 -10.882 1.00 98.44 ? 132 VAL A O 1 P17090 UNP 132 V +ATOM 1031 C CG1 . VAL A 1 132 ? 8.115 -1.348 -12.111 1.00 98.44 ? 132 VAL A CG1 1 P17090 UNP 132 V +ATOM 1032 C CG2 . VAL A 1 132 ? 8.843 -0.267 -14.212 1.00 98.44 ? 132 VAL A CG2 1 P17090 UNP 132 V +ATOM 1033 N N . VAL A 1 133 ? 10.093 -0.159 -9.607 1.00 98.56 ? 133 VAL A N 1 P17090 UNP 133 V +ATOM 1034 C CA . VAL A 1 133 ? 10.412 -0.784 -8.315 1.00 98.56 ? 133 VAL A CA 1 P17090 UNP 133 V +ATOM 1035 C C . VAL A 1 133 ? 9.196 -1.559 -7.816 1.00 98.56 ? 133 VAL A C 1 P17090 UNP 133 V +ATOM 1036 C CB . VAL A 1 133 ? 10.847 0.270 -7.278 1.00 98.56 ? 133 VAL A CB 1 P17090 UNP 133 V +ATOM 1037 O O . VAL A 1 133 ? 8.109 -0.995 -7.696 1.00 98.56 ? 133 VAL A O 1 P17090 UNP 133 V +ATOM 1038 C CG1 . VAL A 1 133 ? 11.189 -0.371 -5.926 1.00 98.56 ? 133 VAL A CG1 1 P17090 UNP 133 V +ATOM 1039 C CG2 . VAL A 1 133 ? 12.081 1.047 -7.756 1.00 98.56 ? 133 VAL A CG2 1 P17090 UNP 133 V +ATOM 1040 N N . VAL A 1 134 ? 9.384 -2.840 -7.500 1.00 98.62 ? 134 VAL A N 1 P17090 UNP 134 V +ATOM 1041 C CA . VAL A 1 134 ? 8.341 -3.704 -6.926 1.00 98.62 ? 134 VAL A CA 1 P17090 UNP 134 V +ATOM 1042 C C . VAL A 1 134 ? 8.490 -3.736 -5.407 1.00 98.62 ? 134 VAL A C 1 P17090 UNP 134 V +ATOM 1043 C CB . VAL A 1 134 ? 8.379 -5.122 -7.528 1.00 98.62 ? 134 VAL A CB 1 P17090 UNP 134 V +ATOM 1044 O O . VAL A 1 134 ? 9.597 -3.921 -4.900 1.00 98.62 ? 134 VAL A O 1 P17090 UNP 134 V +ATOM 1045 C CG1 . VAL A 1 134 ? 7.230 -5.992 -6.998 1.00 98.62 ? 134 VAL A CG1 1 P17090 UNP 134 V +ATOM 1046 C CG2 . VAL A 1 134 ? 8.276 -5.072 -9.058 1.00 98.62 ? 134 VAL A CG2 1 P17090 UNP 134 V +ATOM 1047 N N . GLY A 1 135 ? 7.390 -3.574 -4.672 1.00 98.31 ? 135 GLY A N 1 P17090 UNP 135 G +ATOM 1048 C CA . GLY A 1 135 ? 7.409 -3.569 -3.209 1.00 98.31 ? 135 GLY A CA 1 P17090 UNP 135 G +ATOM 1049 C C . GLY A 1 135 ? 6.028 -3.714 -2.576 1.00 98.31 ? 135 GLY A C 1 P17090 UNP 135 G +ATOM 1050 O O . GLY A 1 135 ? 5.017 -3.771 -3.273 1.00 98.31 ? 135 GLY A O 1 P17090 UNP 135 G +ATOM 1051 N N . LEU A 1 136 ? 6.000 -3.789 -1.243 1.00 98.62 ? 136 LEU A N 1 P17090 UNP 136 L +ATOM 1052 C CA . LEU A 1 136 ? 4.773 -3.765 -0.444 1.00 98.62 ? 136 LEU A CA 1 P17090 UNP 136 L +ATOM 1053 C C . LEU A 1 136 ? 4.518 -2.342 0.042 1.00 98.62 ? 136 LEU A C 1 P17090 UNP 136 L +ATOM 1054 C CB . LEU A 1 136 ? 4.887 -4.736 0.744 1.00 98.62 ? 136 LEU A CB 1 P17090 UNP 136 L +ATOM 1055 O O . LEU A 1 136 ? 5.176 -1.873 0.974 1.00 98.62 ? 136 LEU A O 1 P17090 UNP 136 L +ATOM 1056 C CG . LEU A 1 136 ? 4.828 -6.224 0.369 1.00 98.62 ? 136 LEU A CG 1 P17090 UNP 136 L +ATOM 1057 C CD1 . LEU A 1 136 ? 5.116 -7.062 1.615 1.00 98.62 ? 136 LEU A CD1 1 P17090 UNP 136 L +ATOM 1058 C CD2 . LEU A 1 136 ? 3.457 -6.625 -0.176 1.00 98.62 ? 136 LEU A CD2 1 P17090 UNP 136 L +ATOM 1059 N N . GLU A 1 137 ? 3.549 -1.668 -0.564 1.00 98.31 ? 137 GLU A N 1 P17090 UNP 137 E +ATOM 1060 C CA . GLU A 1 137 ? 3.222 -0.282 -0.237 1.00 98.31 ? 137 GLU A CA 1 P17090 UNP 137 E +ATOM 1061 C C . GLU A 1 137 ? 1.718 -0.040 -0.196 1.00 98.31 ? 137 GLU A C 1 P17090 UNP 137 E +ATOM 1062 C CB . GLU A 1 137 ? 3.900 0.690 -1.220 1.00 98.31 ? 137 GLU A CB 1 P17090 UNP 137 E +ATOM 1063 O O . GLU A 1 137 ? 0.927 -0.809 -0.741 1.00 98.31 ? 137 GLU A O 1 P17090 UNP 137 E +ATOM 1064 C CG . GLU A 1 137 ? 5.423 0.807 -1.050 1.00 98.31 ? 137 GLU A CG 1 P17090 UNP 137 E +ATOM 1065 C CD . GLU A 1 137 ? 5.830 1.300 0.352 1.00 98.31 ? 137 GLU A CD 1 P17090 UNP 137 E +ATOM 1066 O OE1 . GLU A 1 137 ? 7.003 1.103 0.734 1.00 98.31 ? 137 GLU A OE1 1 P17090 UNP 137 E +ATOM 1067 O OE2 . GLU A 1 137 ? 4.963 1.853 1.075 1.00 98.31 ? 137 GLU A OE2 1 P17090 UNP 137 E +ATOM 1068 N N . LYS A 1 138 ? 1.321 1.049 0.469 1.00 97.75 ? 138 LYS A N 1 P17090 UNP 138 K +ATOM 1069 C CA . LYS A 1 138 ? -0.065 1.523 0.424 1.00 97.75 ? 138 LYS A CA 1 P17090 UNP 138 K +ATOM 1070 C C . LYS A 1 138 ? -0.405 1.957 -0.997 1.00 97.75 ? 138 LYS A C 1 P17090 UNP 138 K +ATOM 1071 C CB . LYS A 1 138 ? -0.300 2.679 1.404 1.00 97.75 ? 138 LYS A CB 1 P17090 UNP 138 K +ATOM 1072 O O . LYS A 1 138 ? 0.425 2.554 -1.690 1.00 97.75 ? 138 LYS A O 1 P17090 UNP 138 K +ATOM 1073 C CG . LYS A 1 138 ? -0.094 2.259 2.864 1.00 97.75 ? 138 LYS A CG 1 P17090 UNP 138 K +ATOM 1074 C CD . LYS A 1 138 ? -0.554 3.376 3.811 1.00 97.75 ? 138 LYS A CD 1 P17090 UNP 138 K +ATOM 1075 C CE . LYS A 1 138 ? -0.573 2.892 5.264 1.00 97.75 ? 138 LYS A CE 1 P17090 UNP 138 K +ATOM 1076 N NZ . LYS A 1 138 ? -1.322 3.830 6.135 1.00 97.75 ? 138 LYS A NZ 1 P17090 UNP 138 K +ATOM 1077 N N . TYR A 1 139 ? -1.633 1.691 -1.413 1.00 97.38 ? 139 TYR A N 1 P17090 UNP 139 Y +ATOM 1078 C CA . TYR A 1 139 ? -2.070 1.954 -2.774 1.00 97.38 ? 139 TYR A CA 1 P17090 UNP 139 Y +ATOM 1079 C C . TYR A 1 139 ? -3.416 2.672 -2.776 1.00 97.38 ? 139 TYR A C 1 P17090 UNP 139 Y +ATOM 1080 C CB . TYR A 1 139 ? -2.095 0.613 -3.507 1.00 97.38 ? 139 TYR A CB 1 P17090 UNP 139 Y +ATOM 1081 O O . TYR A 1 139 ? -4.367 2.198 -2.171 1.00 97.38 ? 139 TYR A O 1 P17090 UNP 139 Y +ATOM 1082 C CG . TYR A 1 139 ? -2.531 0.689 -4.948 1.00 97.38 ? 139 TYR A CG 1 P17090 UNP 139 Y +ATOM 1083 C CD1 . TYR A 1 139 ? -3.412 -0.290 -5.429 1.00 97.38 ? 139 TYR A CD1 1 P17090 UNP 139 Y +ATOM 1084 C CD2 . TYR A 1 139 ? -2.075 1.718 -5.800 1.00 97.38 ? 139 TYR A CD2 1 P17090 UNP 139 Y +ATOM 1085 C CE1 . TYR A 1 139 ? -3.888 -0.221 -6.742 1.00 97.38 ? 139 TYR A CE1 1 P17090 UNP 139 Y +ATOM 1086 C CE2 . TYR A 1 139 ? -2.536 1.775 -7.126 1.00 97.38 ? 139 TYR A CE2 1 P17090 UNP 139 Y +ATOM 1087 O OH . TYR A 1 139 ? -3.891 0.791 -8.855 1.00 97.38 ? 139 TYR A OH 1 P17090 UNP 139 Y +ATOM 1088 C CZ . TYR A 1 139 ? -3.438 0.798 -7.590 1.00 97.38 ? 139 TYR A CZ 1 P17090 UNP 139 Y +ATOM 1089 N N . GLN A 1 140 ? -3.501 3.836 -3.415 1.00 95.56 ? 140 GLN A N 1 P17090 UNP 140 Q +ATOM 1090 C CA . GLN A 1 140 ? -4.729 4.621 -3.531 1.00 95.56 ? 140 GLN A CA 1 P17090 UNP 140 Q +ATOM 1091 C C . GLN A 1 140 ? -4.857 5.168 -4.958 1.00 95.56 ? 140 GLN A C 1 P17090 UNP 140 Q +ATOM 1092 C CB . GLN A 1 140 ? -4.759 5.714 -2.456 1.00 95.56 ? 140 GLN A CB 1 P17090 UNP 140 Q +ATOM 1093 O O . GLN A 1 140 ? -4.453 6.297 -5.224 1.00 95.56 ? 140 GLN A O 1 P17090 UNP 140 Q +ATOM 1094 C CG . GLN A 1 140 ? -6.115 6.437 -2.456 1.00 95.56 ? 140 GLN A CG 1 P17090 UNP 140 Q +ATOM 1095 C CD . GLN A 1 140 ? -6.325 7.219 -1.171 1.00 95.56 ? 140 GLN A CD 1 P17090 UNP 140 Q +ATOM 1096 N NE2 . GLN A 1 140 ? -6.480 8.522 -1.225 1.00 95.56 ? 140 GLN A NE2 1 P17090 UNP 140 Q +ATOM 1097 O OE1 . GLN A 1 140 ? -6.372 6.657 -0.091 1.00 95.56 ? 140 GLN A OE1 1 P17090 UNP 140 Q +ATOM 1098 N N . PRO A 1 141 ? -5.358 4.354 -5.897 1.00 96.12 ? 141 PRO A N 1 P17090 UNP 141 P +ATOM 1099 C CA . PRO A 1 141 ? -5.542 4.763 -7.276 1.00 96.12 ? 141 PRO A CA 1 P17090 UNP 141 P +ATOM 1100 C C . PRO A 1 141 ? -6.601 5.849 -7.428 1.00 96.12 ? 141 PRO A C 1 P17090 UNP 141 P +ATOM 1101 C CB . PRO A 1 141 ? -5.913 3.498 -8.043 1.00 96.12 ? 141 PRO A CB 1 P17090 UNP 141 P +ATOM 1102 O O . PRO A 1 141 ? -7.472 6.035 -6.575 1.00 96.12 ? 141 PRO A O 1 P17090 UNP 141 P +ATOM 1103 C CG . PRO A 1 141 ? -6.573 2.641 -6.971 1.00 96.12 ? 141 PRO A CG 1 P17090 UNP 141 P +ATOM 1104 C CD . PRO A 1 141 ? -5.879 3.025 -5.683 1.00 96.12 ? 141 PRO A CD 1 P17090 UNP 141 P +ATOM 1105 N N . GLU A 1 142 ? -6.543 6.518 -8.574 1.00 93.12 ? 142 GLU A N 1 P17090 UNP 142 E +ATOM 1106 C CA . GLU A 1 142 ? -7.502 7.533 -8.971 1.00 93.12 ? 142 GLU A CA 1 P17090 UNP 142 E +ATOM 1107 C C . GLU A 1 142 ? -8.944 6.984 -8.928 1.00 93.12 ? 142 GLU A C 1 P17090 UNP 142 E +ATOM 1108 C CB . GLU A 1 142 ? -7.155 8.052 -10.377 1.00 93.12 ? 142 GLU A CB 1 P17090 UNP 142 E +ATOM 1109 O O . GLU A 1 142 ? -9.202 5.879 -9.428 1.00 93.12 ? 142 GLU A O 1 P17090 UNP 142 E +ATOM 1110 C CG . GLU A 1 142 ? -5.888 8.921 -10.405 1.00 93.12 ? 142 GLU A CG 1 P17090 UNP 142 E +ATOM 1111 C CD . GLU A 1 142 ? -6.096 10.185 -9.568 1.00 93.12 ? 142 GLU A CD 1 P17090 UNP 142 E +ATOM 1112 O OE1 . GLU A 1 142 ? -5.667 10.174 -8.395 1.00 93.12 ? 142 GLU A OE1 1 P17090 UNP 142 E +ATOM 1113 O OE2 . GLU A 1 142 ? -6.795 11.095 -10.067 1.00 93.12 ? 142 GLU A OE2 1 P17090 UNP 142 E +ATOM 1114 N N . PRO A 1 143 ? -9.924 7.743 -8.391 1.00 82.81 ? 143 PRO A N 1 P17090 UNP 143 P +ATOM 1115 C CA . PRO A 1 143 ? -11.300 7.267 -8.194 1.00 82.81 ? 143 PRO A CA 1 P17090 UNP 143 P +ATOM 1116 C C . PRO A 1 143 ? -11.990 6.755 -9.464 1.00 82.81 ? 143 PRO A C 1 P17090 UNP 143 P +ATOM 1117 C CB . PRO A 1 143 ? -12.065 8.472 -7.637 1.00 82.81 ? 143 PRO A CB 1 P17090 UNP 143 P +ATOM 1118 O O . PRO A 1 143 ? -12.857 5.880 -9.395 1.00 82.81 ? 143 PRO A O 1 P17090 UNP 143 P +ATOM 1119 C CG . PRO A 1 143 ? -10.988 9.300 -6.942 1.00 82.81 ? 143 PRO A CG 1 P17090 UNP 143 P +ATOM 1120 C CD . PRO A 1 143 ? -9.751 9.064 -7.799 1.00 82.81 ? 143 PRO A CD 1 P17090 UNP 143 P +ATOM 1121 N N . GLY A 1 144 ? -11.597 7.283 -10.629 1.00 79.44 ? 144 GLY A N 1 P17090 UNP 144 G +ATOM 1122 C CA . GLY A 1 144 ? -12.143 6.888 -11.928 1.00 79.44 ? 144 GLY A CA 1 P17090 UNP 144 G +ATOM 1123 C C . GLY A 1 144 ? -11.958 5.401 -12.246 1.00 79.44 ? 144 GLY A C 1 P17090 UNP 144 G +ATOM 1124 O O . GLY A 1 144 ? -12.756 4.840 -12.989 1.00 79.44 ? 144 GLY A O 1 P17090 UNP 144 G +ATOM 1125 N N . ALA A 1 145 ? -10.972 4.736 -11.635 1.00 69.88 ? 145 ALA A N 1 P17090 UNP 145 A +ATOM 1126 C CA . ALA A 1 145 ? -10.731 3.309 -11.835 1.00 69.88 ? 145 ALA A CA 1 P17090 UNP 145 A +ATOM 1127 C C . ALA A 1 145 ? -11.781 2.395 -11.171 1.00 69.88 ? 145 ALA A C 1 P17090 UNP 145 A +ATOM 1128 C CB . ALA A 1 145 ? -9.320 3.002 -11.330 1.00 69.88 ? 145 ALA A CB 1 P17090 UNP 145 A +ATOM 1129 O O . ALA A 1 145 ? -11.931 1.249 -11.586 1.00 69.88 ? 145 ALA A O 1 P17090 UNP 145 A +ATOM 1130 N N . TYR A 1 146 ? -12.522 2.888 -10.171 1.00 72.62 ? 146 TYR A N 1 P17090 UNP 146 Y +ATOM 1131 C CA . TYR A 1 146 ? -13.468 2.087 -9.374 1.00 72.62 ? 146 TYR A CA 1 P17090 UNP 146 Y +ATOM 1132 C C . TYR A 1 146 ? -14.906 2.624 -9.424 1.00 72.62 ? 146 TYR A C 1 P17090 UNP 146 Y +ATOM 1133 C CB . TYR A 1 146 ? -12.929 1.907 -7.947 1.00 72.62 ? 146 TYR A CB 1 P17090 UNP 146 Y +ATOM 1134 O O . TYR A 1 146 ? -15.714 2.351 -8.539 1.00 72.62 ? 146 TYR A O 1 P17090 UNP 146 Y +ATOM 1135 C CG . TYR A 1 146 ? -11.663 1.079 -7.900 1.00 72.62 ? 146 TYR A CG 1 P17090 UNP 146 Y +ATOM 1136 C CD1 . TYR A 1 146 ? -11.733 -0.326 -7.811 1.00 72.62 ? 146 TYR A CD1 1 P17090 UNP 146 Y +ATOM 1137 C CD2 . TYR A 1 146 ? -10.413 1.710 -8.013 1.00 72.62 ? 146 TYR A CD2 1 P17090 UNP 146 Y +ATOM 1138 C CE1 . TYR A 1 146 ? -10.556 -1.097 -7.766 1.00 72.62 ? 146 TYR A CE1 1 P17090 UNP 146 Y +ATOM 1139 C CE2 . TYR A 1 146 ? -9.247 0.930 -8.051 1.00 72.62 ? 146 TYR A CE2 1 P17090 UNP 146 Y +ATOM 1140 O OH . TYR A 1 146 ? -8.156 -1.195 -7.848 1.00 72.62 ? 146 TYR A OH 1 P17090 UNP 146 Y +ATOM 1141 C CZ . TYR A 1 146 ? -9.303 -0.466 -7.881 1.00 72.62 ? 146 TYR A CZ 1 P17090 UNP 146 Y +ATOM 1142 N N . GLY A 1 147 ? -15.249 3.382 -10.471 1.00 60.84 ? 147 GLY A N 1 P17090 UNP 147 G +ATOM 1143 C CA . GLY A 1 147 ? -16.609 3.897 -10.659 1.00 60.84 ? 147 GLY A CA 1 P17090 UNP 147 G +ATOM 1144 C C . GLY A 1 147 ? -16.944 5.108 -9.787 1.00 60.84 ? 147 GLY A C 1 P17090 UNP 147 G +ATOM 1145 O O . GLY A 1 147 ? -18.122 5.404 -9.577 1.00 60.84 ? 147 GLY A O 1 P17090 UNP 147 G +ATOM 1146 N N . GLY A 1 148 ? -15.922 5.823 -9.297 1.00 50.50 ? 148 GLY A N 1 P17090 UNP 148 G +ATOM 1147 C CA . GLY A 1 148 ? -16.088 7.097 -8.612 1.00 50.50 ? 148 GLY A CA 1 P17090 UNP 148 G +ATOM 1148 C C . GLY A 1 148 ? -16.809 8.093 -9.514 1.00 50.50 ? 148 GLY A C 1 P17090 UNP 148 G +ATOM 1149 O O . GLY A 1 148 ? -16.225 8.645 -10.442 1.00 50.50 ? 148 GLY A O 1 P17090 UNP 148 G +ATOM 1150 N N . SER A 1 149 ? -18.091 8.310 -9.228 1.00 40.91 ? 149 SER A N 1 P17090 UNP 149 S +ATOM 1151 C CA . SER A 1 149 ? -18.896 9.368 -9.826 1.00 40.91 ? 149 SER A CA 1 P17090 UNP 149 S +ATOM 1152 C C . SER A 1 149 ? -18.369 10.714 -9.337 1.00 40.91 ? 149 SER A C 1 P17090 UNP 149 S +ATOM 1153 C CB . SER A 1 149 ? -20.371 9.191 -9.450 1.00 40.91 ? 149 SER A CB 1 P17090 UNP 149 S +ATOM 1154 O O . SER A 1 149 ? -18.792 11.228 -8.303 1.00 40.91 ? 149 SER A O 1 P17090 UNP 149 S +ATOM 1155 O OG . SER A 1 149 ? -20.891 8.013 -10.036 1.00 40.91 ? 149 SER A OG 1 P17090 UNP 149 S +ATOM 1156 N N . SER A 1 150 ? -17.441 11.303 -10.082 1.00 42.12 ? 150 SER A N 1 P17090 UNP 150 S +ATOM 1157 C CA . SER A 1 150 ? -17.249 12.748 -10.101 1.00 42.12 ? 150 SER A CA 1 P17090 UNP 150 S +ATOM 1158 C C . SER A 1 150 ? -18.558 13.392 -10.580 1.00 42.12 ? 150 SER A C 1 P17090 UNP 150 S +ATOM 1159 C CB . SER A 1 150 ? -16.053 13.112 -11.001 1.00 42.12 ? 150 SER A CB 1 P17090 UNP 150 S +ATOM 1160 O O . SER A 1 150 ? -18.792 13.542 -11.769 1.00 42.12 ? 150 SER A O 1 P17090 UNP 150 S +ATOM 1161 O OG . SER A 1 150 ? -15.910 12.208 -12.084 1.00 42.12 ? 150 SER A OG 1 P17090 UNP 150 S +ATOM 1162 N N . GLY A 1 151 ? -19.449 13.722 -9.641 1.00 38.84 ? 151 GLY A N 1 P17090 UNP 151 G +ATOM 1163 C CA . GLY A 1 151 ? -20.626 14.558 -9.883 1.00 38.84 ? 151 GLY A CA 1 P17090 UNP 151 G +ATOM 1164 C C . GLY A 1 151 ? -21.699 13.933 -10.778 1.00 38.84 ? 151 GLY A C 1 P17090 UNP 151 G +ATOM 1165 O O . GLY A 1 151 ? -21.850 14.303 -11.937 1.00 38.84 ? 151 GLY A O 1 P17090 UNP 151 G +ATOM 1166 N N . GLY A 1 152 ? -22.534 13.060 -10.211 1.00 33.53 ? 152 GLY A N 1 P17090 UNP 152 G +ATOM 1167 C CA . GLY A 1 152 ? -23.834 12.746 -10.805 1.00 33.53 ? 152 GLY A CA 1 P17090 UNP 152 G +ATOM 1168 C C . GLY A 1 152 ? -24.751 13.972 -10.763 1.00 33.53 ? 152 GLY A C 1 P17090 UNP 152 G +ATOM 1169 O O . GLY A 1 152 ? -25.522 14.142 -9.823 1.00 33.53 ? 152 GLY A O 1 P17090 UNP 152 G +ATOM 1170 N N . HIS A 1 153 ? -24.672 14.842 -11.773 1.00 40.31 ? 153 HIS A N 1 P17090 UNP 153 H +ATOM 1171 C CA . HIS A 1 153 ? -25.784 15.717 -12.135 1.00 40.31 ? 153 HIS A CA 1 P17090 UNP 153 H +ATOM 1172 C C . HIS A 1 153 ? -26.920 14.832 -12.654 1.00 40.31 ? 153 HIS A C 1 P17090 UNP 153 H +ATOM 1173 C CB . HIS A 1 153 ? -25.351 16.773 -13.170 1.00 40.31 ? 153 HIS A CB 1 P17090 UNP 153 H +ATOM 1174 O O . HIS A 1 153 ? -26.934 14.414 -13.811 1.00 40.31 ? 153 HIS A O 1 P17090 UNP 153 H +ATOM 1175 C CG . HIS A 1 153 ? -24.690 17.995 -12.578 1.00 40.31 ? 153 HIS A CG 1 P17090 UNP 153 H +ATOM 1176 C CD2 . HIS A 1 153 ? -24.483 19.190 -13.214 1.00 40.31 ? 153 HIS A CD2 1 P17090 UNP 153 H +ATOM 1177 N ND1 . HIS A 1 153 ? -24.242 18.146 -11.284 1.00 40.31 ? 153 HIS A ND1 1 P17090 UNP 153 H +ATOM 1178 C CE1 . HIS A 1 153 ? -23.777 19.398 -11.145 1.00 40.31 ? 153 HIS A CE1 1 P17090 UNP 153 H +ATOM 1179 N NE2 . HIS A 1 153 ? -23.901 20.073 -12.296 1.00 40.31 ? 153 HIS A NE2 1 P17090 UNP 153 H +ATOM 1180 N N . HIS A 1 154 ? -27.878 14.529 -11.779 1.00 43.38 ? 154 HIS A N 1 P17090 UNP 154 H +ATOM 1181 C CA . HIS A 1 154 ? -29.189 14.048 -12.188 1.00 43.38 ? 154 HIS A CA 1 P17090 UNP 154 H +ATOM 1182 C C . HIS A 1 154 ? -29.896 15.170 -12.965 1.00 43.38 ? 154 HIS A C 1 P17090 UNP 154 H +ATOM 1183 C CB . HIS A 1 154 ? -29.995 13.604 -10.954 1.00 43.38 ? 154 HIS A CB 1 P17090 UNP 154 H +ATOM 1184 O O . HIS A 1 154 ? -30.596 15.994 -12.383 1.00 43.38 ? 154 HIS A O 1 P17090 UNP 154 H +ATOM 1185 C CG . HIS A 1 154 ? -29.566 12.274 -10.387 1.00 43.38 ? 154 HIS A CG 1 P17090 UNP 154 H +ATOM 1186 C CD2 . HIS A 1 154 ? -28.800 12.053 -9.274 1.00 43.38 ? 154 HIS A CD2 1 P17090 UNP 154 H +ATOM 1187 N ND1 . HIS A 1 154 ? -29.916 11.040 -10.888 1.00 43.38 ? 154 HIS A ND1 1 P17090 UNP 154 H +ATOM 1188 C CE1 . HIS A 1 154 ? -29.374 10.100 -10.097 1.00 43.38 ? 154 HIS A CE1 1 P17090 UNP 154 H +ATOM 1189 N NE2 . HIS A 1 154 ? -28.685 10.669 -9.098 1.00 43.38 ? 154 HIS A NE2 1 P17090 UNP 154 H +ATOM 1190 N N . HIS A 1 155 ? -29.716 15.213 -14.287 1.00 49.62 ? 155 HIS A N 1 P17090 UNP 155 H +ATOM 1191 C CA . HIS A 1 155 ? -30.641 15.923 -15.164 1.00 49.62 ? 155 HIS A CA 1 P17090 UNP 155 H +ATOM 1192 C C . HIS A 1 155 ? -31.898 15.065 -15.318 1.00 49.62 ? 155 HIS A C 1 P17090 UNP 155 H +ATOM 1193 C CB . HIS A 1 155 ? -29.982 16.291 -16.501 1.00 49.62 ? 155 HIS A CB 1 P17090 UNP 155 H +ATOM 1194 O O . HIS A 1 155 ? -31.989 14.201 -16.188 1.00 49.62 ? 155 HIS A O 1 P17090 UNP 155 H +ATOM 1195 C CG . HIS A 1 155 ? -29.085 17.498 -16.379 1.00 49.62 ? 155 HIS A CG 1 P17090 UNP 155 H +ATOM 1196 C CD2 . HIS A 1 155 ? -27.721 17.527 -16.486 1.00 49.62 ? 155 HIS A CD2 1 P17090 UNP 155 H +ATOM 1197 N ND1 . HIS A 1 155 ? -29.498 18.784 -16.110 1.00 49.62 ? 155 HIS A ND1 1 P17090 UNP 155 H +ATOM 1198 C CE1 . HIS A 1 155 ? -28.409 19.567 -16.053 1.00 49.62 ? 155 HIS A CE1 1 P17090 UNP 155 H +ATOM 1199 N NE2 . HIS A 1 155 ? -27.300 18.845 -16.273 1.00 49.62 ? 155 HIS A NE2 1 P17090 UNP 155 H +ATOM 1200 N N . HIS A 1 156 ? -32.860 15.293 -14.425 1.00 48.78 ? 156 HIS A N 1 P17090 UNP 156 H +ATOM 1201 C CA . HIS A 1 156 ? -34.241 14.893 -14.644 1.00 48.78 ? 156 HIS A CA 1 P17090 UNP 156 H +ATOM 1202 C C . HIS A 1 156 ? -34.782 15.785 -15.772 1.00 48.78 ? 156 HIS A C 1 P17090 UNP 156 H +ATOM 1203 C CB . HIS A 1 156 ? -35.032 15.010 -13.323 1.00 48.78 ? 156 HIS A CB 1 P17090 UNP 156 H +ATOM 1204 O O . HIS A 1 156 ? -35.100 16.953 -15.559 1.00 48.78 ? 156 HIS A O 1 P17090 UNP 156 H +ATOM 1205 C CG . HIS A 1 156 ? -35.982 13.863 -13.088 1.00 48.78 ? 156 HIS A CG 1 P17090 UNP 156 H +ATOM 1206 C CD2 . HIS A 1 156 ? -35.659 12.664 -12.513 1.00 48.78 ? 156 HIS A CD2 1 P17090 UNP 156 H +ATOM 1207 N ND1 . HIS A 1 156 ? -37.333 13.831 -13.365 1.00 48.78 ? 156 HIS A ND1 1 P17090 UNP 156 H +ATOM 1208 C CE1 . HIS A 1 156 ? -37.796 12.627 -12.989 1.00 48.78 ? 156 HIS A CE1 1 P17090 UNP 156 H +ATOM 1209 N NE2 . HIS A 1 156 ? -36.812 11.877 -12.457 1.00 48.78 ? 156 HIS A NE2 1 P17090 UNP 156 H +ATOM 1210 N N . HIS A 1 157 ? -34.801 15.268 -17.001 1.00 54.53 ? 157 HIS A N 1 P17090 UNP 157 H +ATOM 1211 C CA . HIS A 1 157 ? -35.633 15.839 -18.053 1.00 54.53 ? 157 HIS A CA 1 P17090 UNP 157 H +ATOM 1212 C C . HIS A 1 157 ? -37.055 15.333 -17.827 1.00 54.53 ? 157 HIS A C 1 P17090 UNP 157 H +ATOM 1213 C CB . HIS A 1 157 ? -35.084 15.512 -19.451 1.00 54.53 ? 157 HIS A CB 1 P17090 UNP 157 H +ATOM 1214 O O . HIS A 1 157 ? -37.440 14.279 -18.331 1.00 54.53 ? 157 HIS A O 1 P17090 UNP 157 H +ATOM 1215 C CG . HIS A 1 157 ? -34.060 16.512 -19.924 1.00 54.53 ? 157 HIS A CG 1 P17090 UNP 157 H +ATOM 1216 C CD2 . HIS A 1 157 ? -32.704 16.341 -19.995 1.00 54.53 ? 157 HIS A CD2 1 P17090 UNP 157 H +ATOM 1217 N ND1 . HIS A 1 157 ? -34.332 17.786 -20.368 1.00 54.53 ? 157 HIS A ND1 1 P17090 UNP 157 H +ATOM 1218 C CE1 . HIS A 1 157 ? -33.169 18.369 -20.700 1.00 54.53 ? 157 HIS A CE1 1 P17090 UNP 157 H +ATOM 1219 N NE2 . HIS A 1 157 ? -32.146 17.527 -20.489 1.00 54.53 ? 157 HIS A NE2 1 P17090 UNP 157 H +ATOM 1220 N N . ASP A 1 158 ? -37.825 16.086 -17.044 1.00 49.94 ? 158 ASP A N 1 P17090 UNP 158 D +ATOM 1221 C CA . ASP A 1 158 ? -39.277 15.979 -17.077 1.00 49.94 ? 158 ASP A CA 1 P17090 UNP 158 D +ATOM 1222 C C . ASP A 1 158 ? -39.766 16.491 -18.434 1.00 49.94 ? 158 ASP A C 1 P17090 UNP 158 D +ATOM 1223 C CB . ASP A 1 158 ? -39.924 16.720 -15.895 1.00 49.94 ? 158 ASP A CB 1 P17090 UNP 158 D +ATOM 1224 O O . ASP A 1 158 ? -39.734 17.686 -18.735 1.00 49.94 ? 158 ASP A O 1 P17090 UNP 158 D +ATOM 1225 C CG . ASP A 1 158 ? -39.990 15.806 -14.671 1.00 49.94 ? 158 ASP A CG 1 P17090 UNP 158 D +ATOM 1226 O OD1 . ASP A 1 158 ? -40.628 14.737 -14.783 1.00 49.94 ? 158 ASP A OD1 1 P17090 UNP 158 D +ATOM 1227 O OD2 . ASP A 1 158 ? -39.324 16.114 -13.659 1.00 49.94 ? 158 ASP A OD2 1 P17090 UNP 158 D +ATOM 1228 N N . HIS A 1 159 ? -40.202 15.555 -19.273 1.00 53.25 ? 159 HIS A N 1 P17090 UNP 159 H +ATOM 1229 C CA . HIS A 1 159 ? -41.059 15.852 -20.409 1.00 53.25 ? 159 HIS A CA 1 P17090 UNP 159 H +ATOM 1230 C C . HIS A 1 159 ? -42.475 16.098 -19.886 1.00 53.25 ? 159 HIS A C 1 P17090 UNP 159 H +ATOM 1231 C CB . HIS A 1 159 ? -41.017 14.707 -21.432 1.00 53.25 ? 159 HIS A CB 1 P17090 UNP 159 H +ATOM 1232 O O . HIS A 1 159 ? -43.228 15.161 -19.625 1.00 53.25 ? 159 HIS A O 1 P17090 UNP 159 H +ATOM 1233 C CG . HIS A 1 159 ? -39.899 14.847 -22.429 1.00 53.25 ? 159 HIS A CG 1 P17090 UNP 159 H +ATOM 1234 C CD2 . HIS A 1 159 ? -38.726 14.143 -22.467 1.00 53.25 ? 159 HIS A CD2 1 P17090 UNP 159 H +ATOM 1235 N ND1 . HIS A 1 159 ? -39.891 15.712 -23.499 1.00 53.25 ? 159 HIS A ND1 1 P17090 UNP 159 H +ATOM 1236 C CE1 . HIS A 1 159 ? -38.742 15.532 -24.169 1.00 53.25 ? 159 HIS A CE1 1 P17090 UNP 159 H +ATOM 1237 N NE2 . HIS A 1 159 ? -37.999 14.582 -23.581 1.00 53.25 ? 159 HIS A NE2 1 P17090 UNP 159 H +ATOM 1238 N N . HIS A 1 160 ? -42.842 17.370 -19.765 1.00 55.81 ? 160 HIS A N 1 P17090 UNP 160 H +ATOM 1239 C CA . HIS A 1 160 ? -44.239 17.778 -19.737 1.00 55.81 ? 160 HIS A CA 1 P17090 UNP 160 H +ATOM 1240 C C . HIS A 1 160 ? -44.701 18.084 -21.167 1.00 55.81 ? 160 HIS A C 1 P17090 UNP 160 H +ATOM 1241 C CB . HIS A 1 160 ? -44.433 18.969 -18.788 1.00 55.81 ? 160 HIS A CB 1 P17090 UNP 160 H +ATOM 1242 O O . HIS A 1 160 ? -44.168 19.003 -21.777 1.00 55.81 ? 160 HIS A O 1 P17090 UNP 160 H +ATOM 1243 C CG . HIS A 1 160 ? -44.774 18.545 -17.383 1.00 55.81 ? 160 HIS A CG 1 P17090 UNP 160 H +ATOM 1244 C CD2 . HIS A 1 160 ? -43.941 18.519 -16.295 1.00 55.81 ? 160 HIS A CD2 1 P17090 UNP 160 H +ATOM 1245 N ND1 . HIS A 1 160 ? -46.008 18.104 -16.958 1.00 55.81 ? 160 HIS A ND1 1 P17090 UNP 160 H +ATOM 1246 C CE1 . HIS A 1 160 ? -45.924 17.829 -15.648 1.00 55.81 ? 160 HIS A CE1 1 P17090 UNP 160 H +ATOM 1247 N NE2 . HIS A 1 160 ? -44.689 18.081 -15.196 1.00 55.81 ? 160 HIS A NE2 1 P17090 UNP 160 H +ATOM 1248 N N . HIS A 1 161 ? -45.685 17.291 -21.611 1.00 50.91 ? 161 HIS A N 1 P17090 UNP 161 H +ATOM 1249 C CA . HIS A 1 161 ? -46.646 17.465 -22.716 1.00 50.91 ? 161 HIS A CA 1 P17090 UNP 161 H +ATOM 1250 C C . HIS A 1 161 ? -46.159 17.889 -24.110 1.00 50.91 ? 161 HIS A C 1 P17090 UNP 161 H +ATOM 1251 C CB . HIS A 1 161 ? -47.843 18.288 -22.228 1.00 50.91 ? 161 HIS A CB 1 P17090 UNP 161 H +ATOM 1252 O O . HIS A 1 161 ? -45.638 19.009 -24.281 1.00 50.91 ? 161 HIS A O 1 P17090 UNP 161 H +ATOM 1253 C CG . HIS A 1 161 ? -48.681 17.514 -21.246 1.00 50.91 ? 161 HIS A CG 1 P17090 UNP 161 H +ATOM 1254 C CD2 . HIS A 1 161 ? -48.785 17.719 -19.898 1.00 50.91 ? 161 HIS A CD2 1 P17090 UNP 161 H +ATOM 1255 N ND1 . HIS A 1 161 ? -49.431 16.404 -21.547 1.00 50.91 ? 161 HIS A ND1 1 P17090 UNP 161 H +ATOM 1256 C CE1 . HIS A 1 161 ? -49.980 15.949 -20.409 1.00 50.91 ? 161 HIS A CE1 1 P17090 UNP 161 H +ATOM 1257 N NE2 . HIS A 1 161 ? -49.615 16.720 -19.371 1.00 50.91 ? 161 HIS A NE2 1 P17090 UNP 161 H +ATOM 1258 O OXT . HIS A 1 161 ? -46.449 17.075 -25.013 1.00 50.91 ? 161 HIS A OXT 1 P17090 UNP 161 H +# diff --git a/tools/battery/models/AF-P17090-F1-predicted_aligned_error_v6.json b/tools/battery/models/AF-P17090-F1-predicted_aligned_error_v6.json new file mode 100644 index 000000000..ac1c65e8f --- /dev/null +++ b/tools/battery/models/AF-P17090-F1-predicted_aligned_error_v6.json @@ -0,0 +1 @@ +[{"predicted_aligned_error":[[0,1,2,4,6,8,11,9,9,10,10,11,11,10,12,10,10,13,14,12,12,11,9,7,11,6,10,11,13,12,13,12,12,11,12,9,9,8,6,6,6,6,12,9,9,6,5,2,3,6,5,8,9,13,13,11,11,11,12,11,11,11,10,7,6,4,4,4,6,5,7,6,12,12,12,9,14,14,12,22,16,17,16,19,18,17,17,17,18,18,19,17,18,19,18,16,19,23,17,18,22,21,21,20,17,15,15,15,17,16,18,16,15,18,16,18,20,21,23,22,18,19,23,20,18,20,21,18,19,17,19,20,20,21,18,19,15,14,16,13,15,14,12,17,14,17,17,16,16,17,19,20,19,21,21,23,24,25,25,25,26],[1,0,1,2,3,3,4,5,6,5,6,8,6,7,8,6,7,9,10,11,10,8,6,3,4,3,4,5,6,6,5,5,5,5,4,3,3,3,3,3,4,2,4,4,4,3,3,2,3,2,2,4,4,5,6,4,6,6,7,6,7,6,6,3,3,2,2,2,4,2,4,3,6,5,7,6,7,8,7,10,9,9,9,9,10,10,12,11,11,11,12,10,11,11,10,9,11,11,9,8,10,11,11,9,8,7,9,8,9,9,10,9,8,10,8,9,8,9,11,12,10,10,12,12,10,13,11,11,11,10,13,10,10,10,8,10,8,8,8,7,8,7,7,8,10,10,11,11,12,14,14,16,17,18,21,22,23,23,25,25,25],[1,1,0,1,1,1,2,2,3,4,4,4,4,4,4,5,5,7,8,7,7,6,4,2,2,2,2,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,2,2,2,3,3,2,2,2,3,3,3,2,2,2,1,1,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,5,5,5,6,6,7,7,7,7,7,6,6,6,6,6,6,7,6,5,7,6,7,5,5,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,6,7,7,7,7,6,7,6,6,6,5,5,4,5,4,4,4,4,5,6,7,8,9,10,11,14,16,17,19,20,22,23,24,24,26,26,26],[1,1,1,0,1,1,1,1,2,3,3,2,2,3,3,3,4,5,6,7,6,5,4,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,3,3,4,3,4,4,4,4,4,4,5,4,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,4,5,7,8,8,9,11,13,14,16,18,19,20,22,23,23,24,25,24],[2,2,1,1,0,1,2,2,3,4,4,3,4,4,4,4,5,7,8,7,8,6,3,2,2,2,2,2,3,4,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,1,1,1,1,2,2,2,2,2,2,3,3,3,2,2,1,1,1,2,2,2,2,2,2,2,2,3,3,4,4,4,5,5,5,6,6,6,6,7,7,7,7,6,7,6,7,7,6,6,6,6,5,6,6,6,5,6,5,5,5,5,5,6,6,6,6,6,6,6,5,5,6,6,6,6,7,7,6,7,7,6,7,6,6,5,5,5,4,5,5,4,4,4,4,4,6,8,9,8,10,12,14,16,17,19,18,20,21,23,22,24,25,25],[3,3,2,2,1,0,1,2,2,3,3,4,3,4,4,6,5,8,8,8,8,7,4,4,3,3,3,3,5,5,4,3,3,3,3,3,2,3,3,3,3,4,4,4,4,3,3,3,2,2,2,3,2,3,4,3,3,3,2,3,2,2,2,1,2,3,2,2,3,3,3,3,2,3,3,4,5,5,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,8,7,7,7,7,7,6,7,8,7,6,7,6,6,5,5,5,5,6,6,6,6,7,7,6,7,8,7,7,7,8,7,7,8,8,7,7,7,7,6,7,6,5,5,5,5,4,5,4,5,6,8,9,8,9,11,13,14,15,17,18,20,19,22,21,23,24,24],[3,2,2,1,1,1,0,1,1,2,2,2,2,2,3,3,3,5,7,6,6,5,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,1,1,2,2,2,2,2,1,2,2,1,1,1,1,1,2,2,2,2,2,1,1,1,1,2,2,3,3,4,4,4,4,4,4,4,5,6,6,5,6,6,6,5,5,6,5,5,5,5,4,5,5,5,4,4,4,4,4,4,5,5,5,4,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,6,6,5,5,5,5,4,3,4,4,3,2,3,3,3,5,6,8,8,10,11,14,15,16,19,20,21,22,22,22,23,24,23],[3,3,2,2,2,1,1,0,1,2,2,2,2,3,4,3,4,6,7,7,7,7,4,3,2,2,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,4,3,4,3,3,3,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,2,2,3,2,2,2,2,2,2,3,3,3,4,4,4,6,6,6,6,7,7,8,7,8,8,7,8,8,7,7,7,7,7,7,7,7,6,6,5,5,5,5,5,6,5,6,6,6,6,6,5,5,6,6,6,7,7,6,8,8,7,7,7,7,8,7,7,7,6,6,4,5,6,4,4,4,4,4,6,7,8,8,9,12,14,15,16,17,18,20,20,22,22,24,25,26],[6,5,4,4,3,2,2,1,0,1,1,1,2,2,3,4,4,5,7,8,7,6,4,4,4,4,5,5,6,6,6,6,5,5,6,4,5,6,6,7,7,6,6,6,6,7,5,6,6,4,3,4,3,5,5,4,4,4,4,4,3,3,2,3,3,3,3,4,3,4,3,3,3,4,4,6,7,7,7,9,10,10,9,9,10,9,10,10,11,12,10,10,11,10,11,10,10,10,10,8,10,9,10,9,9,9,8,8,8,9,9,9,8,9,9,9,10,10,9,10,10,10,11,11,11,12,12,11,12,10,11,10,10,10,10,9,8,7,7,6,6,6,6,8,9,9,10,11,13,16,16,17,18,20,21,22,23,24,25,26,26],[7,6,6,5,4,4,3,2,1,0,1,2,1,1,2,3,3,5,7,8,7,8,6,4,5,5,6,6,7,6,6,6,7,6,6,5,6,6,7,7,7,7,7,7,8,6,6,7,6,7,5,5,5,5,5,4,4,5,4,4,3,3,2,3,3,5,4,4,4,4,3,3,4,5,5,7,7,9,8,9,10,9,9,10,10,11,11,11,10,11,11,11,11,11,10,10,9,10,9,9,8,9,8,8,8,9,8,9,8,7,8,8,9,9,8,9,10,9,10,9,9,11,11,12,11,13,12,12,12,12,12,11,12,10,11,10,11,9,7,6,7,7,7,8,10,9,10,11,13,16,16,17,20,20,22,23,23,24,24,25,25],[7,7,6,7,5,4,3,3,2,1,0,1,1,1,2,3,3,4,6,8,8,7,5,4,5,6,6,6,6,6,6,7,7,6,7,7,8,7,8,8,7,8,7,8,7,8,7,8,8,6,6,6,6,7,6,6,5,4,4,4,4,3,4,3,4,5,5,5,4,4,4,4,4,4,6,6,8,8,7,8,10,9,10,9,11,9,11,10,11,12,11,10,11,11,9,10,10,9,9,9,9,10,9,8,9,8,9,8,8,7,9,8,8,10,8,9,10,9,9,10,10,11,11,11,10,12,11,11,11,10,10,10,10,9,10,8,8,9,6,6,6,6,8,7,10,9,12,12,14,18,19,19,18,22,22,23,24,24,25,25,26],[5,6,5,4,4,3,2,2,2,1,1,0,1,1,2,2,2,4,6,8,7,8,5,4,5,4,5,7,6,7,6,6,7,6,6,6,6,5,6,6,6,7,6,6,6,5,5,6,5,6,5,6,6,5,6,6,5,5,4,4,3,3,3,3,3,5,4,4,4,3,3,3,4,4,6,5,7,8,7,8,9,9,10,8,10,9,11,10,11,10,10,10,11,10,10,11,9,10,10,10,10,10,9,8,10,8,10,7,9,9,10,9,8,9,8,9,9,10,9,10,11,11,11,13,10,12,11,11,11,10,10,10,11,10,10,8,10,10,7,7,7,6,8,8,10,10,11,12,14,17,17,18,18,20,21,21,24,23,26,26,27],[7,6,6,4,4,4,3,2,1,1,1,1,0,1,1,1,3,4,6,9,8,7,6,5,5,5,8,8,7,7,7,7,8,6,6,5,6,7,7,9,7,7,6,7,7,6,5,7,8,6,6,6,5,6,5,6,5,6,5,5,4,3,3,4,3,5,5,5,4,4,3,4,4,5,6,7,7,8,8,8,10,9,9,9,9,9,9,10,11,9,11,11,10,10,11,10,9,10,10,10,10,11,9,9,10,9,9,8,10,9,8,8,9,8,9,9,10,11,10,11,11,12,11,13,11,12,11,11,12,11,10,10,10,10,9,8,9,9,7,8,7,7,8,9,9,10,11,12,14,16,16,18,20,22,23,23,24,24,26,26,26],[7,9,6,6,5,5,3,4,2,1,1,1,1,0,1,2,2,4,7,8,7,8,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,7,8,7,9,7,7,7,7,6,9,7,7,6,6,7,6,6,6,5,5,4,5,4,3,3,3,4,6,5,5,4,4,4,4,4,4,6,6,7,8,8,8,10,9,10,9,11,10,11,12,13,11,11,12,11,11,10,11,9,9,9,9,10,10,8,8,8,8,10,9,10,9,9,9,8,11,8,8,9,8,9,9,9,11,10,11,10,13,11,11,12,11,11,10,11,9,10,9,9,10,7,8,7,7,8,8,10,11,12,13,15,17,18,20,22,23,24,25,25,26,26,27,26],[9,8,7,8,7,6,5,4,3,4,2,1,1,1,0,1,3,4,6,7,8,9,6,5,7,11,8,7,8,8,8,9,8,8,10,9,10,9,10,10,9,10,9,10,9,8,9,11,9,8,8,8,9,9,9,8,8,7,7,6,4,5,4,5,6,7,8,5,5,4,5,4,6,8,7,8,10,10,11,11,12,12,13,11,13,11,15,13,15,12,12,13,12,13,12,13,12,12,11,12,12,12,12,10,11,10,12,9,11,10,12,11,10,13,10,11,12,12,12,13,11,12,14,15,12,14,14,13,13,12,13,12,13,12,13,12,11,12,9,10,9,8,10,10,12,12,13,14,15,17,19,20,21,22,23,24,25,24,26,26,27],[8,7,8,6,8,6,7,3,3,3,3,2,1,2,1,0,1,3,6,8,9,10,6,7,7,7,10,10,8,10,8,9,9,10,10,9,11,9,9,10,9,9,10,10,9,8,8,10,12,12,9,10,10,10,11,11,9,10,9,9,7,7,4,5,4,8,5,7,5,6,4,6,6,8,10,9,11,11,10,10,13,12,12,13,12,13,16,13,15,13,14,14,14,15,15,13,14,14,13,14,14,15,15,12,14,11,13,11,12,12,13,13,12,13,12,12,14,15,13,15,15,15,15,18,15,16,15,15,14,15,14,15,14,14,12,10,14,13,10,13,11,11,11,11,13,12,14,14,16,18,19,20,23,23,25,25,26,25,26,26,27],[10,10,11,11,11,9,9,6,8,5,6,5,3,3,3,1,0,2,6,8,8,10,7,10,7,12,15,15,15,14,16,14,13,16,15,13,12,12,15,14,12,12,12,11,13,13,11,12,13,13,13,13,12,13,13,14,12,14,13,12,9,10,6,10,7,11,8,9,6,7,5,9,8,12,12,14,15,16,17,18,18,17,16,16,16,17,19,19,21,19,19,18,20,20,18,17,18,19,17,18,19,19,18,17,19,16,18,17,17,19,19,16,15,17,16,17,19,20,20,21,18,19,20,21,17,20,20,19,19,18,19,18,18,19,19,16,16,17,16,16,16,16,16,15,15,15,17,17,17,19,20,21,23,23,24,24,25,25,26,26,27],[18,16,16,12,16,14,15,12,14,13,13,11,7,7,7,5,1,0,2,4,7,9,10,11,13,17,17,18,20,19,17,18,18,18,18,16,16,17,17,17,18,16,16,16,18,17,17,16,18,15,19,16,21,18,19,18,18,16,21,18,16,17,12,12,11,12,14,13,9,9,9,11,12,17,17,20,21,24,21,23,24,24,25,23,26,24,26,26,27,26,26,26,26,26,24,24,24,25,24,24,26,24,22,23,23,23,24,24,22,25,27,26,23,25,22,21,24,23,23,23,24,24,25,27,24,26,26,27,27,25,25,23,26,24,27,24,24,21,21,21,21,22,20,21,24,22,22,21,21,22,22,24,23,25,25,26,27,28,28,28,29],[23,20,21,19,20,20,20,16,17,14,14,13,10,9,8,8,4,2,0,2,4,8,8,15,16,19,20,22,25,24,24,25,24,25,24,23,22,22,23,24,22,18,18,18,20,20,21,21,22,23,23,23,25,24,26,24,24,21,23,20,17,20,16,19,15,18,18,16,12,14,12,17,16,21,19,23,25,25,25,26,27,26,27,27,26,28,27,28,29,29,29,28,29,29,27,28,28,28,27,28,28,28,27,26,28,27,25,27,24,26,27,27,27,28,26,25,27,27,26,27,27,27,28,29,27,28,28,29,28,27,27,27,27,27,27,26,26,22,26,23,27,25,25,28,28,27,27,27,25,26,26,27,27,27,28,28,29,29,29,29,30],[20,18,17,17,16,17,17,15,17,16,15,14,13,12,10,9,8,5,2,0,1,4,7,10,12,15,16,16,20,19,21,19,21,20,20,19,20,17,19,17,17,15,14,14,17,16,18,18,17,17,18,19,22,21,22,21,20,17,21,20,15,15,13,15,16,17,18,17,14,13,12,14,13,17,17,20,20,21,21,23,23,23,24,25,25,26,27,28,27,26,28,25,27,27,25,25,27,26,23,26,26,26,24,23,23,24,24,25,24,25,26,24,24,24,23,21,23,25,25,26,24,24,27,28,24,27,27,27,28,24,26,24,25,24,24,24,23,20,21,21,23,23,22,25,24,24,25,24,23,24,25,26,26,26,27,27,28,28,28,29,29],[19,14,15,16,16,17,16,13,16,14,15,14,12,10,11,10,9,7,5,2,0,1,3,6,10,12,14,17,18,20,20,17,23,20,18,16,16,16,16,16,14,13,10,10,13,13,16,16,16,19,17,20,21,21,23,19,19,18,20,15,13,12,12,13,13,15,16,16,13,10,10,10,10,13,12,19,18,19,20,22,22,24,21,26,23,26,26,28,27,27,27,26,25,28,26,26,27,25,24,25,26,26,25,24,24,25,19,24,20,23,25,23,25,22,24,22,23,26,25,25,26,26,27,27,25,27,26,27,27,26,27,25,25,24,23,20,20,21,20,23,23,22,20,23,24,23,24,23,23,22,24,25,26,26,28,27,28,28,29,29,30],[16,11,16,11,18,16,16,12,17,12,14,13,9,10,12,11,7,8,6,4,1,0,1,4,6,11,11,13,19,21,15,14,22,18,17,18,15,15,16,13,11,9,8,7,11,12,14,14,16,16,18,18,19,18,17,22,20,17,21,14,11,13,9,12,12,12,17,12,11,9,8,9,8,12,10,18,15,16,14,19,19,21,17,22,21,23,25,23,26,24,24,24,25,25,24,24,25,23,23,24,25,24,24,23,22,23,18,22,19,22,23,19,21,18,22,18,20,22,23,23,23,23,24,26,24,26,23,25,24,24,24,23,22,21,19,17,17,21,17,22,18,19,19,19,22,19,21,20,21,22,23,24,26,26,28,27,28,28,29,29,29],[12,11,10,14,15,17,19,15,15,13,11,13,12,9,10,9,7,8,8,6,4,2,0,1,5,7,9,13,16,16,12,13,16,15,16,16,15,13,12,11,10,7,8,8,10,11,10,10,13,13,17,18,17,16,17,20,17,18,22,13,10,15,9,13,12,11,13,11,10,9,6,7,4,13,9,15,11,16,17,16,18,17,17,20,20,21,24,22,24,22,23,22,23,22,21,22,23,20,19,22,20,20,20,17,19,21,21,21,23,21,23,19,19,18,18,14,17,19,19,20,19,18,21,23,19,22,22,23,23,21,23,20,22,19,20,22,24,16,18,21,16,19,19,18,21,19,20,19,19,20,21,22,23,23,24,25,26,26,26,27,27],[5,3,4,4,3,4,3,4,4,5,5,4,4,5,5,5,4,6,7,7,5,3,1,0,1,2,2,3,3,3,3,4,3,4,3,4,3,4,4,3,3,3,2,2,3,3,3,3,4,4,4,4,5,5,5,4,4,4,3,3,3,3,2,3,4,4,4,4,3,2,2,2,2,2,2,2,3,3,4,5,5,5,5,6,8,7,9,8,8,8,8,8,8,8,7,6,8,8,7,7,7,7,6,5,6,5,6,5,7,6,7,6,5,5,5,5,5,5,7,7,7,7,8,8,7,8,8,8,9,7,9,6,8,6,5,5,5,4,4,4,4,5,6,7,8,9,10,11,13,14,15,17,19,20,22,23,23,24,25,26,25],[3,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,6,7,7,6,6,2,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,1,2,2,2,2,3,3,2,2,2,1,1,1,1,1,2,2,2,3,3,3,4,4,4,5,6,6,6,5,5,5,5,5,4,4,5,5,4,4,5,4,4,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,6,6,5,4,4,3,3,3,3,2,2,2,3,4,4,6,8,9,9,10,12,13,15,17,19,19,21,22,22,22,23,24,24],[3,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,6,7,7,6,4,2,1,1,0,1,1,1,2,2,1,1,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,2,2,2,3,3,3,4,4,5,4,4,5,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,4,3,3,3,3,2,2,2,2,2,2,3,3,5,7,8,8,9,12,14,16,17,19,20,22,23,24,24,25,26,26],[3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,6,7,6,4,2,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,4,3,3,3,3,2,2,2,2,1,1,2,2,2,3,4,6,8,8,9,10,13,14,15,17,18,20,21,22,22,23,23,22],[2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,6,6,5,5,3,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,2,2,2,3,3,5,6,6,7,10,13,14,16,19,20,22,23,24,24,25,26,25],[3,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,5,5,5,4,4,3,2,1,1,1,1,0,1,1,1,1,1,1,1,2,1,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,3,3,2,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,2,2,3,4,5,6,7,10,13,14,17,19,20,22,22,23,24,24,24,24],[3,2,2,2,2,2,2,2,3,3,4,3,3,4,4,4,4,5,6,5,5,3,3,2,2,2,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,2,2,2,3,3,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,3,4,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,3,3,5,6,6,8,10,12,14,16,18,21,23,24,25,25,25,26,25],[3,2,2,2,2,2,2,2,3,3,4,3,3,4,4,4,5,6,6,6,6,4,3,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,4,5,7,5,7,10,11,13,15,18,19,21,23,23,24,24,25,24],[3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,5,5,6,5,4,3,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,2,2,2,2,3,5,6,6,7,10,12,13,15,18,18,22,22,23,23,24,24,24],[3,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,5,5,6,6,6,4,3,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,2,1,1,1,1,1,1,2,1,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,1,1,2,2,2,2,3,5,6,5,6,8,10,12,14,16,17,19,21,21,22,23,24,23],[3,3,2,2,2,2,2,3,3,3,4,4,4,4,4,5,5,6,6,5,5,4,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,2,2,2,2,3,3,3,3,4,4,5,5,5,5,4,4,4,4,4,4,4,3,3,4,4,3,3,2,2,2,3,3,3,4,3,3,2,2,2,3,3,3,4,3,3,4,4,4,4,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,3,3,4,6,7,7,9,10,13,14,16,19,20,22,23,24,23,24,23,24],[3,2,2,2,2,2,2,2,3,4,4,4,4,4,5,5,6,6,7,6,6,4,4,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,3,2,2,2,2,2,1,1,1,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,3,4,6,7,6,8,10,11,12,14,15,17,19,20,22,22,22,24,24],[3,2,2,2,2,2,3,3,3,4,5,5,5,6,6,5,6,8,8,8,6,5,5,3,3,2,2,2,2,2,1,2,1,1,1,0,1,1,2,2,2,3,3,4,3,3,2,2,2,1,1,1,2,1,2,2,2,2,2,3,3,3,3,2,2,2,2,3,3,3,3,3,3,2,3,2,2,3,3,3,3,4,3,4,5,5,6,6,6,6,6,5,6,6,5,4,5,5,4,4,4,4,4,3,3,3,3,4,4,4,5,4,4,3,3,3,3,3,4,4,4,4,5,5,4,5,6,5,6,5,5,4,4,4,4,4,3,3,3,3,3,3,3,4,7,7,7,8,10,12,13,16,16,19,18,21,21,22,22,24,24],[3,2,2,2,2,2,2,2,3,4,4,4,4,5,5,5,6,7,8,7,6,5,4,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2,2,3,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,5,5,6,5,5,6,6,5,5,5,5,4,4,5,5,4,4,4,4,4,3,3,3,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,5,7,8,7,9,11,13,15,15,17,19,19,21,21,22,23,25,23],[2,2,2,2,2,2,2,3,3,4,4,4,4,5,5,5,6,7,7,7,7,5,3,2,2,2,2,2,2,2,2,1,2,2,1,1,1,0,1,1,1,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,5,5,5,5,6,5,5,5,5,4,5,5,4,4,4,4,4,3,3,3,3,4,3,4,4,4,4,3,3,3,3,3,4,4,4,4,5,5,5,5,6,5,5,5,5,4,4,4,3,3,3,3,2,3,3,3,3,5,7,8,7,8,10,13,13,15,17,18,20,21,22,22,24,25,25],[2,2,2,1,2,2,2,3,3,4,4,3,3,4,4,4,5,6,7,6,7,5,3,2,2,1,1,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,4,3,4,5,4,4,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,3,3,3,2,3,3,3,3,4,5,6,7,7,8,10,12,12,14,16,17,19,21,21,22,24,25,25],[2,2,2,2,2,2,3,3,3,4,5,5,5,5,5,5,5,7,8,7,7,6,3,2,2,1,1,1,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,2,1,1,1,1,1,1,1,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,4,3,4,4,4,5,5,5,4,4,4,3,3,4,4,5,5,5,5,5,6,6,6,6,6,6,5,5,4,4,4,3,3,3,3,3,3,4,4,6,8,10,8,9,11,13,14,16,18,19,21,22,23,22,24,24,24],[2,2,2,2,2,2,2,3,3,4,4,4,3,4,4,4,5,7,8,6,6,4,3,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,3,3,3,4,4,4,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,4,4,5,5,5,4,4,3,4,4,4,4,5,4,5,6,6,5,6,6,6,6,6,6,5,5,4,4,4,3,3,3,3,3,4,4,5,7,8,8,9,11,13,14,15,16,17,18,19,20,20,22,22,23],[3,2,2,2,2,2,2,3,3,4,4,4,4,4,5,5,5,7,8,7,7,5,3,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,2,1,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,5,6,5,6,5,6,6,6,6,6,6,5,5,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,5,6,6,6,6,6,5,5,5,4,4,3,3,3,3,3,3,4,4,6,7,8,8,9,11,13,15,16,18,19,22,23,24,22,25,24,25],[3,2,2,2,2,2,2,3,3,4,4,3,4,4,4,5,5,7,8,7,7,6,2,1,1,1,1,2,2,3,3,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,3,3,3,2,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,5,6,6,6,5,5,5,4,3,3,3,3,3,4,4,4,6,6,7,8,9,11,12,14,15,16,17,19,20,20,21,22,22,23],[3,3,3,2,3,3,2,3,4,4,4,4,4,4,4,5,5,6,8,7,6,5,3,2,1,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,1,1,1,0,1,1,2,2,2,2,3,3,3,4,4,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,3,4,4,4,5,4,5,5,5,6,6,5,6,6,6,6,6,6,5,5,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,5,6,6,6,6,6,6,6,6,6,6,5,5,5,4,4,3,3,3,3,4,4,4,6,6,7,8,9,10,11,13,14,16,16,19,19,21,21,22,22,23],[3,3,2,3,3,4,5,4,4,4,5,5,5,4,5,5,5,6,7,7,6,5,3,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,2,2,1,1,1,1,0,1,1,2,2,3,3,4,4,4,5,4,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,3,3,3,4,4,5,5,5,6,6,6,6,7,6,7,8,7,7,7,6,6,6,7,6,7,7,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,9,7,8,6,7,6,6,5,5,4,4,3,4,5,5,5,5,7,8,9,10,12,13,14,16,18,19,20,22,21,24,23,24,24,24],[2,2,2,2,2,3,3,3,4,4,5,4,4,5,5,5,6,7,8,8,8,6,3,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,2,3,3,3,3,3,4,3,4,3,3,3,3,2,3,2,3,3,3,2,2,2,2,2,2,3,3,3,4,4,4,5,5,6,6,6,7,7,7,7,7,7,7,7,6,6,6,7,6,5,6,6,6,5,5,4,5,5,5,5,5,6,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,7,6,6,6,5,4,4,4,4,4,4,4,5,6,7,8,8,9,10,11,12,14,15,17,19,19,21,20,23,23,23],[3,2,2,2,2,2,2,3,3,4,5,4,4,5,5,6,6,8,8,8,7,6,4,2,2,2,2,2,3,3,3,2,2,3,2,2,2,2,1,1,1,1,2,1,1,1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,2,2,2,3,2,3,3,3,3,4,5,4,5,5,5,6,6,7,7,6,7,7,6,6,6,6,5,5,6,6,5,5,6,6,5,5,4,4,4,5,5,6,5,4,5,4,5,5,5,6,6,6,6,6,6,6,7,7,7,7,6,7,6,6,5,5,4,4,4,4,3,4,4,4,6,6,7,7,9,11,12,13,15,17,18,20,21,22,22,23,24,25],[2,2,1,1,2,2,2,2,3,3,4,5,4,4,5,5,5,7,8,8,7,6,3,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,1,1,2,2,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,5,5,5,6,6,7,7,7,6,7,6,6,6,6,5,5,6,6,5,5,6,5,5,4,4,4,4,5,5,6,5,5,4,4,5,4,5,6,6,5,6,6,6,6,7,7,7,7,7,7,6,6,5,5,5,4,4,3,3,3,4,4,6,7,7,8,9,10,13,13,15,15,17,19,20,21,22,23,24,24],[2,1,1,1,1,2,2,2,3,4,4,4,5,5,5,6,6,8,9,9,8,6,4,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,1,2,1,2,2,2,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,4,4,5,5,6,6,6,6,6,6,5,5,6,5,4,5,5,5,5,5,5,5,4,3,4,3,4,4,5,5,5,4,4,4,4,4,4,5,5,5,5,6,6,6,6,6,6,6,5,6,5,5,4,4,4,4,3,3,3,3,3,4,5,7,8,8,9,11,14,15,16,18,19,21,22,23,23,25,25,25],[2,1,1,1,1,1,2,2,2,3,3,3,3,4,4,4,4,7,8,7,7,5,3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,3,3,3,3,3,4,4,5,4,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,6,5,6,5,4,4,4,3,3,3,3,2,2,3,3,3,5,8,8,7,8,11,12,13,15,18,19,20,22,22,23,24,25,24],[2,1,1,1,1,1,2,2,2,3,4,3,4,4,4,4,5,7,8,7,8,6,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,0,1,1,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,3,3,3,4,4,4,5,4,4,3,4,3,3,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,4,4,3,3,3,3,2,3,3,3,3,5,6,6,6,8,10,12,13,15,16,18,19,20,22,21,23,24,25],[2,2,2,2,1,1,2,2,3,3,4,3,4,4,5,4,5,7,8,7,6,4,4,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,2,2,2,2,2,3,2,2,2,1,1,1,1,0,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,4,5,5,6,5,6,5,5,5,5,5,5,4,4,5,4,4,5,4,4,4,3,3,3,4,4,4,5,4,4,3,3,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,4,4,4,3,3,3,2,3,3,3,3,4,6,7,7,8,11,13,14,17,18,19,21,21,23,21,23,24,23],[3,2,2,2,2,2,2,2,3,4,4,4,4,4,4,5,5,7,8,7,7,5,4,3,3,2,3,2,3,2,2,2,2,2,2,1,1,2,2,2,3,3,3,3,3,3,3,2,2,1,1,1,0,1,1,1,2,2,2,3,2,2,2,2,2,2,2,3,3,3,3,2,3,2,3,3,3,3,4,4,4,5,4,5,5,6,6,6,6,6,6,5,6,6,5,5,5,5,5,4,5,4,4,4,3,3,3,4,4,4,5,5,4,4,4,4,5,5,5,5,5,5,6,5,5,6,6,6,6,6,6,5,5,5,4,4,4,3,3,3,3,3,3,4,6,6,7,8,10,11,13,15,16,17,18,19,20,20,21,21,22],[4,4,3,3,2,3,3,3,4,5,6,5,5,7,6,7,7,8,9,8,8,7,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,3,4,3,4,4,4,5,5,4,4,3,3,2,2,1,1,0,1,1,2,2,3,3,4,3,3,3,3,3,3,4,4,4,4,4,3,3,4,3,4,5,4,5,5,5,5,5,5,6,7,7,7,7,6,7,7,7,6,5,5,5,5,4,4,5,4,4,4,4,4,5,4,6,5,5,5,4,4,5,5,5,5,5,5,6,6,6,6,6,7,7,7,7,6,6,5,5,5,5,5,4,3,3,3,3,4,5,6,6,7,8,10,13,14,16,16,18,18,19,20,21,21,22,22],[5,4,3,3,3,3,2,3,4,5,5,6,5,5,6,7,8,8,9,8,8,7,5,4,4,3,4,4,4,3,3,3,2,2,2,3,2,4,4,4,5,5,5,5,6,5,4,5,4,3,2,2,1,1,0,1,1,2,2,3,3,2,3,3,3,4,3,4,4,4,4,4,3,3,3,3,4,4,4,5,5,5,4,5,5,6,6,7,7,7,7,6,6,6,6,6,5,6,5,5,4,5,5,5,4,4,3,5,4,5,6,5,5,4,5,5,5,5,6,6,5,5,6,6,6,6,7,6,7,6,6,6,5,6,5,5,4,4,3,3,3,3,3,5,6,7,7,9,11,13,14,15,19,18,21,21,22,22,23,24,24],[3,3,3,2,2,2,2,2,3,3,4,4,4,5,5,6,6,8,8,8,6,6,4,3,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,2,2,2,1,1,1,0,1,1,1,2,2,2,2,2,3,2,3,4,3,3,3,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,6,5,6,6,5,5,6,5,5,5,5,4,4,5,4,4,3,3,3,3,4,4,5,4,4,4,3,3,3,4,5,4,6,5,4,5,6,5,5,7,6,6,5,5,5,4,4,4,3,3,3,2,2,2,3,3,4,6,7,7,8,10,11,13,15,17,17,20,20,21,21,22,22,23],[3,3,2,2,2,2,2,2,2,3,4,4,3,4,4,4,5,6,6,6,6,5,4,2,2,2,2,1,2,1,2,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,3,3,3,2,2,2,2,1,2,1,2,2,2,3,3,4,3,4,3,4,4,5,4,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,2,3,2,3,3,3,4,4,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,3,4,5,5,7,8,10,12,14,16,19,19,21,22,22,22,23,24,23],[3,2,2,2,2,2,1,2,2,2,3,3,3,3,4,4,5,6,6,6,6,5,3,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,2,2,2,1,2,1,2,2,2,3,5,6,5,7,10,11,13,15,18,17,19,20,21,22,23,24,24],[3,3,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,6,7,7,6,5,3,2,2,1,1,1,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,2,2,2,3,2,2,2,2,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,3,3,3,2,2,2,2,2,3,3,3,3,2,2,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,1,2,2,2,4,5,6,6,7,9,12,12,15,16,18,20,21,22,24,24,24,23],[3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,5,6,5,6,4,2,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,2,3,2,2,2,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,2,2,2,2,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,3,3,3,3,2,2,2,2,1,2,2,3,4,6,7,7,8,10,12,13,15,17,19,20,22,22,24,24,26,25],[3,3,2,2,2,2,1,2,2,2,3,3,3,3,4,5,5,6,6,6,6,4,3,2,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,3,2,3,2,3,2,4,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,3,3,3,3,2,2,2,2,2,2,2,3,4,7,8,7,9,11,14,15,17,19,20,23,22,25,23,25,25,26],[2,2,2,1,2,1,1,1,2,2,2,2,2,3,3,3,4,5,6,6,6,5,2,1,1,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,3,4,5,7,6,8,9,11,13,15,16,18,19,22,22,22,25,24,26],[2,2,1,1,1,1,1,1,2,2,2,2,2,2,3,3,4,5,6,6,6,6,3,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,4,3,3,4,4,3,3,3,2,2,2,2,3,3,3,3,2,3,3,3,3,4,4,3,3,4,4,3,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,3,4,6,7,7,8,11,13,14,16,17,19,21,21,23,23,25,25,25],[2,2,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,5,5,5,6,4,2,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,4,4,3,3,3,2,2,3,3,3,3,3,3,2,2,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,3,3,5,7,8,7,8,11,13,13,15,17,18,20,20,21,21,23,24,24],[2,2,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4,5,6,6,5,5,3,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,5,4,5,5,5,5,4,5,4,4,4,3,3,3,2,2,2,2,3,3,5,5,6,7,8,10,13,13,15,15,17,19,19,21,22,24,25,25],[2,2,1,1,1,1,1,1,2,2,3,3,3,3,3,4,5,6,7,8,7,6,3,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,3,4,4,4,4,4,5,5,5,6,6,6,6,6,5,5,6,5,5,5,6,5,6,6,5,6,5,5,4,4,4,4,4,5,4,4,4,4,5,4,5,5,6,5,5,6,6,5,6,6,6,6,5,6,5,5,5,4,4,3,3,3,3,3,4,4,6,7,8,8,9,11,13,15,16,20,20,23,22,24,22,25,24,25],[3,2,2,1,2,2,2,2,3,3,4,3,4,4,4,4,5,7,8,7,9,6,4,3,3,2,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,4,3,3,3,3,3,3,2,2,1,1,1,0,1,1,2,2,2,2,2,3,3,3,4,4,5,5,5,5,5,6,6,8,7,8,8,7,7,7,7,6,6,7,6,6,6,6,6,6,5,5,4,5,5,6,6,6,6,5,5,5,5,5,5,5,6,6,5,6,7,6,7,7,7,7,7,7,6,6,5,5,4,4,4,4,4,4,5,5,6,7,8,8,9,11,13,14,16,16,17,19,19,22,20,23,23,24],[3,3,2,2,2,3,3,3,4,4,5,4,3,5,5,4,5,7,9,9,10,6,5,3,4,4,5,5,5,5,4,5,5,4,4,3,3,4,4,4,4,4,4,4,5,3,4,4,3,3,3,3,4,4,4,4,4,5,5,5,4,5,3,2,2,2,1,0,1,2,2,3,4,4,5,5,5,6,6,7,7,8,8,8,9,8,10,9,10,10,9,9,10,9,9,8,9,9,8,8,9,8,7,7,7,7,8,7,8,10,9,8,7,8,7,7,6,7,7,8,8,8,9,10,9,9,9,10,9,9,9,8,8,7,8,7,7,6,6,6,6,7,6,8,9,9,10,11,12,13,14,16,17,18,19,20,22,21,24,23,24],[3,2,2,2,2,3,3,2,3,4,4,3,3,4,4,3,4,5,7,8,7,6,3,2,2,3,3,4,4,4,4,5,4,4,4,4,3,4,4,3,4,3,3,3,4,3,3,3,3,4,3,3,3,4,5,5,4,3,3,3,3,3,2,2,1,1,1,1,0,1,1,2,2,3,3,3,4,4,5,6,6,6,6,6,6,7,8,8,8,8,8,8,8,8,7,7,8,9,7,7,8,8,7,6,6,5,6,6,6,6,7,6,6,6,6,6,6,7,7,8,8,8,8,9,8,8,9,8,8,7,8,7,7,7,6,5,5,4,5,4,5,5,6,8,8,9,10,11,12,15,16,19,19,22,22,23,25,23,25,25,27],[3,3,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,6,8,7,6,5,3,2,2,2,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,3,3,3,4,3,3,3,2,2,2,2,1,1,1,1,2,2,1,0,1,1,2,2,2,3,3,3,4,4,4,5,4,5,5,6,6,6,6,6,6,5,6,6,6,5,6,6,5,5,6,6,6,5,5,4,4,4,4,5,5,5,4,4,4,5,4,5,5,6,6,6,6,6,6,7,6,6,6,6,6,5,5,5,4,4,3,3,3,4,3,4,5,5,7,8,9,10,12,14,15,17,18,19,21,22,22,22,23,24,24],[2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,7,7,7,7,3,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,3,3,3,4,3,4,4,4,5,5,5,6,5,5,5,5,5,4,5,5,5,4,5,5,5,4,3,3,3,3,4,4,4,4,3,3,3,3,3,4,4,5,4,4,5,5,5,5,6,5,5,5,5,4,4,4,3,3,3,3,2,3,3,3,4,5,7,8,8,9,12,13,15,17,20,20,22,23,24,24,26,26,25],[3,2,2,1,2,2,1,2,2,2,3,2,2,3,3,3,3,5,6,6,5,5,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,1,1,1,0,1,1,1,1,2,2,2,3,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,3,4,5,6,7,8,9,11,14,15,17,19,19,21,21,22,22,22,23,22],[2,2,2,1,2,2,1,1,2,3,3,2,2,3,3,3,3,5,7,6,7,6,2,1,1,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,0,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,3,5,6,7,7,8,10,12,13,15,17,18,20,22,23,23,24,24,24],[2,2,2,1,2,2,1,1,2,2,2,2,2,3,3,3,3,5,6,6,6,4,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,2,2,3,4,5,7,7,8,11,12,14,16,17,19,20,23,23,23,24,25,25],[3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,5,6,6,6,4,2,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,2,2,2,2,2,1,1,1,2,2,2,3,4,6,7,7,8,10,13,14,15,17,17,20,20,21,21,23,23,23],[3,3,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,6,6,5,4,3,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,3,2,2,2,1,1,1,1,0,1,1,1,1,1,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,2,2,3,4,6,6,7,8,11,13,14,17,20,21,23,24,24,24,25,26,25],[3,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,6,6,6,4,3,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,1,1,1,1,0,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,2,2,3,3,3,3,2,2,2,1,1,1,1,1,1,1,2,2,2,3,6,6,7,8,10,13,14,16,18,19,21,22,23,23,24,25,25],[3,3,3,2,3,2,3,3,3,3,3,4,3,3,4,4,4,5,6,5,5,4,3,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,1,2,2,2,2,2,3,3,3,3,2,2,2,2,1,1,1,1,0,1,1,1,1,1,2,2,2,3,3,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,1,1,1,1,2,2,3,4,6,7,7,8,11,13,15,17,19,20,22,22,24,23,25,25,25],[4,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,5,6,6,6,5,4,3,2,2,2,1,2,1,1,2,2,1,2,2,2,3,2,3,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,1,1,1,1,0,1,1,1,1,2,2,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,3,4,5,7,6,8,11,13,16,18,20,21,23,23,25,24,25,25,25],[4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,6,6,6,4,4,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,2,2,2,2,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,3,3,5,6,7,9,11,14,16,18,20,20,23,23,24,24,25,25,25],[4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,7,6,6,4,4,3,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,2,1,1,2,2,2,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,5,6,6,8,11,14,16,19,20,22,24,24,25,23,25,25,24],[4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,6,6,6,4,4,3,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,5,6,6,8,11,13,16,18,21,21,24,23,25,24,25,25,25],[4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,6,6,7,6,6,5,4,3,3,2,2,2,2,1,2,2,2,2,2,2,3,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,3,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,5,7,6,8,11,13,16,17,20,21,24,23,25,23,25,24,25],[4,4,4,4,3,3,3,4,3,4,5,5,5,5,5,6,6,7,7,7,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,4,3,4,4,4,4,4,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,4,6,6,8,11,14,16,17,19,20,23,22,24,23,25,25,24],[5,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,6,7,9,8,7,5,5,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,4,3,4,3,3,4,4,4,4,4,4,3,4,3,4,4,3,3,3,3,2,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,3,4,6,7,6,8,10,12,14,16,19,19,22,22,23,23,24,24,23],[6,5,5,5,5,5,5,5,5,5,7,7,6,7,8,7,7,8,9,8,8,6,6,5,4,4,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,4,4,5,5,5,5,5,5,4,5,5,5,5,4,4,4,3,4,3,4,4,5,4,5,5,5,6,6,6,5,4,4,3,3,3,3,2,2,2,2,1,1,1,1,0,1,1,1,2,2,1,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,4,4,6,7,7,8,11,12,14,16,18,19,21,22,23,23,23,24,23],[7,7,6,6,6,6,6,6,7,7,8,7,7,8,8,8,8,10,10,9,10,7,7,5,5,5,4,5,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,4,4,4,5,5,6,6,6,7,7,7,7,6,5,5,4,4,4,4,3,3,3,2,2,2,2,1,1,0,1,1,1,2,1,2,2,2,2,3,4,3,3,4,3,4,3,4,3,3,3,2,2,1,1,2,2,2,3,3,3,3,3,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,6,7,8,8,9,10,12,14,16,18,19,20,22,21,24,22,24,23],[6,6,6,6,5,5,5,5,5,5,6,7,7,7,7,7,8,8,9,8,8,6,5,5,4,4,4,4,3,3,4,4,3,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,3,3,4,4,5,5,5,5,6,6,5,6,5,5,5,4,4,3,3,3,3,3,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,5,6,6,7,9,12,15,16,17,20,20,22,21,22,21,23,23],[6,5,5,5,5,4,4,5,5,6,7,6,6,7,7,7,7,8,9,8,8,6,5,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,5,4,4,4,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,4,4,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,4,5,5,6,8,10,12,15,17,18,19,21,22,23,23,24,25,25],[6,5,5,4,4,4,4,4,4,5,5,5,6,6,7,7,7,8,8,7,6,5,5,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,4,5,6,5,5,4,4,4,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,5,5,6,8,11,12,14,15,16,17,19,19,21,21,23,23],[5,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,6,7,8,6,6,5,4,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,4,4,4,4,4,3,3,4,3,4,3,3,3,3,3,2,2,3,3,3,3,4,4,4,5,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,4,5,5,6,9,12,14,17,18,19,21,22,23,23,24,24,23],[5,5,4,4,4,4,3,4,4,4,5,5,5,5,6,6,6,7,8,7,7,5,4,4,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,3,4,3,3,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,4,5,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,5,6,6,7,10,12,15,16,19,19,22,22,24,23,25,24,24],[5,4,4,4,4,4,4,3,4,4,5,4,5,5,6,6,7,8,8,6,6,5,4,4,3,3,3,3,2,2,2,3,2,3,3,3,3,3,4,3,4,3,3,4,4,4,4,4,4,3,4,3,4,3,3,3,3,3,3,2,3,3,3,3,4,4,4,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,4,4,6,8,10,12,14,16,18,18,20,20,20,21,22,23,23],[5,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,7,7,6,6,5,4,4,3,3,3,3,2,2,2,3,3,3,2,3,3,3,4,3,4,3,3,4,4,4,4,4,3,3,4,3,4,3,3,3,3,3,2,2,3,3,3,3,4,4,4,5,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,4,4,5,6,9,12,13,15,16,18,20,20,21,21,22,22,23],[4,4,4,3,3,3,3,3,3,4,4,4,4,5,5,6,6,6,7,6,6,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,3,5,6,6,8,11,13,15,17,19,19,22,22,23,22,24,23,23],[5,4,4,3,3,3,3,3,4,4,5,4,4,5,5,5,6,7,7,6,6,5,4,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,3,4,4,5,8,10,12,14,16,18,18,20,20,22,21,23,22,22],[5,4,4,4,3,3,3,3,4,4,4,4,5,5,6,6,7,7,8,6,6,5,4,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,4,4,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,4,4,5,7,10,12,14,16,17,17,19,20,20,21,21,22,23],[5,4,4,3,4,4,3,4,4,4,5,5,5,5,5,6,6,6,7,6,6,5,4,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,3,4,3,3,3,3,4,3,3,3,3,3,2,2,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,5,5,6,8,10,12,14,17,17,19,20,21,21,22,22,23,22],[5,4,3,3,3,3,3,3,3,4,4,4,4,5,5,5,6,6,7,6,6,5,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,1,2,2,3,5,4,5,7,10,12,14,17,18,20,21,21,23,23,24,24,23],[6,5,5,4,4,4,4,5,5,6,7,6,6,6,7,7,8,9,9,8,8,6,5,5,4,4,3,3,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4,5,5,5,7,9,11,14,17,18,20,20,22,22,22,22,23,23],[7,6,6,5,5,5,5,5,5,6,6,7,7,7,8,9,9,9,9,8,8,6,6,5,4,4,4,4,3,3,3,4,3,3,4,4,4,4,5,5,5,5,5,6,5,6,5,5,5,5,5,4,4,4,4,4,3,4,3,3,3,4,4,5,5,6,6,7,6,5,5,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,3,4,6,5,7,10,10,13,15,17,16,18,18,20,19,21,20,22,20],[5,5,4,4,4,4,4,4,4,5,6,6,6,6,7,7,8,8,8,8,7,6,5,4,4,3,3,3,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,5,4,5,5,5,5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,4,5,6,7,9,10,13,15,17,18,19,19,21,20,23,21,23,23],[5,4,4,4,4,4,4,4,4,5,5,6,5,6,7,6,7,9,9,8,7,5,5,4,3,3,3,3,3,2,2,2,3,2,3,3,4,3,3,3,4,4,4,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,3,4,4,5,6,5,5,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,3,3,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,4,5,6,7,9,11,12,15,18,19,19,20,22,22,23,21,24,22],[5,4,4,3,4,4,3,4,4,4,5,5,4,5,6,6,6,7,8,6,6,5,4,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,3,4,3,3,3,3,3,2,2,2,2,3,3,3,3,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,1,1,2,2,2,2,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,3,4,5,6,8,10,12,14,16,17,19,20,21,22,22,23,23,23],[5,4,4,4,4,3,3,4,4,4,5,5,5,5,5,6,6,7,8,7,6,5,4,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,3,4,4,4,4,4,4,3,4,3,3,3,3,3,2,2,2,2,3,3,3,3,4,4,4,5,4,4,4,3,3,3,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,2,2,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,3,4,4,6,8,10,11,14,16,19,19,22,21,23,22,24,23,25],[6,5,4,4,4,4,4,4,4,4,5,5,5,5,6,6,7,8,8,7,7,6,4,4,3,3,3,2,2,2,2,2,2,2,3,3,3,4,4,3,4,4,3,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,3,3,3,3,4,4,5,5,5,5,4,3,3,3,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,0,1,1,1,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,3,4,4,6,9,10,12,14,17,19,20,21,22,23,22,24,23,24],[4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,7,7,6,5,4,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,3,3,5,6,7,10,11,13,15,18,19,22,22,24,24,25,24,24],[5,4,4,4,4,3,3,4,4,4,4,4,5,5,6,5,6,7,8,7,7,5,5,4,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,4,4,4,4,5,4,4,3,3,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,1,2,2,1,1,2,1,1,2,2,1,1,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,3,4,4,6,8,10,12,14,16,17,19,21,22,23,22,24,23,23],[5,5,4,4,4,4,4,4,4,4,5,5,5,6,6,6,6,8,9,7,6,5,5,4,3,3,3,3,2,2,2,3,2,2,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,3,4,3,4,3,3,3,2,3,2,2,3,3,3,3,4,4,4,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,3,4,6,6,7,10,12,14,16,17,19,21,22,23,22,23,23,23],[7,5,5,5,5,4,4,4,4,5,5,5,5,6,7,7,7,9,10,8,7,6,5,4,4,3,4,3,3,3,3,3,3,3,3,4,4,4,5,4,5,4,4,5,6,6,5,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,5,6,6,6,5,4,4,4,3,3,3,3,3,3,3,2,2,2,1,1,1,2,2,2,2,2,1,2,2,2,2,2,3,2,2,3,3,3,2,2,2,1,1,1,0,1,1,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,3,3,3,3,2,2,2,2,2,3,4,5,6,6,8,10,13,14,16,17,19,20,22,21,23,23,25,24],[7,6,6,5,5,5,4,5,5,5,5,6,6,6,7,7,7,8,9,8,7,6,6,4,4,4,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,4,4,5,5,5,5,5,5,4,5,5,5,5,4,4,3,3,3,3,4,4,4,4,5,5,6,6,6,6,5,4,4,3,3,3,3,3,2,2,2,2,1,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,2,2,2,1,1,1,1,0,1,1,1,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,5,6,7,7,9,11,14,15,17,18,19,20,22,22,23,23,24,24],[5,4,4,4,3,3,4,4,4,4,5,4,5,5,6,6,6,7,8,7,6,5,4,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,1,1,2,2,1,2,2,2,2,1,2,1,1,1,1,2,2,2,1,1,1,2,2,3,5,6,6,8,11,13,16,18,20,20,23,22,24,22,25,24,23],[4,4,3,3,3,3,3,3,4,4,4,4,4,4,5,5,6,6,7,6,6,5,4,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,4,4,4,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,1,1,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,3,4,5,6,8,10,12,14,16,18,19,21,21,23,22,23,23,23],[4,4,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,7,7,6,6,5,4,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,3,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2,3,4,6,6,8,10,13,15,17,20,20,23,22,24,22,25,23,24],[4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,6,6,5,5,4,4,3,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,3,4,5,6,8,10,12,14,17,18,20,21,22,24,23,25,24,24],[4,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,6,7,6,6,4,4,3,2,2,2,2,1,1,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,3,3,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,1,1,1,1,1,1,1,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,5,7,7,9,11,13,16,19,20,21,23,23,24,23,25,25,25],[4,3,3,3,3,3,3,3,3,4,4,5,5,4,5,5,5,6,7,6,6,4,4,3,3,2,2,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,4,4,4,3,3,3,3,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,3,5,6,6,8,11,14,17,19,20,21,23,23,24,24,24,25,25],[5,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,7,8,8,7,7,5,5,4,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,4,3,3,3,3,3,2,2,3,3,3,3,4,4,4,4,4,4,4,3,3,3,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,1,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,3,4,5,6,6,9,11,14,16,18,20,22,23,24,25,25,25,26,26],[5,4,4,4,5,4,4,5,5,5,6,6,6,6,7,7,7,8,9,7,7,5,5,4,4,3,3,3,2,2,2,2,3,3,3,3,4,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,5,4,5,6,5,5,4,4,4,3,3,3,2,2,2,1,1,1,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,1,2,1,2,2,2,2,2,2,2,3,3,4,7,7,7,9,12,15,16,19,20,20,22,23,23,25,25,25,25],[5,4,4,4,4,4,4,4,4,5,5,5,5,6,7,7,7,8,8,7,7,5,5,4,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,3,4,3,3,3,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,1,2,1,2,2,2,2,2,2,2,2,3,4,5,6,8,10,12,15,17,20,18,22,22,24,24,25,25,26,26],[4,4,4,4,4,4,3,4,4,4,5,5,5,5,5,6,6,7,7,6,6,5,4,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,4,5,5,6,8,11,13,15,18,20,21,24,23,25,24,26,25,26],[4,4,3,3,3,3,3,4,4,4,5,5,4,4,5,5,6,6,7,6,6,5,4,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,4,3,4,4,4,4,3,3,3,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,5,5,5,7,10,13,14,16,18,19,22,21,24,23,24,24,24],[4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,7,7,6,6,5,4,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,1,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,6,6,7,8,10,13,14,17,18,19,21,22,23,23,24,25,25],[5,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,7,7,7,6,6,5,4,4,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,3,4,3,3,3,3,3,3,2,3,3,3,4,4,4,4,5,4,4,4,3,3,3,3,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,5,7,7,9,11,13,16,18,20,20,23,23,25,23,25,24,25],[5,5,4,4,4,4,4,5,5,5,5,5,5,5,6,6,7,7,7,6,7,5,5,4,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,4,5,6,7,8,10,13,15,16,19,18,22,21,23,21,24,22,23],[5,4,4,4,3,4,3,4,4,4,5,5,5,5,6,6,7,7,8,6,6,5,4,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,4,3,3,3,3,3,2,2,3,3,3,3,4,4,4,4,4,4,4,3,3,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,5,5,6,7,10,12,14,16,17,18,19,21,21,21,22,22,22],[5,5,5,4,5,5,5,5,5,6,7,6,6,6,7,6,8,8,8,7,7,6,5,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,5,4,4,4,3,3,3,3,3,3,4,4,5,5,5,5,5,5,5,4,4,3,3,3,3,2,2,2,2,1,2,1,2,2,2,2,2,2,1,1,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,2,2,2,2,2,3,2,3,3,4,5,6,7,9,11,12,14,16,17,18,20,20,21,22,21,24,23],[6,5,5,5,5,5,5,5,5,5,6,6,6,7,7,7,8,8,9,7,8,6,5,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,4,5,4,4,4,4,5,4,4,4,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,1,1,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,4,5,7,7,8,10,13,14,15,17,18,21,20,22,22,23,23,23],[7,6,6,6,6,6,6,6,6,6,8,8,8,8,9,8,9,9,10,9,9,7,6,5,5,5,4,4,4,3,4,4,4,4,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,6,6,6,5,5,5,4,5,4,4,4,5,5,5,6,6,6,7,6,7,6,6,5,4,4,4,3,3,3,3,2,2,2,1,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,3,2,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,3,3,3,3,3,4,4,5,6,6,8,8,10,12,14,15,17,17,18,20,20,21,20,22,21],[7,7,6,7,7,7,6,7,7,6,7,9,8,8,9,9,9,10,9,8,8,7,6,6,5,5,4,5,3,4,4,4,4,5,5,5,5,5,5,5,6,5,5,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,6,6,6,7,6,7,7,7,7,6,6,5,5,4,4,3,3,3,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2,2,3,3,3,3,3,3,4,5,7,7,7,9,10,13,14,16,17,18,21,21,23,22,23,24,23],[6,6,6,6,6,6,6,6,6,7,8,8,7,8,8,9,9,10,10,9,9,7,6,5,5,4,4,4,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,6,5,6,5,5,5,4,4,4,4,4,5,5,5,6,6,6,6,6,6,6,5,5,4,3,3,3,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,0,1,1,1,2,2,2,3,2,3,3,3,4,5,7,7,7,9,10,13,14,16,18,19,20,21,20,21,21,22,21],[5,4,4,4,4,4,4,4,4,4,5,6,6,6,6,6,7,7,8,7,7,5,4,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,3,3,4,3,4,3,3,3,3,3,3,2,3,3,3,3,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,3,4,6,6,7,8,11,14,15,17,20,20,23,23,24,23,25,24,24],[5,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,6,7,8,7,7,5,5,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,4,4,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,3,4,6,7,7,8,11,13,15,17,19,19,21,21,22,22,23,22,22],[4,4,3,3,3,3,3,4,4,4,5,5,5,5,5,6,6,7,7,7,6,5,4,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,4,4,4,4,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,2,2,1,1,1,1,0,1,1,1,1,1,2,2,2,3,3,5,6,6,8,10,14,16,18,20,21,23,24,24,24,24,26,24],[5,4,4,3,4,4,4,4,5,5,5,5,5,6,6,6,6,7,8,7,7,5,4,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,2,3,3,3,3,4,4,5,5,5,4,3,3,3,2,2,2,1,1,1,1,1,1,1,1,2,2,3,3,3,3,2,3,3,3,2,3,3,2,2,3,3,3,3,2,2,2,2,2,3,3,3,2,2,2,2,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,2,2,3,4,5,7,8,8,9,11,14,16,18,20,21,23,23,24,23,24,25,24],[5,3,3,3,3,3,3,3,3,4,5,4,4,5,5,5,5,6,7,6,6,5,3,3,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,4,4,4,3,3,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,2,2,1,1,1,1,0,1,1,1,1,2,2,3,4,6,7,6,8,11,14,16,18,21,20,23,23,24,24,25,26,26],[4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,6,6,6,5,4,3,3,2,2,2,1,1,1,2,2,2,2,2,2,2,3,3,2,3,2,2,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,1,2,2,2,2,3,3,3,4,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,0,1,1,1,1,2,2,3,5,6,6,8,10,13,15,16,18,19,21,21,23,21,23,23,22],[4,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,7,6,6,5,4,3,2,2,2,2,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,1,2,2,2,3,3,3,3,3,3,3,3,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,1,1,1,1,1,0,1,1,1,2,2,3,5,6,6,8,11,13,15,17,20,20,23,23,25,24,26,26,25],[4,4,3,3,3,3,3,3,4,5,5,4,4,5,6,6,6,7,7,7,6,5,4,3,2,2,2,2,2,2,2,2,1,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,3,3,3,2,2,2,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,0,1,1,1,2,3,5,6,7,8,12,13,16,19,20,22,22,24,24,25,25,25,24],[5,4,4,4,4,3,3,4,4,4,5,5,4,5,6,6,6,8,8,7,7,6,5,4,3,3,2,2,2,2,2,2,2,2,3,3,4,3,4,3,4,4,3,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,4,3,4,3,3,4,4,5,5,5,4,4,3,3,3,2,2,2,2,2,2,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,1,1,1,2,2,2,2,2,2,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,3,3,2,2,2,2,1,1,1,0,1,1,2,3,4,6,6,8,9,11,14,17,21,22,24,24,24,24,24,24,24],[6,5,5,4,4,4,3,4,4,5,5,6,5,6,7,7,7,9,9,8,8,6,5,4,3,3,2,2,2,1,2,2,2,2,2,3,3,3,4,3,4,3,4,4,4,4,4,4,4,3,4,3,4,3,3,2,2,2,2,2,3,2,3,3,4,4,5,5,6,5,4,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,0,1,1,3,4,6,7,9,10,11,15,17,20,20,22,23,24,24,26,25,26],[8,7,6,6,6,5,6,6,6,7,8,7,7,7,8,8,8,9,10,10,9,9,7,6,5,5,4,4,3,2,3,4,3,3,4,5,5,5,7,5,6,5,5,7,7,7,7,6,6,5,5,6,5,5,4,4,3,3,3,3,4,4,6,6,6,6,7,7,7,7,6,5,6,4,4,3,3,3,3,3,4,3,4,3,4,4,5,4,4,5,4,4,3,3,3,2,3,4,3,3,3,4,3,3,2,1,2,3,3,3,4,3,2,2,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,3,3,3,3,2,1,1,0,1,3,5,5,6,8,9,10,12,14,17,18,20,21,22,22,23,22,22],[15,11,11,9,9,8,6,9,9,10,11,10,10,11,12,11,12,13,13,13,13,12,11,11,10,9,8,7,6,4,5,6,6,5,6,6,8,8,11,9,12,11,10,11,12,11,12,10,12,8,8,7,7,6,5,5,4,6,5,5,6,5,8,8,10,10,10,12,12,11,10,9,8,7,7,6,7,8,6,9,6,9,7,7,7,7,8,7,9,8,8,6,7,8,6,6,7,8,6,5,5,6,6,5,4,3,3,4,4,6,6,6,5,5,6,6,8,8,9,10,8,9,10,9,9,9,11,9,9,9,9,9,10,10,9,8,6,6,4,2,2,1,0,1,4,5,8,10,11,12,13,15,18,19,22,22,24,23,25,24,25],[18,16,15,12,13,12,9,12,14,12,14,14,13,15,18,15,16,20,19,18,17,16,13,14,14,13,14,10,11,7,9,10,7,6,10,10,13,11,15,15,15,13,13,15,16,17,16,16,16,10,13,9,11,11,9,8,5,7,6,8,10,8,11,10,14,15,16,16,19,15,14,13,12,10,12,10,11,12,10,12,10,12,12,13,14,14,15,14,15,14,13,13,14,14,11,9,8,10,7,8,8,9,7,7,6,7,6,8,8,11,13,13,10,9,7,8,12,11,15,11,11,13,16,13,13,16,17,14,17,15,16,15,16,15,15,13,11,11,7,5,5,3,1,0,2,3,6,7,9,11,13,16,20,20,22,23,24,23,24,24,23],[21,20,20,16,18,17,15,17,16,17,20,20,18,20,21,20,20,24,23,23,21,21,21,21,16,18,15,17,16,12,14,14,12,10,15,14,17,17,21,16,19,20,18,22,20,21,21,20,20,16,18,15,14,14,11,13,9,14,12,15,14,13,16,17,19,22,23,23,23,19,18,17,16,16,15,16,18,14,11,16,15,18,16,14,15,15,18,17,15,15,16,12,14,14,13,12,9,12,12,7,10,11,10,8,5,7,8,9,11,13,13,14,11,12,11,11,19,14,16,16,13,14,16,15,15,15,20,14,17,15,16,15,17,17,17,16,18,17,12,10,6,5,3,1,0,1,3,5,8,10,12,14,17,18,20,21,22,22,23,23,24],[23,21,21,20,19,17,14,20,20,19,22,22,22,22,23,22,23,24,23,24,23,25,22,23,23,22,21,18,17,14,16,14,13,11,15,16,14,18,20,21,24,22,23,23,24,23,24,21,20,19,16,15,14,13,10,13,10,14,14,19,16,14,20,19,22,22,23,22,24,22,22,22,19,20,19,19,21,21,18,20,21,18,20,19,18,19,18,17,18,18,17,15,16,15,14,13,14,15,14,9,9,13,11,14,7,8,12,12,15,19,15,18,14,17,13,14,18,15,19,16,15,18,18,17,18,20,21,19,21,20,21,20,22,23,22,23,21,22,12,11,9,6,5,2,1,0,2,4,6,9,11,13,14,17,18,20,20,21,21,21,23],[26,24,21,19,18,17,16,19,22,23,24,22,24,23,24,24,25,25,26,25,26,25,24,23,25,20,23,17,19,17,16,17,16,12,16,15,19,17,23,22,25,23,24,25,26,23,24,22,22,17,17,16,14,13,11,12,11,15,16,19,20,16,21,16,21,23,22,23,24,23,23,22,22,17,22,18,19,23,18,23,20,21,24,21,25,24,25,24,24,21,22,20,19,21,17,17,17,19,17,13,16,18,12,14,14,13,17,15,22,23,23,22,16,19,17,17,22,21,25,24,20,23,24,22,22,24,25,21,24,23,25,24,26,24,26,24,22,21,17,14,12,11,8,6,4,3,0,2,4,6,9,10,13,16,19,20,24,23,25,24,25],[28,26,24,22,21,20,19,22,23,25,26,24,25,26,27,26,27,28,27,28,27,27,27,26,26,22,25,21,22,18,18,20,19,15,18,18,22,22,25,24,27,26,26,28,29,27,27,25,25,21,20,19,17,16,13,15,13,17,18,21,24,19,23,20,24,25,25,27,27,26,26,24,24,21,24,22,22,25,23,26,23,26,26,26,27,27,28,27,27,25,26,25,23,25,22,19,19,21,19,15,18,20,13,16,15,16,20,17,24,26,27,26,19,22,19,20,25,23,26,26,23,25,26,25,25,26,26,25,26,26,27,27,28,26,28,26,24,24,19,16,14,13,10,8,7,7,1,0,2,4,7,9,11,13,16,18,22,23,24,25,26],[28,27,25,23,23,22,20,22,23,25,26,24,25,27,27,26,27,28,29,28,28,27,27,26,26,24,26,22,24,20,20,22,20,17,21,19,23,23,25,25,28,26,27,29,29,28,27,26,26,22,22,20,18,18,15,17,16,19,19,23,24,20,23,22,24,25,25,27,27,27,26,24,25,23,25,23,25,26,24,27,24,27,26,27,28,28,28,29,28,28,28,26,26,28,25,22,23,24,21,19,22,22,16,20,17,18,21,19,23,26,28,27,22,24,21,22,26,25,27,27,25,27,27,28,26,28,28,27,28,27,29,28,29,28,29,28,26,25,21,18,16,16,12,11,10,10,4,2,0,1,6,8,10,11,13,16,19,20,23,23,24],[28,26,24,23,23,22,22,23,23,26,26,24,25,26,26,25,26,28,28,28,28,27,27,26,26,24,27,23,24,21,22,22,21,17,20,19,23,23,25,25,27,27,27,29,29,28,27,26,25,23,23,21,17,18,15,18,17,20,20,23,25,21,25,23,25,25,26,27,27,26,26,24,25,23,25,24,25,27,24,27,25,28,27,27,28,28,28,28,28,27,28,27,26,27,26,23,23,25,22,19,22,22,18,21,18,20,21,21,25,26,28,26,22,24,21,22,27,26,28,28,25,27,28,29,27,28,28,28,28,28,29,28,29,28,29,28,26,25,21,19,16,16,13,13,12,11,6,5,2,0,2,5,7,9,11,12,16,18,21,22,22],[28,27,25,23,23,21,19,22,23,25,25,24,24,26,25,25,26,28,28,28,28,27,27,27,26,24,27,23,25,21,21,22,22,18,22,19,24,23,26,26,28,27,27,29,29,28,28,26,26,22,23,20,17,19,16,17,17,19,20,23,23,20,24,23,24,26,26,27,27,26,25,25,25,23,25,24,25,27,24,27,26,28,27,28,29,29,29,29,29,28,28,27,28,27,26,25,25,25,23,21,24,25,18,21,19,21,22,22,26,28,29,27,24,25,22,22,27,25,28,26,26,27,28,28,28,29,28,28,28,28,29,28,29,28,29,28,27,25,23,19,16,15,13,12,11,11,8,6,5,2,0,1,4,6,8,9,11,14,18,19,20],[29,27,25,24,24,23,21,23,23,26,26,25,25,26,26,25,26,28,29,28,28,27,28,27,27,25,27,24,25,22,22,23,21,18,22,20,24,24,26,26,28,28,28,29,30,28,28,27,26,23,23,21,18,20,16,17,17,20,20,24,25,20,25,24,25,26,27,27,27,26,26,25,26,24,26,24,26,27,24,28,26,28,27,28,28,29,29,30,29,28,29,28,29,28,27,25,26,27,24,22,25,26,22,23,20,22,22,23,27,28,29,27,26,26,24,23,27,27,28,28,27,28,28,30,28,29,29,29,29,28,29,29,29,29,29,28,27,26,24,20,18,18,13,13,13,13,10,8,6,4,1,0,1,4,6,7,8,10,14,16,19],[27,27,26,24,24,22,21,22,23,26,25,25,25,26,25,26,27,28,29,28,29,27,28,26,28,25,28,25,26,23,23,24,22,21,22,22,24,25,25,26,29,27,28,30,30,29,29,27,26,23,24,22,18,20,18,18,19,20,22,24,26,20,25,24,25,27,26,27,27,27,27,26,27,24,27,26,27,28,26,28,26,29,27,28,29,29,29,29,29,29,28,28,29,28,26,26,27,25,24,23,26,25,20,24,22,23,23,25,27,29,29,27,26,26,25,25,27,27,26,27,27,28,27,29,28,28,29,29,28,29,29,29,29,29,29,29,27,27,25,21,19,19,15,15,16,15,11,9,8,6,5,2,0,1,5,5,7,7,9,13,16],[28,27,26,24,25,22,23,23,23,27,27,26,25,27,27,25,26,28,28,27,29,27,27,26,27,26,27,25,26,24,24,25,22,21,24,22,25,25,27,27,29,28,28,29,30,28,28,27,26,24,24,22,19,20,18,18,20,21,22,26,27,22,25,24,26,26,27,27,27,26,26,25,27,24,27,26,27,28,26,28,28,29,28,29,29,29,29,29,29,28,29,28,29,29,27,28,26,27,25,25,26,27,24,25,23,25,25,25,28,29,29,28,27,28,25,25,28,28,28,28,28,28,28,29,28,29,29,29,29,28,29,28,29,29,29,28,28,28,26,22,21,21,17,18,17,16,13,10,8,7,6,5,3,0,1,4,5,7,7,7,12],[27,27,26,24,24,22,22,23,23,25,26,25,26,27,26,27,27,28,29,28,29,28,28,27,27,26,28,26,26,25,25,25,23,23,24,24,24,26,26,27,28,27,29,29,29,28,28,26,27,25,24,22,19,21,20,19,20,20,23,25,27,21,25,23,26,26,27,27,28,27,27,26,27,25,27,27,28,28,27,28,27,29,28,29,29,30,29,29,29,29,29,29,29,29,28,27,27,27,25,25,27,27,23,26,23,24,25,26,28,29,30,29,27,28,25,26,28,28,27,28,28,28,28,29,29,29,29,29,29,29,30,29,29,29,29,28,28,28,27,23,21,22,18,18,19,16,12,10,9,7,7,5,7,2,0,1,5,5,7,6,8],[28,28,27,25,25,24,23,23,23,27,27,27,26,28,27,27,27,29,29,29,29,28,28,27,28,28,28,27,27,26,26,26,24,24,26,24,26,26,28,28,29,28,29,30,30,29,29,28,28,26,25,22,19,22,20,20,22,22,24,27,28,22,26,24,26,27,27,28,28,27,27,28,27,27,28,28,28,28,28,28,28,29,28,29,28,28,28,29,29,28,28,27,29,28,27,28,27,27,25,26,27,27,25,26,25,26,27,26,28,29,29,28,28,28,26,27,28,28,27,27,28,27,27,29,28,28,28,28,28,28,29,28,29,29,29,29,28,29,27,24,23,22,19,21,20,18,14,11,9,8,7,6,5,5,2,0,1,4,5,5,5],[26,28,26,25,23,23,22,23,24,26,26,25,26,27,27,27,26,27,28,28,29,28,28,26,27,27,27,26,26,26,26,27,25,25,25,25,25,27,26,28,28,27,28,28,29,28,28,27,27,25,25,22,20,23,22,20,23,22,25,26,27,22,26,24,26,26,26,26,28,26,27,27,27,27,28,28,28,28,28,27,28,29,29,29,29,30,29,29,30,29,29,29,29,29,29,28,27,27,27,26,27,28,24,27,26,27,27,28,28,29,30,29,28,29,26,28,28,28,26,28,29,29,28,29,29,29,29,29,29,30,30,29,29,29,29,29,28,29,28,26,24,23,20,21,22,18,15,12,11,9,8,6,5,4,5,1,0,1,4,5,6],[29,29,28,27,26,24,26,25,25,27,27,27,27,28,28,28,28,29,30,29,28,28,28,28,27,28,27,28,28,28,27,27,27,25,27,25,28,27,28,28,28,28,29,29,29,29,29,27,28,26,26,24,21,24,23,21,24,25,26,27,27,24,26,25,27,27,27,28,28,27,27,28,27,28,27,29,27,28,28,27,29,28,28,28,28,28,28,28,29,28,28,27,29,28,26,28,27,26,26,27,27,26,27,26,26,26,28,28,28,29,28,27,28,28,27,27,27,29,27,28,28,27,27,29,28,28,28,28,28,27,29,28,28,29,28,28,28,29,27,26,25,24,21,23,21,20,17,14,13,10,9,7,6,5,5,4,2,0,1,4,4],[26,28,26,26,25,24,26,25,25,27,27,25,26,26,27,27,26,27,28,28,28,27,29,27,27,27,27,27,27,28,26,27,26,26,26,25,27,27,26,28,28,27,28,28,28,28,28,27,28,26,26,23,23,24,23,22,25,25,27,26,27,24,26,24,27,27,26,27,28,26,27,27,27,28,28,29,28,27,28,27,29,29,29,29,29,29,29,29,29,29,29,28,29,29,28,29,28,27,27,27,28,28,25,27,27,28,28,28,28,29,29,28,28,29,27,28,28,28,25,28,29,29,28,29,29,29,28,29,28,29,29,29,29,28,29,28,28,28,28,27,25,25,23,23,24,20,18,15,15,12,12,9,7,5,5,4,5,2,0,1,4],[28,29,27,27,26,25,26,26,26,27,27,27,27,27,28,27,27,29,29,28,28,27,28,27,28,29,26,28,27,28,26,27,28,26,28,26,28,28,28,29,27,28,28,29,29,29,28,28,28,27,27,25,23,25,23,23,26,26,27,26,27,26,27,26,27,28,27,28,28,27,28,28,27,28,27,29,26,27,27,26,28,28,28,28,28,27,28,28,29,27,28,28,29,28,27,29,27,26,27,28,27,27,27,26,27,27,28,28,28,29,28,27,28,28,27,28,27,28,26,27,28,27,27,29,28,28,27,27,28,27,28,28,28,28,28,27,27,28,27,27,27,26,23,23,21,19,17,16,16,14,14,11,9,6,5,5,5,4,2,0,1],[26,28,28,27,26,26,28,27,28,28,27,27,28,28,27,28,27,27,27,28,28,28,28,27,28,29,28,28,27,28,27,28,29,28,27,26,27,28,27,29,28,28,29,28,29,28,28,28,28,28,26,27,25,26,26,26,27,28,28,26,28,28,26,27,28,28,27,26,28,26,28,27,29,30,28,30,28,28,28,27,29,29,29,29,28,28,28,29,29,29,29,29,30,29,29,29,28,28,28,29,29,28,27,27,29,28,29,29,28,29,28,27,29,29,28,28,28,29,26,27,29,29,28,29,30,29,28,29,28,29,29,29,28,28,29,28,28,29,27,28,27,28,27,26,25,22,19,18,17,16,16,15,12,10,8,5,7,6,4,2,0]],"max_predicted_aligned_error":31.75}] \ No newline at end of file diff --git a/tools/battery/models/AF-P32322-F1-model_v6.cif b/tools/battery/models/AF-P32322-F1-model_v6.cif new file mode 100644 index 000000000..853c5ed81 --- /dev/null +++ b/tools/battery/models/AF-P32322-F1-model_v6.cif @@ -0,0 +1,3789 @@ +data_AF-P32322-F1 +# +_entry.id AF-P32322-F1 +# +loop_ +_atom_type.symbol +C +N +O +S +# +loop_ +_audit_author.name +_audit_author.pdbx_ordinal +"Jumper, John" 1 +"Evans, Richard" 2 +"Pritzel, Alexander" 3 +"Green, Tim" 4 +"Figurnov, Michael" 5 +"Ronneberger, Olaf" 6 +"Tunyasuvunakool, Kathryn" 7 +"Bates, Russ" 8 +"Zidek, Augustin" 9 +"Potapenko, Anna" 10 +"Bridgland, Alex" 11 +"Meyer, Clemens" 12 +"Kohl, Simon A. A." 13 +"Ballard, Andrew J." 14 +"Cowie, Andrew" 15 +"Romera-Paredes, Bernardino" 16 +"Nikolov, Stanislav" 17 +"Jain, Rishub" 18 +"Adler, Jonas" 19 +"Back, Trevor" 20 +"Petersen, Stig" 21 +"Reiman, David" 22 +"Clancy, Ellen" 23 +"Zielinski, Michal" 24 +"Steinegger, Martin" 25 +"Pacholska, Michalina" 26 +"Berghammer, Tamas" 27 +"Silver, David" 28 +"Vinyals, Oriol" 29 +"Senior, Andrew W." 30 +"Kavukcuoglu, Koray" 31 +"Kohli, Pushmeet" 32 +"Hassabis, Demis" 33 +# +_audit_conform.dict_location https://raw.githubusercontent.com/ihmwg/ModelCIF/master/dist/mmcif_ma.dic +_audit_conform.dict_name mmcif_ma.dic +_audit_conform.dict_version 1.3.9 +# +loop_ +_chem_comp.formula +_chem_comp.formula_weight +_chem_comp.id +_chem_comp.mon_nstd_flag +_chem_comp.name +_chem_comp.pdbx_synonyms +_chem_comp.type +"C3 H7 N O2" 89.093 ALA y ALANINE ? "L-PEPTIDE LINKING" +"C6 H15 N4 O2" 175.209 ARG y ARGININE ? "L-PEPTIDE LINKING" +"C4 H8 N2 O3" 132.118 ASN y ASPARAGINE ? "L-PEPTIDE LINKING" +"C4 H7 N O4" 133.103 ASP y "ASPARTIC ACID" ? "L-PEPTIDE LINKING" +"C3 H7 N O2 S" 121.158 CYS y CYSTEINE ? "L-PEPTIDE LINKING" +"C5 H10 N2 O3" 146.144 GLN y GLUTAMINE ? "L-PEPTIDE LINKING" +"C5 H9 N O4" 147.129 GLU y "GLUTAMIC ACID" ? "L-PEPTIDE LINKING" +"C2 H5 N O2" 75.067 GLY y GLYCINE ? "PEPTIDE LINKING" +"C6 H10 N3 O2" 156.162 HIS y HISTIDINE ? "L-PEPTIDE LINKING" +"C6 H13 N O2" 131.173 ILE y ISOLEUCINE ? "L-PEPTIDE LINKING" +"C6 H13 N O2" 131.173 LEU y LEUCINE ? "L-PEPTIDE LINKING" +"C6 H15 N2 O2" 147.195 LYS y LYSINE ? "L-PEPTIDE LINKING" +"C5 H11 N O2 S" 149.211 MET y METHIONINE ? "L-PEPTIDE LINKING" +"C9 H11 N O2" 165.189 PHE y PHENYLALANINE ? "L-PEPTIDE LINKING" +"C5 H9 N O2" 115.130 PRO y PROLINE ? "L-PEPTIDE LINKING" +"C3 H7 N O3" 105.093 SER y SERINE ? "L-PEPTIDE LINKING" +"C4 H9 N O3" 119.119 THR y THREONINE ? "L-PEPTIDE LINKING" +"C9 H11 N O3" 181.189 TYR y TYROSINE ? "L-PEPTIDE LINKING" +"C5 H11 N O2" 117.146 VAL y VALINE ? "L-PEPTIDE LINKING" +# +_citation.book_publisher ? +_citation.country UK +_citation.id primary +_citation.journal_full Nature +_citation.journal_id_ASTM NATUAS +_citation.journal_id_CSD 0006 +_citation.journal_id_ISSN 0028-0836 +_citation.journal_volume 596 +_citation.page_first 583 +_citation.page_last 589 +_citation.pdbx_database_id_DOI 10.1038/s41586-021-03819-2 +_citation.pdbx_database_id_PubMed 34265844 +_citation.title "Highly accurate protein structure prediction with AlphaFold" +_citation.year 2021 +# +loop_ +_citation_author.citation_id +_citation_author.name +_citation_author.ordinal +primary "Jumper, John" 1 +primary "Evans, Richard" 2 +primary "Pritzel, Alexander" 3 +primary "Green, Tim" 4 +primary "Figurnov, Michael" 5 +primary "Ronneberger, Olaf" 6 +primary "Tunyasuvunakool, Kathryn" 7 +primary "Bates, Russ" 8 +primary "Zidek, Augustin" 9 +primary "Potapenko, Anna" 10 +primary "Bridgland, Alex" 11 +primary "Meyer, Clemens" 12 +primary "Kohl, Simon A. A." 13 +primary "Ballard, Andrew J." 14 +primary "Cowie, Andrew" 15 +primary "Romera-Paredes, Bernardino" 16 +primary "Nikolov, Stanislav" 17 +primary "Jain, Rishub" 18 +primary "Adler, Jonas" 19 +primary "Back, Trevor" 20 +primary "Petersen, Stig" 21 +primary "Reiman, David" 22 +primary "Clancy, Ellen" 23 +primary "Zielinski, Michal" 24 +primary "Steinegger, Martin" 25 +primary "Pacholska, Michalina" 26 +primary "Berghammer, Tamas" 27 +primary "Silver, David" 28 +primary "Vinyals, Oriol" 29 +primary "Senior, Andrew W." 30 +primary "Kavukcuoglu, Koray" 31 +primary "Kohli, Pushmeet" 32 +primary "Hassabis, Demis" 33 +# +_database_2.database_code AF-P32322-F1 +_database_2.database_id AlphaFoldDB +# +_entity.details ? +_entity.formula_weight ? +_entity.id 1 +_entity.pdbx_description "Pyrroline-5-carboxylate reductase 1, mitochondrial" +_entity.pdbx_ec ? +_entity.pdbx_fragment ? +_entity.pdbx_mutation ? +_entity.pdbx_number_of_molecules 1 +_entity.src_method man +_entity.type polymer +# +_entity_poly.entity_id 1 +_entity_poly.nstd_linkage no +_entity_poly.nstd_monomer no +_entity_poly.pdbx_seq_one_letter_code +;MSVGFIGAGQLAFALAKGFTAAGVLAAHKIMASSPDMDLATVSALRKMGVKLTPHNKETVQHSDVLFLAVKPHIIPFILD +EIGADIEDRHIVVSCAAGVTISSIEKKLSAFRPAPRVIRCMTNTPVVVREGATVYATGTHAQVEDGRLMEQLLSSVGFCT +EVEEDLIDAVTGLSGSGPAYAFTALDALADGGVKMGLPRRLAVRLGAQALLGAAKMLLHSEQHPGQLKDNVSSPGGATIH +ALHVLESGGFRSLLINAVEASCIRTRELQSMADQEQVSPAAIKKTILDKVKLDSPAGTALSPSGHTKLLPRSLAPAGKD +; +_entity_poly.pdbx_seq_one_letter_code_can +;MSVGFIGAGQLAFALAKGFTAAGVLAAHKIMASSPDMDLATVSALRKMGVKLTPHNKETVQHSDVLFLAVKPHIIPFILD +EIGADIEDRHIVVSCAAGVTISSIEKKLSAFRPAPRVIRCMTNTPVVVREGATVYATGTHAQVEDGRLMEQLLSSVGFCT +EVEEDLIDAVTGLSGSGPAYAFTALDALADGGVKMGLPRRLAVRLGAQALLGAAKMLLHSEQHPGQLKDNVSSPGGATIH +ALHVLESGGFRSLLINAVEASCIRTRELQSMADQEQVSPAAIKKTILDKVKLDSPAGTALSPSGHTKLLPRSLAPAGKD +; +_entity_poly.pdbx_strand_id A +_entity_poly.type polypeptide(L) +# +loop_ +_entity_poly_seq.entity_id +_entity_poly_seq.hetero +_entity_poly_seq.mon_id +_entity_poly_seq.num +1 n MET 1 +1 n SER 2 +1 n VAL 3 +1 n GLY 4 +1 n PHE 5 +1 n ILE 6 +1 n GLY 7 +1 n ALA 8 +1 n GLY 9 +1 n GLN 10 +1 n LEU 11 +1 n ALA 12 +1 n PHE 13 +1 n ALA 14 +1 n LEU 15 +1 n ALA 16 +1 n LYS 17 +1 n GLY 18 +1 n PHE 19 +1 n THR 20 +1 n ALA 21 +1 n ALA 22 +1 n GLY 23 +1 n VAL 24 +1 n LEU 25 +1 n ALA 26 +1 n ALA 27 +1 n HIS 28 +1 n LYS 29 +1 n ILE 30 +1 n MET 31 +1 n ALA 32 +1 n SER 33 +1 n SER 34 +1 n PRO 35 +1 n ASP 36 +1 n MET 37 +1 n ASP 38 +1 n LEU 39 +1 n ALA 40 +1 n THR 41 +1 n VAL 42 +1 n SER 43 +1 n ALA 44 +1 n LEU 45 +1 n ARG 46 +1 n LYS 47 +1 n MET 48 +1 n GLY 49 +1 n VAL 50 +1 n LYS 51 +1 n LEU 52 +1 n THR 53 +1 n PRO 54 +1 n HIS 55 +1 n ASN 56 +1 n LYS 57 +1 n GLU 58 +1 n THR 59 +1 n VAL 60 +1 n GLN 61 +1 n HIS 62 +1 n SER 63 +1 n ASP 64 +1 n VAL 65 +1 n LEU 66 +1 n PHE 67 +1 n LEU 68 +1 n ALA 69 +1 n VAL 70 +1 n LYS 71 +1 n PRO 72 +1 n HIS 73 +1 n ILE 74 +1 n ILE 75 +1 n PRO 76 +1 n PHE 77 +1 n ILE 78 +1 n LEU 79 +1 n ASP 80 +1 n GLU 81 +1 n ILE 82 +1 n GLY 83 +1 n ALA 84 +1 n ASP 85 +1 n ILE 86 +1 n GLU 87 +1 n ASP 88 +1 n ARG 89 +1 n HIS 90 +1 n ILE 91 +1 n VAL 92 +1 n VAL 93 +1 n SER 94 +1 n CYS 95 +1 n ALA 96 +1 n ALA 97 +1 n GLY 98 +1 n VAL 99 +1 n THR 100 +1 n ILE 101 +1 n SER 102 +1 n SER 103 +1 n ILE 104 +1 n GLU 105 +1 n LYS 106 +1 n LYS 107 +1 n LEU 108 +1 n SER 109 +1 n ALA 110 +1 n PHE 111 +1 n ARG 112 +1 n PRO 113 +1 n ALA 114 +1 n PRO 115 +1 n ARG 116 +1 n VAL 117 +1 n ILE 118 +1 n ARG 119 +1 n CYS 120 +1 n MET 121 +1 n THR 122 +1 n ASN 123 +1 n THR 124 +1 n PRO 125 +1 n VAL 126 +1 n VAL 127 +1 n VAL 128 +1 n ARG 129 +1 n GLU 130 +1 n GLY 131 +1 n ALA 132 +1 n THR 133 +1 n VAL 134 +1 n TYR 135 +1 n ALA 136 +1 n THR 137 +1 n GLY 138 +1 n THR 139 +1 n HIS 140 +1 n ALA 141 +1 n GLN 142 +1 n VAL 143 +1 n GLU 144 +1 n ASP 145 +1 n GLY 146 +1 n ARG 147 +1 n LEU 148 +1 n MET 149 +1 n GLU 150 +1 n GLN 151 +1 n LEU 152 +1 n LEU 153 +1 n SER 154 +1 n SER 155 +1 n VAL 156 +1 n GLY 157 +1 n PHE 158 +1 n CYS 159 +1 n THR 160 +1 n GLU 161 +1 n VAL 162 +1 n GLU 163 +1 n GLU 164 +1 n ASP 165 +1 n LEU 166 +1 n ILE 167 +1 n ASP 168 +1 n ALA 169 +1 n VAL 170 +1 n THR 171 +1 n GLY 172 +1 n LEU 173 +1 n SER 174 +1 n GLY 175 +1 n SER 176 +1 n GLY 177 +1 n PRO 178 +1 n ALA 179 +1 n TYR 180 +1 n ALA 181 +1 n PHE 182 +1 n THR 183 +1 n ALA 184 +1 n LEU 185 +1 n ASP 186 +1 n ALA 187 +1 n LEU 188 +1 n ALA 189 +1 n ASP 190 +1 n GLY 191 +1 n GLY 192 +1 n VAL 193 +1 n LYS 194 +1 n MET 195 +1 n GLY 196 +1 n LEU 197 +1 n PRO 198 +1 n ARG 199 +1 n ARG 200 +1 n LEU 201 +1 n ALA 202 +1 n VAL 203 +1 n ARG 204 +1 n LEU 205 +1 n GLY 206 +1 n ALA 207 +1 n GLN 208 +1 n ALA 209 +1 n LEU 210 +1 n LEU 211 +1 n GLY 212 +1 n ALA 213 +1 n ALA 214 +1 n LYS 215 +1 n MET 216 +1 n LEU 217 +1 n LEU 218 +1 n HIS 219 +1 n SER 220 +1 n GLU 221 +1 n GLN 222 +1 n HIS 223 +1 n PRO 224 +1 n GLY 225 +1 n GLN 226 +1 n LEU 227 +1 n LYS 228 +1 n ASP 229 +1 n ASN 230 +1 n VAL 231 +1 n SER 232 +1 n SER 233 +1 n PRO 234 +1 n GLY 235 +1 n GLY 236 +1 n ALA 237 +1 n THR 238 +1 n ILE 239 +1 n HIS 240 +1 n ALA 241 +1 n LEU 242 +1 n HIS 243 +1 n VAL 244 +1 n LEU 245 +1 n GLU 246 +1 n SER 247 +1 n GLY 248 +1 n GLY 249 +1 n PHE 250 +1 n ARG 251 +1 n SER 252 +1 n LEU 253 +1 n LEU 254 +1 n ILE 255 +1 n ASN 256 +1 n ALA 257 +1 n VAL 258 +1 n GLU 259 +1 n ALA 260 +1 n SER 261 +1 n CYS 262 +1 n ILE 263 +1 n ARG 264 +1 n THR 265 +1 n ARG 266 +1 n GLU 267 +1 n LEU 268 +1 n GLN 269 +1 n SER 270 +1 n MET 271 +1 n ALA 272 +1 n ASP 273 +1 n GLN 274 +1 n GLU 275 +1 n GLN 276 +1 n VAL 277 +1 n SER 278 +1 n PRO 279 +1 n ALA 280 +1 n ALA 281 +1 n ILE 282 +1 n LYS 283 +1 n LYS 284 +1 n THR 285 +1 n ILE 286 +1 n LEU 287 +1 n ASP 288 +1 n LYS 289 +1 n VAL 290 +1 n LYS 291 +1 n LEU 292 +1 n ASP 293 +1 n SER 294 +1 n PRO 295 +1 n ALA 296 +1 n GLY 297 +1 n THR 298 +1 n ALA 299 +1 n LEU 300 +1 n SER 301 +1 n PRO 302 +1 n SER 303 +1 n GLY 304 +1 n HIS 305 +1 n THR 306 +1 n LYS 307 +1 n LEU 308 +1 n LEU 309 +1 n PRO 310 +1 n ARG 311 +1 n SER 312 +1 n LEU 313 +1 n ALA 314 +1 n PRO 315 +1 n ALA 316 +1 n GLY 317 +1 n LYS 318 +1 n ASP 319 +# +loop_ +_ma_data.content_type +_ma_data.id +_ma_data.name +"model coordinates" 1 Model +"input structure" 2 "Input structure" +# +_ma_model_list.data_id 1 +_ma_model_list.model_group_id 1 +_ma_model_list.model_group_name "AlphaFold Monomer v2.0 model" +_ma_model_list.model_id 1 +_ma_model_list.model_name "Top ranked model" +_ma_model_list.model_type "Ab initio model" +_ma_model_list.ordinal_id 1 +# +loop_ +_ma_protocol_step.method_type +_ma_protocol_step.ordinal_id +_ma_protocol_step.protocol_id +_ma_protocol_step.step_id +"coevolution MSA" 1 1 1 +"template search" 2 1 2 +modeling 3 1 3 +# +loop_ +_ma_qa_metric.id +_ma_qa_metric.mode +_ma_qa_metric.name +_ma_qa_metric.software_group_id +_ma_qa_metric.type +1 global pLDDT 1 pLDDT +2 local pLDDT 1 pLDDT +# +_ma_qa_metric_global.metric_id 1 +_ma_qa_metric_global.metric_value 89.81 +_ma_qa_metric_global.model_id 1 +_ma_qa_metric_global.ordinal_id 1 +# +loop_ +_ma_qa_metric_local.label_asym_id +_ma_qa_metric_local.label_comp_id +_ma_qa_metric_local.label_seq_id +_ma_qa_metric_local.metric_id +_ma_qa_metric_local.metric_value +_ma_qa_metric_local.model_id +_ma_qa_metric_local.ordinal_id +A MET 1 2 93.44 1 1 +A SER 2 2 97.81 1 2 +A VAL 3 2 98.56 1 3 +A GLY 4 2 98.75 1 4 +A PHE 5 2 98.75 1 5 +A ILE 6 2 98.56 1 6 +A GLY 7 2 97.38 1 7 +A ALA 8 2 97.06 1 8 +A GLY 9 2 95.69 1 9 +A GLN 10 2 95.94 1 10 +A LEU 11 2 96.19 1 11 +A ALA 12 2 97.62 1 12 +A PHE 13 2 97.81 1 13 +A ALA 14 2 97.94 1 14 +A LEU 15 2 98.31 1 15 +A ALA 16 2 98.31 1 16 +A LYS 17 2 98.00 1 17 +A GLY 18 2 97.94 1 18 +A PHE 19 2 98.31 1 19 +A THR 20 2 98.06 1 20 +A ALA 21 2 97.81 1 21 +A ALA 22 2 97.62 1 22 +A GLY 23 2 97.25 1 23 +A VAL 24 2 97.19 1 24 +A LEU 25 2 96.94 1 25 +A ALA 26 2 97.50 1 26 +A ALA 27 2 97.69 1 27 +A HIS 28 2 96.88 1 28 +A LYS 29 2 98.06 1 29 +A ILE 30 2 98.62 1 30 +A MET 31 2 98.69 1 31 +A ALA 32 2 98.62 1 32 +A SER 33 2 98.38 1 33 +A SER 34 2 96.50 1 34 +A PRO 35 2 94.06 1 35 +A ASP 36 2 93.75 1 36 +A MET 37 2 94.00 1 37 +A ASP 38 2 94.06 1 38 +A LEU 39 2 94.44 1 39 +A ALA 40 2 96.56 1 40 +A THR 41 2 96.50 1 41 +A VAL 42 2 96.94 1 42 +A SER 43 2 97.00 1 43 +A ALA 44 2 97.56 1 44 +A LEU 45 2 97.75 1 45 +A ARG 46 2 97.06 1 46 +A LYS 47 2 97.38 1 47 +A MET 48 2 96.38 1 48 +A GLY 49 2 97.56 1 49 +A VAL 50 2 98.25 1 50 +A LYS 51 2 98.31 1 51 +A LEU 52 2 98.44 1 52 +A THR 53 2 98.25 1 53 +A PRO 54 2 97.44 1 54 +A HIS 55 2 97.88 1 55 +A ASN 56 2 98.06 1 56 +A LYS 57 2 97.88 1 57 +A GLU 58 2 98.19 1 58 +A THR 59 2 98.50 1 59 +A VAL 60 2 98.56 1 60 +A GLN 61 2 98.06 1 61 +A HIS 62 2 98.00 1 62 +A SER 63 2 98.25 1 63 +A ASP 64 2 98.19 1 64 +A VAL 65 2 98.62 1 65 +A LEU 66 2 98.75 1 66 +A PHE 67 2 98.75 1 67 +A LEU 68 2 98.50 1 68 +A ALA 69 2 97.69 1 69 +A VAL 70 2 95.62 1 70 +A LYS 71 2 92.19 1 71 +A PRO 72 2 91.88 1 72 +A HIS 73 2 90.12 1 73 +A ILE 74 2 93.38 1 74 +A ILE 75 2 94.88 1 75 +A PRO 76 2 93.25 1 76 +A PHE 77 2 94.12 1 77 +A ILE 78 2 96.31 1 78 +A LEU 79 2 96.94 1 79 +A ASP 80 2 96.06 1 80 +A GLU 81 2 97.19 1 81 +A ILE 82 2 97.44 1 82 +A GLY 83 2 97.19 1 83 +A ALA 84 2 97.62 1 84 +A ASP 85 2 98.06 1 85 +A ILE 86 2 98.12 1 86 +A GLU 87 2 97.75 1 87 +A ASP 88 2 96.69 1 88 +A ARG 89 2 97.19 1 89 +A HIS 90 2 98.50 1 90 +A ILE 91 2 98.62 1 91 +A VAL 92 2 98.69 1 92 +A VAL 93 2 98.75 1 93 +A SER 94 2 98.31 1 94 +A CYS 95 2 97.12 1 95 +A ALA 96 2 94.31 1 96 +A ALA 97 2 92.19 1 97 +A GLY 98 2 91.62 1 98 +A VAL 99 2 95.38 1 99 +A THR 100 2 96.44 1 100 +A ILE 101 2 97.56 1 101 +A SER 102 2 96.12 1 102 +A SER 103 2 95.12 1 103 +A ILE 104 2 97.06 1 104 +A GLU 105 2 97.50 1 105 +A LYS 106 2 95.81 1 106 +A LYS 107 2 95.38 1 107 +A LEU 108 2 97.44 1 108 +A SER 109 2 96.88 1 109 +A ALA 110 2 96.19 1 110 +A PHE 111 2 96.75 1 111 +A ARG 112 2 93.81 1 112 +A PRO 113 2 93.62 1 113 +A ALA 114 2 96.62 1 114 +A PRO 115 2 97.75 1 115 +A ARG 116 2 98.44 1 116 +A VAL 117 2 98.62 1 117 +A ILE 118 2 98.75 1 118 +A ARG 119 2 98.44 1 119 +A CYS 120 2 97.88 1 120 +A MET 121 2 97.69 1 121 +A THR 122 2 98.31 1 122 +A ASN 123 2 98.06 1 123 +A THR 124 2 96.44 1 124 +A PRO 125 2 98.44 1 125 +A VAL 126 2 98.38 1 126 +A VAL 127 2 97.56 1 127 +A VAL 128 2 98.06 1 128 +A ARG 129 2 98.44 1 129 +A GLU 130 2 98.62 1 130 +A GLY 131 2 98.44 1 131 +A ALA 132 2 98.69 1 132 +A THR 133 2 98.75 1 133 +A VAL 134 2 98.69 1 134 +A TYR 135 2 98.81 1 135 +A ALA 136 2 98.75 1 136 +A THR 137 2 98.62 1 137 +A GLY 138 2 98.25 1 138 +A THR 139 2 97.94 1 139 +A HIS 140 2 98.00 1 140 +A ALA 141 2 97.69 1 141 +A GLN 142 2 97.38 1 142 +A VAL 143 2 97.12 1 143 +A GLU 144 2 97.56 1 144 +A ASP 145 2 98.19 1 145 +A GLY 146 2 98.00 1 146 +A ARG 147 2 97.88 1 147 +A LEU 148 2 98.06 1 148 +A MET 149 2 98.19 1 149 +A GLU 150 2 98.44 1 150 +A GLN 151 2 97.94 1 151 +A LEU 152 2 98.12 1 152 +A LEU 153 2 98.44 1 153 +A SER 154 2 98.50 1 154 +A SER 155 2 98.25 1 155 +A VAL 156 2 98.44 1 156 +A GLY 157 2 98.50 1 157 +A PHE 158 2 98.62 1 158 +A CYS 159 2 98.69 1 159 +A THR 160 2 98.56 1 160 +A GLU 161 2 98.62 1 161 +A VAL 162 2 98.44 1 162 +A GLU 163 2 98.00 1 163 +A GLU 164 2 98.00 1 164 +A ASP 165 2 97.00 1 165 +A LEU 166 2 98.12 1 166 +A ILE 167 2 98.25 1 167 +A ASP 168 2 97.06 1 168 +A ALA 169 2 98.25 1 169 +A VAL 170 2 98.19 1 170 +A THR 171 2 97.56 1 171 +A GLY 172 2 98.12 1 172 +A LEU 173 2 98.69 1 173 +A SER 174 2 97.94 1 174 +A GLY 175 2 97.19 1 175 +A SER 176 2 98.00 1 176 +A GLY 177 2 98.38 1 177 +A PRO 178 2 98.50 1 178 +A ALA 179 2 98.56 1 179 +A TYR 180 2 98.75 1 180 +A ALA 181 2 98.75 1 181 +A PHE 182 2 98.62 1 182 +A THR 183 2 98.75 1 183 +A ALA 184 2 98.75 1 184 +A LEU 185 2 98.81 1 185 +A ASP 186 2 98.81 1 186 +A ALA 187 2 98.81 1 187 +A LEU 188 2 98.75 1 188 +A ALA 189 2 98.81 1 189 +A ASP 190 2 98.88 1 190 +A GLY 191 2 98.81 1 191 +A GLY 192 2 98.81 1 192 +A VAL 193 2 98.81 1 193 +A LYS 194 2 98.75 1 194 +A MET 195 2 98.75 1 195 +A GLY 196 2 98.56 1 196 +A LEU 197 2 98.62 1 197 +A PRO 198 2 98.62 1 198 +A ARG 199 2 98.62 1 199 +A ARG 200 2 98.69 1 200 +A LEU 201 2 98.75 1 201 +A ALA 202 2 98.75 1 202 +A VAL 203 2 98.81 1 203 +A ARG 204 2 98.69 1 204 +A LEU 205 2 98.81 1 205 +A GLY 206 2 98.69 1 206 +A ALA 207 2 98.81 1 207 +A GLN 208 2 98.81 1 208 +A ALA 209 2 98.75 1 209 +A LEU 210 2 98.75 1 210 +A LEU 211 2 98.75 1 211 +A GLY 212 2 98.62 1 212 +A ALA 213 2 98.75 1 213 +A ALA 214 2 98.62 1 214 +A LYS 215 2 98.62 1 215 +A MET 216 2 98.50 1 216 +A LEU 217 2 98.56 1 217 +A LEU 218 2 98.19 1 218 +A HIS 219 2 98.19 1 219 +A SER 220 2 97.06 1 220 +A GLU 221 2 97.56 1 221 +A GLN 222 2 98.00 1 222 +A HIS 223 2 98.31 1 223 +A PRO 224 2 98.25 1 224 +A GLY 225 2 98.50 1 225 +A GLN 226 2 98.38 1 226 +A LEU 227 2 98.19 1 227 +A LYS 228 2 98.44 1 228 +A ASP 229 2 98.12 1 229 +A ASN 230 2 97.75 1 230 +A VAL 231 2 97.94 1 231 +A SER 232 2 97.00 1 232 +A SER 233 2 95.56 1 233 +A PRO 234 2 95.19 1 234 +A GLY 235 2 95.69 1 235 +A GLY 236 2 97.62 1 236 +A ALA 237 2 98.12 1 237 +A THR 238 2 98.31 1 238 +A ILE 239 2 98.19 1 239 +A HIS 240 2 98.38 1 240 +A ALA 241 2 98.69 1 241 +A LEU 242 2 98.62 1 242 +A HIS 243 2 98.56 1 243 +A VAL 244 2 98.62 1 244 +A LEU 245 2 98.62 1 245 +A GLU 246 2 98.69 1 246 +A SER 247 2 98.44 1 247 +A GLY 248 2 98.00 1 248 +A GLY 249 2 98.38 1 249 +A PHE 250 2 98.69 1 250 +A ARG 251 2 98.62 1 251 +A SER 252 2 98.69 1 252 +A LEU 253 2 98.75 1 253 +A LEU 254 2 98.75 1 254 +A ILE 255 2 98.81 1 255 +A ASN 256 2 98.75 1 256 +A ALA 257 2 98.75 1 257 +A VAL 258 2 98.75 1 258 +A GLU 259 2 98.75 1 259 +A ALA 260 2 98.69 1 260 +A SER 261 2 98.25 1 261 +A CYS 262 2 98.12 1 262 +A ILE 263 2 97.88 1 263 +A ARG 264 2 95.88 1 264 +A THR 265 2 94.88 1 265 +A ARG 266 2 94.81 1 266 +A GLU 267 2 93.38 1 267 +A LEU 268 2 88.56 1 268 +A GLN 269 2 86.88 1 269 +A SER 270 2 81.81 1 270 +A MET 271 2 76.81 1 271 +A ALA 272 2 71.06 1 272 +A ASP 273 2 71.69 1 273 +A GLN 274 2 65.25 1 274 +A GLU 275 2 56.06 1 275 +A GLN 276 2 49.78 1 276 +A VAL 277 2 51.44 1 277 +A SER 278 2 48.00 1 278 +A PRO 279 2 49.28 1 279 +A ALA 280 2 51.88 1 280 +A ALA 281 2 52.72 1 281 +A ILE 282 2 51.69 1 282 +A LYS 283 2 48.84 1 283 +A LYS 284 2 48.03 1 284 +A THR 285 2 55.62 1 285 +A ILE 286 2 50.72 1 286 +A LEU 287 2 49.00 1 287 +A ASP 288 2 48.84 1 288 +A LYS 289 2 53.53 1 289 +A VAL 290 2 56.38 1 290 +A LYS 291 2 49.91 1 291 +A LEU 292 2 50.88 1 292 +A ASP 293 2 48.50 1 293 +A SER 294 2 38.75 1 294 +A PRO 295 2 40.56 1 295 +A ALA 296 2 36.69 1 296 +A GLY 297 2 35.78 1 297 +A THR 298 2 33.91 1 298 +A ALA 299 2 31.55 1 299 +A LEU 300 2 36.62 1 300 +A SER 301 2 33.16 1 301 +A PRO 302 2 42.66 1 302 +A SER 303 2 37.41 1 303 +A GLY 304 2 38.22 1 304 +A HIS 305 2 39.84 1 305 +A THR 306 2 38.53 1 306 +A LYS 307 2 39.25 1 307 +A LEU 308 2 38.62 1 308 +A LEU 309 2 40.81 1 309 +A PRO 310 2 41.81 1 310 +A ARG 311 2 41.94 1 311 +A SER 312 2 44.66 1 312 +A LEU 313 2 43.06 1 313 +A ALA 314 2 43.25 1 314 +A PRO 315 2 47.22 1 315 +A ALA 316 2 41.66 1 316 +A GLY 317 2 54.91 1 317 +A LYS 318 2 52.16 1 318 +A ASP 319 2 57.31 1 319 +# +_ma_software_group.group_id 1 +_ma_software_group.ordinal_id 1 +_ma_software_group.software_id 1 +# +_ma_target_entity.data_id 1 +_ma_target_entity.entity_id 1 +_ma_target_entity.origin "reference database" +# +_ma_target_entity_instance.asym_id A +_ma_target_entity_instance.details . +_ma_target_entity_instance.entity_id 1 +# +_ma_target_ref_db_details.db_accession P32322 +_ma_target_ref_db_details.db_code P5CR1_HUMAN +_ma_target_ref_db_details.db_name UNP +_ma_target_ref_db_details.gene_name PYCR1 +_ma_target_ref_db_details.ncbi_taxonomy_id 9606 +_ma_target_ref_db_details.organism_scientific "Homo sapiens" +_ma_target_ref_db_details.seq_db_align_begin 1 +_ma_target_ref_db_details.seq_db_align_end 319 +_ma_target_ref_db_details.seq_db_isoform ? +_ma_target_ref_db_details.seq_db_sequence_checksum 9E8C4DED0638EFC5 +_ma_target_ref_db_details.seq_db_sequence_version_date 2005-03-01 +_ma_target_ref_db_details.target_entity_id 1 +# +loop_ +_ma_template_details.ordinal_id +_ma_template_details.target_asym_id +_ma_template_details.template_auth_asym_id +_ma_template_details.template_data_id +_ma_template_details.template_entity_type +_ma_template_details.template_id +_ma_template_details.template_model_num +_ma_template_details.template_origin +_ma_template_details.template_trans_matrix_id +1 A C 2 polymer 1 1 "reference database" 1 +2 A B 2 polymer 2 1 "reference database" 1 +3 A D 2 polymer 3 1 "reference database" 1 +4 A A 2 polymer 4 1 "reference database" 1 +# +loop_ +_ma_template_ref_db_details.db_accession_code +_ma_template_ref_db_details.db_name +_ma_template_ref_db_details.template_id +6XP1 PDB 1 +2IZZ PDB 2 +6LHM PDB 3 +2GRA PDB 4 +# +_ma_template_trans_matrix.id 1 +_ma_template_trans_matrix.rot_matrix[1][1] 1.0 +_ma_template_trans_matrix.rot_matrix[1][2] 0.0 +_ma_template_trans_matrix.rot_matrix[1][3] 0.0 +_ma_template_trans_matrix.rot_matrix[2][1] 0.0 +_ma_template_trans_matrix.rot_matrix[2][2] 1.0 +_ma_template_trans_matrix.rot_matrix[2][3] 0.0 +_ma_template_trans_matrix.rot_matrix[3][1] 0.0 +_ma_template_trans_matrix.rot_matrix[3][2] 0.0 +_ma_template_trans_matrix.rot_matrix[3][3] 1.0 +_ma_template_trans_matrix.tr_vector[1] 0.0 +_ma_template_trans_matrix.tr_vector[2] 0.0 +_ma_template_trans_matrix.tr_vector[3] 0.0 +# +loop_ +_pdbx_audit_revision_details.data_content_type +_pdbx_audit_revision_details.description +_pdbx_audit_revision_details.ordinal +_pdbx_audit_revision_details.provider +_pdbx_audit_revision_details.revision_ordinal +_pdbx_audit_revision_details.type +"Structure model" ? 1 repository 1 "Initial release" +"Structure model" "Format fixes, new metadata, initial SwissProt release" 2 repository 2 Remediation +"Structure model" "Format fixes, new metadata, initial UniProt release" 3 repository 3 Remediation +"Structure model" "Improved prediction accuracy, small format fixes" 4 repository 4 Remediation +"Structure model" "Update to UniProt 2024_06, small format fixes" 5 repository 5 Release +"Structure model" "Update to UniProt 2025_03" 6 repository 6 Release +# +loop_ +_pdbx_audit_revision_history.data_content_type +_pdbx_audit_revision_history.major_revision +_pdbx_audit_revision_history.minor_revision +_pdbx_audit_revision_history.ordinal +_pdbx_audit_revision_history.revision_date +"Structure model" 1 0 1 2021-07-01 +"Structure model" 2 0 2 2021-12-09 +"Structure model" 3 0 3 2022-06-01 +"Structure model" 4 0 4 2022-09-30 +"Structure model" 5 0 5 2025-03-31 +"Structure model" 6 0 6 2025-08-01 +# +loop_ +_pdbx_data_usage.details +_pdbx_data_usage.id +_pdbx_data_usage.name +_pdbx_data_usage.type +_pdbx_data_usage.url +"Data in this file is available under a CC-BY-4.0 license." 1 CC-BY-4.0 license https://creativecommons.org/licenses/by/4.0/ +;ALPHAFOLD DATA, COPYRIGHT (2021) DEEPMIND TECHNOLOGIES LIMITED. THE INFORMATION +PROVIDED IS THEORETICAL MODELLING ONLY AND CAUTION SHOULD BE EXERCISED IN ITS +USE. IT IS PROVIDED "AS-IS" WITHOUT ANY WARRANTY OF ANY KIND, WHETHER EXPRESSED +OR IMPLIED. NO WARRANTY IS GIVEN THAT USE OF THE INFORMATION SHALL NOT INFRINGE +THE RIGHTS OF ANY THIRD PARTY. DISCLAIMER: THE INFORMATION IS NOT INTENDED TO BE +A SUBSTITUTE FOR PROFESSIONAL MEDICAL ADVICE, DIAGNOSIS, OR TREATMENT, AND DOES +NOT CONSTITUTE MEDICAL OR OTHER PROFESSIONAL ADVICE. IT IS AVAILABLE FOR +ACADEMIC AND COMMERCIAL PURPOSES, UNDER CC-BY 4.0 LICENCE. +; +2 ? disclaimer ? +# +_pdbx_database_status.entry_id AF-P32322-F1 +_pdbx_database_status.recvd_initial_deposition_date 2025-08-01 +_pdbx_database_status.status_code REL +# +loop_ +_pdbx_poly_seq_scheme.asym_id +_pdbx_poly_seq_scheme.auth_seq_num +_pdbx_poly_seq_scheme.entity_id +_pdbx_poly_seq_scheme.hetero +_pdbx_poly_seq_scheme.mon_id +_pdbx_poly_seq_scheme.pdb_ins_code +_pdbx_poly_seq_scheme.pdb_mon_id +_pdbx_poly_seq_scheme.pdb_seq_num +_pdbx_poly_seq_scheme.pdb_strand_id +_pdbx_poly_seq_scheme.seq_id +A 1 1 n MET . MET 1 A 1 +A 2 1 n SER . SER 2 A 2 +A 3 1 n VAL . VAL 3 A 3 +A 4 1 n GLY . GLY 4 A 4 +A 5 1 n PHE . PHE 5 A 5 +A 6 1 n ILE . ILE 6 A 6 +A 7 1 n GLY . GLY 7 A 7 +A 8 1 n ALA . ALA 8 A 8 +A 9 1 n GLY . GLY 9 A 9 +A 10 1 n GLN . GLN 10 A 10 +A 11 1 n LEU . LEU 11 A 11 +A 12 1 n ALA . ALA 12 A 12 +A 13 1 n PHE . PHE 13 A 13 +A 14 1 n ALA . ALA 14 A 14 +A 15 1 n LEU . LEU 15 A 15 +A 16 1 n ALA . ALA 16 A 16 +A 17 1 n LYS . LYS 17 A 17 +A 18 1 n GLY . GLY 18 A 18 +A 19 1 n PHE . PHE 19 A 19 +A 20 1 n THR . THR 20 A 20 +A 21 1 n ALA . ALA 21 A 21 +A 22 1 n ALA . ALA 22 A 22 +A 23 1 n GLY . GLY 23 A 23 +A 24 1 n VAL . VAL 24 A 24 +A 25 1 n LEU . LEU 25 A 25 +A 26 1 n ALA . ALA 26 A 26 +A 27 1 n ALA . ALA 27 A 27 +A 28 1 n HIS . HIS 28 A 28 +A 29 1 n LYS . LYS 29 A 29 +A 30 1 n ILE . ILE 30 A 30 +A 31 1 n MET . MET 31 A 31 +A 32 1 n ALA . ALA 32 A 32 +A 33 1 n SER . SER 33 A 33 +A 34 1 n SER . SER 34 A 34 +A 35 1 n PRO . PRO 35 A 35 +A 36 1 n ASP . ASP 36 A 36 +A 37 1 n MET . MET 37 A 37 +A 38 1 n ASP . ASP 38 A 38 +A 39 1 n LEU . LEU 39 A 39 +A 40 1 n ALA . ALA 40 A 40 +A 41 1 n THR . THR 41 A 41 +A 42 1 n VAL . VAL 42 A 42 +A 43 1 n SER . SER 43 A 43 +A 44 1 n ALA . ALA 44 A 44 +A 45 1 n LEU . LEU 45 A 45 +A 46 1 n ARG . ARG 46 A 46 +A 47 1 n LYS . LYS 47 A 47 +A 48 1 n MET . MET 48 A 48 +A 49 1 n GLY . GLY 49 A 49 +A 50 1 n VAL . VAL 50 A 50 +A 51 1 n LYS . LYS 51 A 51 +A 52 1 n LEU . LEU 52 A 52 +A 53 1 n THR . THR 53 A 53 +A 54 1 n PRO . PRO 54 A 54 +A 55 1 n HIS . HIS 55 A 55 +A 56 1 n ASN . ASN 56 A 56 +A 57 1 n LYS . LYS 57 A 57 +A 58 1 n GLU . GLU 58 A 58 +A 59 1 n THR . THR 59 A 59 +A 60 1 n VAL . VAL 60 A 60 +A 61 1 n GLN . GLN 61 A 61 +A 62 1 n HIS . HIS 62 A 62 +A 63 1 n SER . SER 63 A 63 +A 64 1 n ASP . ASP 64 A 64 +A 65 1 n VAL . VAL 65 A 65 +A 66 1 n LEU . LEU 66 A 66 +A 67 1 n PHE . PHE 67 A 67 +A 68 1 n LEU . LEU 68 A 68 +A 69 1 n ALA . ALA 69 A 69 +A 70 1 n VAL . VAL 70 A 70 +A 71 1 n LYS . LYS 71 A 71 +A 72 1 n PRO . PRO 72 A 72 +A 73 1 n HIS . HIS 73 A 73 +A 74 1 n ILE . ILE 74 A 74 +A 75 1 n ILE . ILE 75 A 75 +A 76 1 n PRO . PRO 76 A 76 +A 77 1 n PHE . PHE 77 A 77 +A 78 1 n ILE . ILE 78 A 78 +A 79 1 n LEU . LEU 79 A 79 +A 80 1 n ASP . ASP 80 A 80 +A 81 1 n GLU . GLU 81 A 81 +A 82 1 n ILE . ILE 82 A 82 +A 83 1 n GLY . GLY 83 A 83 +A 84 1 n ALA . ALA 84 A 84 +A 85 1 n ASP . ASP 85 A 85 +A 86 1 n ILE . ILE 86 A 86 +A 87 1 n GLU . GLU 87 A 87 +A 88 1 n ASP . ASP 88 A 88 +A 89 1 n ARG . ARG 89 A 89 +A 90 1 n HIS . HIS 90 A 90 +A 91 1 n ILE . ILE 91 A 91 +A 92 1 n VAL . VAL 92 A 92 +A 93 1 n VAL . VAL 93 A 93 +A 94 1 n SER . SER 94 A 94 +A 95 1 n CYS . CYS 95 A 95 +A 96 1 n ALA . ALA 96 A 96 +A 97 1 n ALA . ALA 97 A 97 +A 98 1 n GLY . GLY 98 A 98 +A 99 1 n VAL . VAL 99 A 99 +A 100 1 n THR . THR 100 A 100 +A 101 1 n ILE . ILE 101 A 101 +A 102 1 n SER . SER 102 A 102 +A 103 1 n SER . SER 103 A 103 +A 104 1 n ILE . ILE 104 A 104 +A 105 1 n GLU . GLU 105 A 105 +A 106 1 n LYS . LYS 106 A 106 +A 107 1 n LYS . LYS 107 A 107 +A 108 1 n LEU . LEU 108 A 108 +A 109 1 n SER . SER 109 A 109 +A 110 1 n ALA . ALA 110 A 110 +A 111 1 n PHE . PHE 111 A 111 +A 112 1 n ARG . ARG 112 A 112 +A 113 1 n PRO . PRO 113 A 113 +A 114 1 n ALA . ALA 114 A 114 +A 115 1 n PRO . PRO 115 A 115 +A 116 1 n ARG . ARG 116 A 116 +A 117 1 n VAL . VAL 117 A 117 +A 118 1 n ILE . ILE 118 A 118 +A 119 1 n ARG . ARG 119 A 119 +A 120 1 n CYS . CYS 120 A 120 +A 121 1 n MET . MET 121 A 121 +A 122 1 n THR . THR 122 A 122 +A 123 1 n ASN . ASN 123 A 123 +A 124 1 n THR . THR 124 A 124 +A 125 1 n PRO . PRO 125 A 125 +A 126 1 n VAL . VAL 126 A 126 +A 127 1 n VAL . VAL 127 A 127 +A 128 1 n VAL . VAL 128 A 128 +A 129 1 n ARG . ARG 129 A 129 +A 130 1 n GLU . GLU 130 A 130 +A 131 1 n GLY . GLY 131 A 131 +A 132 1 n ALA . ALA 132 A 132 +A 133 1 n THR . THR 133 A 133 +A 134 1 n VAL . VAL 134 A 134 +A 135 1 n TYR . TYR 135 A 135 +A 136 1 n ALA . ALA 136 A 136 +A 137 1 n THR . THR 137 A 137 +A 138 1 n GLY . GLY 138 A 138 +A 139 1 n THR . THR 139 A 139 +A 140 1 n HIS . HIS 140 A 140 +A 141 1 n ALA . ALA 141 A 141 +A 142 1 n GLN . GLN 142 A 142 +A 143 1 n VAL . VAL 143 A 143 +A 144 1 n GLU . GLU 144 A 144 +A 145 1 n ASP . ASP 145 A 145 +A 146 1 n GLY . GLY 146 A 146 +A 147 1 n ARG . ARG 147 A 147 +A 148 1 n LEU . LEU 148 A 148 +A 149 1 n MET . MET 149 A 149 +A 150 1 n GLU . GLU 150 A 150 +A 151 1 n GLN . GLN 151 A 151 +A 152 1 n LEU . LEU 152 A 152 +A 153 1 n LEU . LEU 153 A 153 +A 154 1 n SER . SER 154 A 154 +A 155 1 n SER . SER 155 A 155 +A 156 1 n VAL . VAL 156 A 156 +A 157 1 n GLY . GLY 157 A 157 +A 158 1 n PHE . PHE 158 A 158 +A 159 1 n CYS . CYS 159 A 159 +A 160 1 n THR . THR 160 A 160 +A 161 1 n GLU . GLU 161 A 161 +A 162 1 n VAL . VAL 162 A 162 +A 163 1 n GLU . GLU 163 A 163 +A 164 1 n GLU . GLU 164 A 164 +A 165 1 n ASP . ASP 165 A 165 +A 166 1 n LEU . LEU 166 A 166 +A 167 1 n ILE . ILE 167 A 167 +A 168 1 n ASP . ASP 168 A 168 +A 169 1 n ALA . ALA 169 A 169 +A 170 1 n VAL . VAL 170 A 170 +A 171 1 n THR . THR 171 A 171 +A 172 1 n GLY . GLY 172 A 172 +A 173 1 n LEU . LEU 173 A 173 +A 174 1 n SER . SER 174 A 174 +A 175 1 n GLY . GLY 175 A 175 +A 176 1 n SER . SER 176 A 176 +A 177 1 n GLY . GLY 177 A 177 +A 178 1 n PRO . PRO 178 A 178 +A 179 1 n ALA . ALA 179 A 179 +A 180 1 n TYR . TYR 180 A 180 +A 181 1 n ALA . ALA 181 A 181 +A 182 1 n PHE . PHE 182 A 182 +A 183 1 n THR . THR 183 A 183 +A 184 1 n ALA . ALA 184 A 184 +A 185 1 n LEU . LEU 185 A 185 +A 186 1 n ASP . ASP 186 A 186 +A 187 1 n ALA . ALA 187 A 187 +A 188 1 n LEU . LEU 188 A 188 +A 189 1 n ALA . ALA 189 A 189 +A 190 1 n ASP . ASP 190 A 190 +A 191 1 n GLY . GLY 191 A 191 +A 192 1 n GLY . GLY 192 A 192 +A 193 1 n VAL . VAL 193 A 193 +A 194 1 n LYS . LYS 194 A 194 +A 195 1 n MET . MET 195 A 195 +A 196 1 n GLY . GLY 196 A 196 +A 197 1 n LEU . LEU 197 A 197 +A 198 1 n PRO . PRO 198 A 198 +A 199 1 n ARG . ARG 199 A 199 +A 200 1 n ARG . ARG 200 A 200 +A 201 1 n LEU . LEU 201 A 201 +A 202 1 n ALA . ALA 202 A 202 +A 203 1 n VAL . VAL 203 A 203 +A 204 1 n ARG . ARG 204 A 204 +A 205 1 n LEU . LEU 205 A 205 +A 206 1 n GLY . GLY 206 A 206 +A 207 1 n ALA . ALA 207 A 207 +A 208 1 n GLN . GLN 208 A 208 +A 209 1 n ALA . ALA 209 A 209 +A 210 1 n LEU . LEU 210 A 210 +A 211 1 n LEU . LEU 211 A 211 +A 212 1 n GLY . GLY 212 A 212 +A 213 1 n ALA . ALA 213 A 213 +A 214 1 n ALA . ALA 214 A 214 +A 215 1 n LYS . LYS 215 A 215 +A 216 1 n MET . MET 216 A 216 +A 217 1 n LEU . LEU 217 A 217 +A 218 1 n LEU . LEU 218 A 218 +A 219 1 n HIS . HIS 219 A 219 +A 220 1 n SER . SER 220 A 220 +A 221 1 n GLU . GLU 221 A 221 +A 222 1 n GLN . GLN 222 A 222 +A 223 1 n HIS . HIS 223 A 223 +A 224 1 n PRO . PRO 224 A 224 +A 225 1 n GLY . GLY 225 A 225 +A 226 1 n GLN . GLN 226 A 226 +A 227 1 n LEU . LEU 227 A 227 +A 228 1 n LYS . LYS 228 A 228 +A 229 1 n ASP . ASP 229 A 229 +A 230 1 n ASN . ASN 230 A 230 +A 231 1 n VAL . VAL 231 A 231 +A 232 1 n SER . SER 232 A 232 +A 233 1 n SER . SER 233 A 233 +A 234 1 n PRO . PRO 234 A 234 +A 235 1 n GLY . GLY 235 A 235 +A 236 1 n GLY . GLY 236 A 236 +A 237 1 n ALA . ALA 237 A 237 +A 238 1 n THR . THR 238 A 238 +A 239 1 n ILE . ILE 239 A 239 +A 240 1 n HIS . HIS 240 A 240 +A 241 1 n ALA . ALA 241 A 241 +A 242 1 n LEU . LEU 242 A 242 +A 243 1 n HIS . HIS 243 A 243 +A 244 1 n VAL . VAL 244 A 244 +A 245 1 n LEU . LEU 245 A 245 +A 246 1 n GLU . GLU 246 A 246 +A 247 1 n SER . SER 247 A 247 +A 248 1 n GLY . GLY 248 A 248 +A 249 1 n GLY . GLY 249 A 249 +A 250 1 n PHE . PHE 250 A 250 +A 251 1 n ARG . ARG 251 A 251 +A 252 1 n SER . SER 252 A 252 +A 253 1 n LEU . LEU 253 A 253 +A 254 1 n LEU . LEU 254 A 254 +A 255 1 n ILE . ILE 255 A 255 +A 256 1 n ASN . ASN 256 A 256 +A 257 1 n ALA . ALA 257 A 257 +A 258 1 n VAL . VAL 258 A 258 +A 259 1 n GLU . GLU 259 A 259 +A 260 1 n ALA . ALA 260 A 260 +A 261 1 n SER . SER 261 A 261 +A 262 1 n CYS . CYS 262 A 262 +A 263 1 n ILE . ILE 263 A 263 +A 264 1 n ARG . ARG 264 A 264 +A 265 1 n THR . THR 265 A 265 +A 266 1 n ARG . ARG 266 A 266 +A 267 1 n GLU . GLU 267 A 267 +A 268 1 n LEU . LEU 268 A 268 +A 269 1 n GLN . GLN 269 A 269 +A 270 1 n SER . SER 270 A 270 +A 271 1 n MET . MET 271 A 271 +A 272 1 n ALA . ALA 272 A 272 +A 273 1 n ASP . ASP 273 A 273 +A 274 1 n GLN . GLN 274 A 274 +A 275 1 n GLU . GLU 275 A 275 +A 276 1 n GLN . GLN 276 A 276 +A 277 1 n VAL . VAL 277 A 277 +A 278 1 n SER . SER 278 A 278 +A 279 1 n PRO . PRO 279 A 279 +A 280 1 n ALA . ALA 280 A 280 +A 281 1 n ALA . ALA 281 A 281 +A 282 1 n ILE . ILE 282 A 282 +A 283 1 n LYS . LYS 283 A 283 +A 284 1 n LYS . LYS 284 A 284 +A 285 1 n THR . THR 285 A 285 +A 286 1 n ILE . ILE 286 A 286 +A 287 1 n LEU . LEU 287 A 287 +A 288 1 n ASP . ASP 288 A 288 +A 289 1 n LYS . LYS 289 A 289 +A 290 1 n VAL . VAL 290 A 290 +A 291 1 n LYS . LYS 291 A 291 +A 292 1 n LEU . LEU 292 A 292 +A 293 1 n ASP . ASP 293 A 293 +A 294 1 n SER . SER 294 A 294 +A 295 1 n PRO . PRO 295 A 295 +A 296 1 n ALA . ALA 296 A 296 +A 297 1 n GLY . GLY 297 A 297 +A 298 1 n THR . THR 298 A 298 +A 299 1 n ALA . ALA 299 A 299 +A 300 1 n LEU . LEU 300 A 300 +A 301 1 n SER . SER 301 A 301 +A 302 1 n PRO . PRO 302 A 302 +A 303 1 n SER . SER 303 A 303 +A 304 1 n GLY . GLY 304 A 304 +A 305 1 n HIS . HIS 305 A 305 +A 306 1 n THR . THR 306 A 306 +A 307 1 n LYS . LYS 307 A 307 +A 308 1 n LEU . LEU 308 A 308 +A 309 1 n LEU . LEU 309 A 309 +A 310 1 n PRO . PRO 310 A 310 +A 311 1 n ARG . ARG 311 A 311 +A 312 1 n SER . SER 312 A 312 +A 313 1 n LEU . LEU 313 A 313 +A 314 1 n ALA . ALA 314 A 314 +A 315 1 n PRO . PRO 315 A 315 +A 316 1 n ALA . ALA 316 A 316 +A 317 1 n GLY . GLY 317 A 317 +A 318 1 n LYS . LYS 318 A 318 +A 319 1 n ASP . ASP 319 A 319 +# +loop_ +_software.classification +_software.date +_software.description +_software.name +_software.pdbx_ordinal +_software.type +_software.version +other ? "Structure prediction" AlphaFold 1 package v2.0 +other ? "Secondary structure" dssp 2 library 4 +# +_struct_asym.entity_id 1 +_struct_asym.id A +# +loop_ +_struct_conf.beg_auth_asym_id +_struct_conf.beg_auth_comp_id +_struct_conf.beg_auth_seq_id +_struct_conf.beg_label_asym_id +_struct_conf.beg_label_comp_id +_struct_conf.beg_label_seq_id +_struct_conf.conf_type_id +_struct_conf.end_auth_asym_id +_struct_conf.end_auth_comp_id +_struct_conf.end_auth_seq_id +_struct_conf.end_label_asym_id +_struct_conf.end_label_comp_id +_struct_conf.end_label_seq_id +_struct_conf.id +_struct_conf.pdbx_beg_PDB_ins_code +_struct_conf.pdbx_end_PDB_ins_code +A VAL 3 A VAL 3 STRN A ILE 6 A ILE 6 STRN1 ? ? +A GLY 9 A GLY 9 BEND A GLY 9 A GLY 9 BEND1 ? ? +A GLN 10 A GLN 10 HELX_RH_AL_P A ALA 21 A ALA 21 HELX_RH_AL_P1 ? ? +A ALA 22 A ALA 22 TURN_TY1_P A GLY 23 A GLY 23 TURN_TY1_P1 ? ? +A VAL 24 A VAL 24 BEND A LEU 25 A LEU 25 BEND2 ? ? +A ALA 27 A ALA 27 HELX_RH_3T_P A LYS 29 A LYS 29 HELX_RH_3T_P1 ? ? +A ILE 30 A ILE 30 STRN A SER 33 A SER 33 STRN2 ? ? +A PRO 35 A PRO 35 BEND A PRO 35 A PRO 35 BEND3 ? ? +A LEU 39 A LEU 39 BEND A LEU 39 A LEU 39 BEND4 ? ? +A ALA 40 A ALA 40 HELX_RH_AL_P A MET 48 A MET 48 HELX_RH_AL_P2 ? ? +A GLY 49 A GLY 49 TURN_TY1_P A GLY 49 A GLY 49 TURN_TY1_P2 ? ? +A LYS 51 A LYS 51 STRN A THR 53 A THR 53 STRN3 ? ? +A PRO 54 A PRO 54 BEND A PRO 54 A PRO 54 BEND5 ? ? +A ASN 56 A ASN 56 HELX_RH_AL_P A HIS 62 A HIS 62 HELX_RH_AL_P3 ? ? +A ASP 64 A ASP 64 BEND A ASP 64 A ASP 64 BEND6 ? ? +A VAL 65 A VAL 65 STRN A LEU 68 A LEU 68 STRN4 ? ? +A VAL 70 A VAL 70 BEND A VAL 70 A VAL 70 BEND7 ? ? +A PRO 72 A PRO 72 HELX_RH_3T_P A ILE 74 A ILE 74 HELX_RH_3T_P2 ? ? +A ILE 75 A ILE 75 HELX_RH_AL_P A ILE 82 A ILE 82 HELX_RH_AL_P4 ? ? +A GLY 83 A GLY 83 HELX_RH_3T_P A ASP 85 A ASP 85 HELX_RH_3T_P3 ? ? +A ASP 88 A ASP 88 TURN_TY1_P A ARG 89 A ARG 89 TURN_TY1_P3 ? ? +A ILE 91 A ILE 91 STRN A SER 94 A SER 94 STRN5 ? ? +A ALA 97 A ALA 97 TURN_TY1_P A GLY 98 A GLY 98 TURN_TY1_P4 ? ? +A ILE 101 A ILE 101 HELX_RH_AL_P A LEU 108 A LEU 108 HELX_RH_AL_P5 ? ? +A SER 109 A SER 109 TURN_TY1_P A PHE 111 A PHE 111 TURN_TY1_P5 ? ? +A ARG 112 A ARG 112 BEND A ALA 114 A ALA 114 BEND8 ? ? +A VAL 117 A VAL 117 STRN A MET 121 A MET 121 STRN6 ? ? +A THR 124 A THR 124 HELX_RH_3T_P A VAL 128 A VAL 128 HELX_RH_3T_P4 ? ? +A ARG 129 A ARG 129 TURN_TY1_P A ARG 129 A ARG 129 TURN_TY1_P6 ? ? +A GLY 131 A GLY 131 STRN A THR 137 A THR 137 STRN7 ? ? +A THR 139 A THR 139 TURN_TY1_P A HIS 140 A HIS 140 TURN_TY1_P7 ? ? +A VAL 143 A VAL 143 HELX_RH_AL_P A SER 154 A SER 154 HELX_RH_AL_P6 ? ? +A SER 155 A SER 155 TURN_TY1_P A VAL 156 A VAL 156 TURN_TY1_P8 ? ? +A GLY 157 A GLY 157 STRN A GLU 161 A GLU 161 STRN8 ? ? +A GLU 164 A GLU 164 HELX_RH_3T_P A LEU 166 A LEU 166 HELX_RH_3T_P5 ? ? +A ILE 167 A ILE 167 HELX_RH_AL_P A VAL 170 A VAL 170 HELX_RH_AL_P7 ? ? +A THR 171 A THR 171 HELX_RH_PI_P A GLY 175 A GLY 175 HELX_RH_PI_P1 ? ? +A SER 176 A SER 176 TURN_TY1_P A SER 176 A SER 176 TURN_TY1_P9 ? ? +A GLY 177 A GLY 177 HELX_RH_AL_P A LYS 194 A LYS 194 HELX_RH_AL_P8 ? ? +A MET 195 A MET 195 TURN_TY1_P A GLY 196 A GLY 196 TURN_TY1_P10 ? ? +A ARG 199 A ARG 199 HELX_RH_AL_P A LEU 218 A LEU 218 HELX_RH_AL_P9 ? ? +A HIS 219 A HIS 219 TURN_TY1_P A HIS 219 A HIS 219 TURN_TY1_P11 ? ? +A GLN 222 A GLN 222 BEND A GLN 222 A GLN 222 BEND9 ? ? +A PRO 224 A PRO 224 HELX_RH_AL_P A VAL 231 A VAL 231 HELX_RH_AL_P10 ? ? +A PRO 234 A PRO 234 TURN_TY1_P A GLY 235 A GLY 235 TURN_TY1_P12 ? ? +A ALA 237 A ALA 237 HELX_RH_AL_P A SER 247 A SER 247 HELX_RH_AL_P11 ? ? +A GLY 248 A GLY 248 TURN_TY1_P A GLY 249 A GLY 249 TURN_TY1_P13 ? ? +A PHE 250 A PHE 250 HELX_RH_AL_P A ASP 273 A ASP 273 HELX_RH_AL_P12 ? ? +A GLN 274 A GLN 274 TURN_TY1_P A GLN 274 A GLN 274 TURN_TY1_P14 ? ? +A GLU 275 A GLU 275 BEND A GLU 275 A GLU 275 BEND10 ? ? +A PRO 279 A PRO 279 HELX_RH_AL_P A LEU 292 A LEU 292 HELX_RH_AL_P13 ? ? +A ASP 293 A ASP 293 BEND A SER 294 A SER 294 BEND11 ? ? +# +loop_ +_struct_conf_type.criteria +_struct_conf_type.id +DSSP STRN +DSSP BEND +DSSP HELX_RH_AL_P +DSSP TURN_TY1_P +DSSP HELX_RH_3T_P +DSSP HELX_RH_PI_P +# +_struct_ref.db_code P5CR1_HUMAN +_struct_ref.db_name UNP +_struct_ref.entity_id 1 +_struct_ref.id 1 +_struct_ref.pdbx_align_begin 1 +_struct_ref.pdbx_align_end 319 +_struct_ref.pdbx_db_accession P32322 +_struct_ref.pdbx_db_isoform ? +_struct_ref.pdbx_seq_one_letter_code +;MSVGFIGAGQLAFALAKGFTAAGVLAAHKIMASSPDMDLATVSALRKMGVKLTPHNKETVQHSDVLFLAVKPHIIPFILD +EIGADIEDRHIVVSCAAGVTISSIEKKLSAFRPAPRVIRCMTNTPVVVREGATVYATGTHAQVEDGRLMEQLLSSVGFCT +EVEEDLIDAVTGLSGSGPAYAFTALDALADGGVKMGLPRRLAVRLGAQALLGAAKMLLHSEQHPGQLKDNVSSPGGATIH +ALHVLESGGFRSLLINAVEASCIRTRELQSMADQEQVSPAAIKKTILDKVKLDSPAGTALSPSGHTKLLPRSLAPAGKD +; +# +_struct_ref_seq.align_id 1 +_struct_ref_seq.db_align_beg 1 +_struct_ref_seq.db_align_end 319 +_struct_ref_seq.pdbx_PDB_id_code AF-P32322-F1 +_struct_ref_seq.pdbx_auth_seq_align_beg 1 +_struct_ref_seq.pdbx_auth_seq_align_end 319 +_struct_ref_seq.pdbx_db_accession P32322 +_struct_ref_seq.pdbx_db_align_beg_ins_code ? +_struct_ref_seq.pdbx_db_align_end_ins_code ? +_struct_ref_seq.pdbx_seq_align_beg_ins_code ? +_struct_ref_seq.pdbx_seq_align_end_ins_code ? +_struct_ref_seq.pdbx_strand_id A +_struct_ref_seq.ref_id 1 +_struct_ref_seq.seq_align_beg 1 +_struct_ref_seq.seq_align_end 319 +# +loop_ +_atom_site.group_PDB +_atom_site.id +_atom_site.type_symbol +_atom_site.label_atom_id +_atom_site.label_alt_id +_atom_site.label_comp_id +_atom_site.label_asym_id +_atom_site.label_entity_id +_atom_site.label_seq_id +_atom_site.pdbx_PDB_ins_code +_atom_site.Cartn_x +_atom_site.Cartn_y +_atom_site.Cartn_z +_atom_site.occupancy +_atom_site.B_iso_or_equiv +_atom_site.pdbx_formal_charge +_atom_site.auth_seq_id +_atom_site.auth_comp_id +_atom_site.auth_asym_id +_atom_site.auth_atom_id +_atom_site.pdbx_PDB_model_num +_atom_site.pdbx_sifts_xref_db_acc +_atom_site.pdbx_sifts_xref_db_name +_atom_site.pdbx_sifts_xref_db_num +_atom_site.pdbx_sifts_xref_db_res +ATOM 1 N N . MET A 1 1 ? -21.705 16.193 7.902 1.00 93.44 ? 1 MET A N 1 P32322 UNP 1 M +ATOM 2 C CA . MET A 1 1 ? -20.792 15.047 7.830 1.00 93.44 ? 1 MET A CA 1 P32322 UNP 1 M +ATOM 3 C C . MET A 1 1 ? -19.432 15.423 8.397 1.00 93.44 ? 1 MET A C 1 P32322 UNP 1 M +ATOM 4 C CB . MET A 1 1 ? -20.690 14.476 6.416 1.00 93.44 ? 1 MET A CB 1 P32322 UNP 1 M +ATOM 5 O O . MET A 1 1 ? -18.733 16.255 7.823 1.00 93.44 ? 1 MET A O 1 P32322 UNP 1 M +ATOM 6 C CG . MET A 1 1 ? -20.038 13.093 6.484 1.00 93.44 ? 1 MET A CG 1 P32322 UNP 1 M +ATOM 7 S SD . MET A 1 1 ? -20.045 12.207 4.913 1.00 93.44 ? 1 MET A SD 1 P32322 UNP 1 M +ATOM 8 C CE . MET A 1 1 ? -18.765 13.091 3.989 1.00 93.44 ? 1 MET A CE 1 P32322 UNP 1 M +ATOM 9 N N . SER A 1 2 ? -19.092 14.839 9.537 1.00 97.81 ? 2 SER A N 1 P32322 UNP 2 S +ATOM 10 C CA . SER A 1 2 ? -17.743 14.761 10.096 1.00 97.81 ? 2 SER A CA 1 P32322 UNP 2 S +ATOM 11 C C . SER A 1 2 ? -17.154 13.382 9.797 1.00 97.81 ? 2 SER A C 1 P32322 UNP 2 S +ATOM 12 C CB . SER A 1 2 ? -17.794 14.967 11.607 1.00 97.81 ? 2 SER A CB 1 P32322 UNP 2 S +ATOM 13 O O . SER A 1 2 ? -17.881 12.389 9.796 1.00 97.81 ? 2 SER A O 1 P32322 UNP 2 S +ATOM 14 O OG . SER A 1 2 ? -18.188 16.282 11.963 1.00 97.81 ? 2 SER A OG 1 P32322 UNP 2 S +ATOM 15 N N . VAL A 1 3 ? -15.845 13.313 9.554 1.00 98.56 ? 3 VAL A N 1 P32322 UNP 3 V +ATOM 16 C CA . VAL A 1 3 ? -15.157 12.054 9.228 1.00 98.56 ? 3 VAL A CA 1 P32322 UNP 3 V +ATOM 17 C C . VAL A 1 3 ? -14.085 11.750 10.265 1.00 98.56 ? 3 VAL A C 1 P32322 UNP 3 V +ATOM 18 C CB . VAL A 1 3 ? -14.596 12.064 7.794 1.00 98.56 ? 3 VAL A CB 1 P32322 UNP 3 V +ATOM 19 O O . VAL A 1 3 ? -13.291 12.623 10.619 1.00 98.56 ? 3 VAL A O 1 P32322 UNP 3 V +ATOM 20 C CG1 . VAL A 1 3 ? -13.793 10.799 7.474 1.00 98.56 ? 3 VAL A CG1 1 P32322 UNP 3 V +ATOM 21 C CG2 . VAL A 1 3 ? -15.754 12.149 6.790 1.00 98.56 ? 3 VAL A CG2 1 P32322 UNP 3 V +ATOM 22 N N . GLY A 1 4 ? -14.057 10.504 10.721 1.00 98.75 ? 4 GLY A N 1 P32322 UNP 4 G +ATOM 23 C CA . GLY A 1 4 ? -13.097 9.986 11.685 1.00 98.75 ? 4 GLY A CA 1 P32322 UNP 4 G +ATOM 24 C C . GLY A 1 4 ? -12.185 8.945 11.069 1.00 98.75 ? 4 GLY A C 1 P32322 UNP 4 G +ATOM 25 O O . GLY A 1 4 ? -12.630 8.147 10.251 1.00 98.75 ? 4 GLY A O 1 P32322 UNP 4 G +ATOM 26 N N . PHE A 1 5 ? -10.931 8.911 11.501 1.00 98.75 ? 5 PHE A N 1 P32322 UNP 5 F +ATOM 27 C CA . PHE A 1 5 ? -9.992 7.835 11.206 1.00 98.75 ? 5 PHE A CA 1 P32322 UNP 5 F +ATOM 28 C C . PHE A 1 5 ? -9.469 7.250 12.512 1.00 98.75 ? 5 PHE A C 1 P32322 UNP 5 F +ATOM 29 C CB . PHE A 1 5 ? -8.835 8.357 10.346 1.00 98.75 ? 5 PHE A CB 1 P32322 UNP 5 F +ATOM 30 O O . PHE A 1 5 ? -8.746 7.925 13.242 1.00 98.75 ? 5 PHE A O 1 P32322 UNP 5 F +ATOM 31 C CG . PHE A 1 5 ? -9.236 8.807 8.959 1.00 98.75 ? 5 PHE A CG 1 P32322 UNP 5 F +ATOM 32 C CD1 . PHE A 1 5 ? -9.263 7.875 7.906 1.00 98.75 ? 5 PHE A CD1 1 P32322 UNP 5 F +ATOM 33 C CD2 . PHE A 1 5 ? -9.598 10.146 8.720 1.00 98.75 ? 5 PHE A CD2 1 P32322 UNP 5 F +ATOM 34 C CE1 . PHE A 1 5 ? -9.661 8.277 6.621 1.00 98.75 ? 5 PHE A CE1 1 P32322 UNP 5 F +ATOM 35 C CE2 . PHE A 1 5 ? -9.976 10.549 7.427 1.00 98.75 ? 5 PHE A CE2 1 P32322 UNP 5 F +ATOM 36 C CZ . PHE A 1 5 ? -10.005 9.616 6.379 1.00 98.75 ? 5 PHE A CZ 1 P32322 UNP 5 F +ATOM 37 N N . ILE A 1 6 ? -9.776 5.985 12.788 1.00 98.56 ? 6 ILE A N 1 P32322 UNP 6 I +ATOM 38 C CA . ILE A 1 6 ? -9.029 5.232 13.793 1.00 98.56 ? 6 ILE A CA 1 P32322 UNP 6 I +ATOM 39 C C . ILE A 1 6 ? -7.776 4.689 13.115 1.00 98.56 ? 6 ILE A C 1 P32322 UNP 6 I +ATOM 40 C CB . ILE A 1 6 ? -9.886 4.164 14.496 1.00 98.56 ? 6 ILE A CB 1 P32322 UNP 6 I +ATOM 41 O O . ILE A 1 6 ? -7.855 3.857 12.210 1.00 98.56 ? 6 ILE A O 1 P32322 UNP 6 I +ATOM 42 C CG1 . ILE A 1 6 ? -11.003 4.869 15.295 1.00 98.56 ? 6 ILE A CG1 1 P32322 UNP 6 I +ATOM 43 C CG2 . ILE A 1 6 ? -8.973 3.345 15.428 1.00 98.56 ? 6 ILE A CG2 1 P32322 UNP 6 I +ATOM 44 C CD1 . ILE A 1 6 ? -12.014 3.926 15.951 1.00 98.56 ? 6 ILE A CD1 1 P32322 UNP 6 I +ATOM 45 N N . GLY A 1 7 ? -6.621 5.198 13.538 1.00 97.38 ? 7 GLY A N 1 P32322 UNP 7 G +ATOM 46 C CA . GLY A 1 7 ? -5.332 5.015 12.882 1.00 97.38 ? 7 GLY A CA 1 P32322 UNP 7 G +ATOM 47 C C . GLY A 1 7 ? -4.926 6.245 12.064 1.00 97.38 ? 7 GLY A C 1 P32322 UNP 7 G +ATOM 48 O O . GLY A 1 7 ? -5.655 6.700 11.189 1.00 97.38 ? 7 GLY A O 1 P32322 UNP 7 G +ATOM 49 N N . ALA A 1 8 ? -3.710 6.746 12.296 1.00 97.06 ? 8 ALA A N 1 P32322 UNP 8 A +ATOM 50 C CA . ALA A 1 8 ? -3.144 7.911 11.603 1.00 97.06 ? 8 ALA A CA 1 P32322 UNP 8 A +ATOM 51 C C . ALA A 1 8 ? -1.964 7.540 10.682 1.00 97.06 ? 8 ALA A C 1 P32322 UNP 8 A +ATOM 52 C CB . ALA A 1 8 ? -2.798 8.986 12.637 1.00 97.06 ? 8 ALA A CB 1 P32322 UNP 8 A +ATOM 53 O O . ALA A 1 8 ? -0.976 8.269 10.583 1.00 97.06 ? 8 ALA A O 1 P32322 UNP 8 A +ATOM 54 N N . GLY A 1 9 ? -2.027 6.367 10.044 1.00 95.69 ? 9 GLY A N 1 P32322 UNP 9 G +ATOM 55 C CA . GLY A 1 9 ? -0.985 5.863 9.145 1.00 95.69 ? 9 GLY A CA 1 P32322 UNP 9 G +ATOM 56 C C . GLY A 1 9 ? -0.991 6.503 7.750 1.00 95.69 ? 9 GLY A C 1 P32322 UNP 9 G +ATOM 57 O O . GLY A 1 9 ? -1.632 7.524 7.502 1.00 95.69 ? 9 GLY A O 1 P32322 UNP 9 G +ATOM 58 N N . GLN A 1 10 ? -0.289 5.864 6.807 1.00 95.94 ? 10 GLN A N 1 P32322 UNP 10 Q +ATOM 59 C CA . GLN A 1 10 ? -0.189 6.327 5.414 1.00 95.94 ? 10 GLN A CA 1 P32322 UNP 10 Q +ATOM 60 C C . GLN A 1 10 ? -1.557 6.439 4.732 1.00 95.94 ? 10 GLN A C 1 P32322 UNP 10 Q +ATOM 61 C CB . GLN A 1 10 ? 0.706 5.369 4.606 1.00 95.94 ? 10 GLN A CB 1 P32322 UNP 10 Q +ATOM 62 O O . GLN A 1 10 ? -1.808 7.418 4.037 1.00 95.94 ? 10 GLN A O 1 P32322 UNP 10 Q +ATOM 63 C CG . GLN A 1 10 ? 2.182 5.406 5.035 1.00 95.94 ? 10 GLN A CG 1 P32322 UNP 10 Q +ATOM 64 C CD . GLN A 1 10 ? 2.848 6.758 4.784 1.00 95.94 ? 10 GLN A CD 1 P32322 UNP 10 Q +ATOM 65 N NE2 . GLN A 1 10 ? 3.828 7.133 5.574 1.00 95.94 ? 10 GLN A NE2 1 P32322 UNP 10 Q +ATOM 66 O OE1 . GLN A 1 10 ? 2.507 7.505 3.885 1.00 95.94 ? 10 GLN A OE1 1 P32322 UNP 10 Q +ATOM 67 N N . LEU A 1 11 ? -2.449 5.467 4.958 1.00 96.19 ? 11 LEU A N 1 P32322 UNP 11 L +ATOM 68 C CA . LEU A 1 11 ? -3.770 5.457 4.333 1.00 96.19 ? 11 LEU A CA 1 P32322 UNP 11 L +ATOM 69 C C . LEU A 1 11 ? -4.673 6.583 4.858 1.00 96.19 ? 11 LEU A C 1 P32322 UNP 11 L +ATOM 70 C CB . LEU A 1 11 ? -4.410 4.069 4.515 1.00 96.19 ? 11 LEU A CB 1 P32322 UNP 11 L +ATOM 71 O O . LEU A 1 11 ? -5.265 7.305 4.062 1.00 96.19 ? 11 LEU A O 1 P32322 UNP 11 L +ATOM 72 C CG . LEU A 1 11 ? -5.803 3.968 3.873 1.00 96.19 ? 11 LEU A CG 1 P32322 UNP 11 L +ATOM 73 C CD1 . LEU A 1 11 ? -5.770 4.222 2.369 1.00 96.19 ? 11 LEU A CD1 1 P32322 UNP 11 L +ATOM 74 C CD2 . LEU A 1 11 ? -6.396 2.585 4.111 1.00 96.19 ? 11 LEU A CD2 1 P32322 UNP 11 L +ATOM 75 N N . ALA A 1 12 ? -4.728 6.777 6.179 1.00 97.62 ? 12 ALA A N 1 P32322 UNP 12 A +ATOM 76 C CA . ALA A 1 12 ? -5.493 7.867 6.784 1.00 97.62 ? 12 ALA A CA 1 P32322 UNP 12 A +ATOM 77 C C . ALA A 1 12 ? -4.994 9.238 6.307 1.00 97.62 ? 12 ALA A C 1 P32322 UNP 12 A +ATOM 78 C CB . ALA A 1 12 ? -5.395 7.740 8.304 1.00 97.62 ? 12 ALA A CB 1 P32322 UNP 12 A +ATOM 79 O O . ALA A 1 12 ? -5.789 10.092 5.920 1.00 97.62 ? 12 ALA A O 1 P32322 UNP 12 A +ATOM 80 N N . PHE A 1 13 ? -3.670 9.428 6.246 1.00 97.81 ? 13 PHE A N 1 P32322 UNP 13 F +ATOM 81 C CA . PHE A 1 13 ? -3.079 10.630 5.661 1.00 97.81 ? 13 PHE A CA 1 P32322 UNP 13 F +ATOM 82 C C . PHE A 1 13 ? -3.456 10.811 4.183 1.00 97.81 ? 13 PHE A C 1 P32322 UNP 13 F +ATOM 83 C CB . PHE A 1 13 ? -1.558 10.599 5.848 1.00 97.81 ? 13 PHE A CB 1 P32322 UNP 13 F +ATOM 84 O O . PHE A 1 13 ? -3.833 11.914 3.784 1.00 97.81 ? 13 PHE A O 1 P32322 UNP 13 F +ATOM 85 C CG . PHE A 1 13 ? -0.849 11.690 5.070 1.00 97.81 ? 13 PHE A CG 1 P32322 UNP 13 F +ATOM 86 C CD1 . PHE A 1 13 ? -0.145 11.374 3.893 1.00 97.81 ? 13 PHE A CD1 1 P32322 UNP 13 F +ATOM 87 C CD2 . PHE A 1 13 ? -0.961 13.032 5.478 1.00 97.81 ? 13 PHE A CD2 1 P32322 UNP 13 F +ATOM 88 C CE1 . PHE A 1 13 ? 0.465 12.394 3.140 1.00 97.81 ? 13 PHE A CE1 1 P32322 UNP 13 F +ATOM 89 C CE2 . PHE A 1 13 ? -0.360 14.052 4.721 1.00 97.81 ? 13 PHE A CE2 1 P32322 UNP 13 F +ATOM 90 C CZ . PHE A 1 13 ? 0.364 13.733 3.559 1.00 97.81 ? 13 PHE A CZ 1 P32322 UNP 13 F +ATOM 91 N N . ALA A 1 14 ? -3.372 9.750 3.377 1.00 97.94 ? 14 ALA A N 1 P32322 UNP 14 A +ATOM 92 C CA . ALA A 1 14 ? -3.687 9.799 1.953 1.00 97.94 ? 14 ALA A CA 1 P32322 UNP 14 A +ATOM 93 C C . ALA A 1 14 ? -5.155 10.182 1.706 1.00 97.94 ? 14 ALA A C 1 P32322 UNP 14 A +ATOM 94 C CB . ALA A 1 14 ? -3.319 8.451 1.320 1.00 97.94 ? 14 ALA A CB 1 P32322 UNP 14 A +ATOM 95 O O . ALA A 1 14 ? -5.412 11.082 0.907 1.00 97.94 ? 14 ALA A O 1 P32322 UNP 14 A +ATOM 96 N N . LEU A 1 15 ? -6.097 9.566 2.428 1.00 98.31 ? 15 LEU A N 1 P32322 UNP 15 L +ATOM 97 C CA . LEU A 1 15 ? -7.527 9.869 2.332 1.00 98.31 ? 15 LEU A CA 1 P32322 UNP 15 L +ATOM 98 C C . LEU A 1 15 ? -7.845 11.279 2.836 1.00 98.31 ? 15 LEU A C 1 P32322 UNP 15 L +ATOM 99 C CB . LEU A 1 15 ? -8.336 8.815 3.110 1.00 98.31 ? 15 LEU A CB 1 P32322 UNP 15 L +ATOM 100 O O . LEU A 1 15 ? -8.490 12.042 2.122 1.00 98.31 ? 15 LEU A O 1 P32322 UNP 15 L +ATOM 101 C CG . LEU A 1 15 ? -8.435 7.451 2.404 1.00 98.31 ? 15 LEU A CG 1 P32322 UNP 15 L +ATOM 102 C CD1 . LEU A 1 15 ? -9.028 6.412 3.356 1.00 98.31 ? 15 LEU A CD1 1 P32322 UNP 15 L +ATOM 103 C CD2 . LEU A 1 15 ? -9.327 7.514 1.163 1.00 98.31 ? 15 LEU A CD2 1 P32322 UNP 15 L +ATOM 104 N N . ALA A 1 16 ? -7.339 11.677 4.008 1.00 98.31 ? 16 ALA A N 1 P32322 UNP 16 A +ATOM 105 C CA . ALA A 1 16 ? -7.549 13.030 4.526 1.00 98.31 ? 16 ALA A CA 1 P32322 UNP 16 A +ATOM 106 C C . ALA A 1 16 ? -7.015 14.101 3.558 1.00 98.31 ? 16 ALA A C 1 P32322 UNP 16 A +ATOM 107 C CB . ALA A 1 16 ? -6.888 13.144 5.903 1.00 98.31 ? 16 ALA A CB 1 P32322 UNP 16 A +ATOM 108 O O . ALA A 1 16 ? -7.688 15.101 3.295 1.00 98.31 ? 16 ALA A O 1 P32322 UNP 16 A +ATOM 109 N N . LYS A 1 17 ? -5.836 13.871 2.965 1.00 98.00 ? 17 LYS A N 1 P32322 UNP 17 K +ATOM 110 C CA . LYS A 1 17 ? -5.273 14.756 1.938 1.00 98.00 ? 17 LYS A CA 1 P32322 UNP 17 K +ATOM 111 C C . LYS A 1 17 ? -6.117 14.771 0.665 1.00 98.00 ? 17 LYS A C 1 P32322 UNP 17 K +ATOM 112 C CB . LYS A 1 17 ? -3.827 14.346 1.636 1.00 98.00 ? 17 LYS A CB 1 P32322 UNP 17 K +ATOM 113 O O . LYS A 1 17 ? -6.351 15.842 0.116 1.00 98.00 ? 17 LYS A O 1 P32322 UNP 17 K +ATOM 114 C CG . LYS A 1 17 ? -3.162 15.378 0.718 1.00 98.00 ? 17 LYS A CG 1 P32322 UNP 17 K +ATOM 115 C CD . LYS A 1 17 ? -1.638 15.274 0.778 1.00 98.00 ? 17 LYS A CD 1 P32322 UNP 17 K +ATOM 116 C CE . LYS A 1 17 ? -1.050 16.087 -0.374 1.00 98.00 ? 17 LYS A CE 1 P32322 UNP 17 K +ATOM 117 N NZ . LYS A 1 17 ? 0.407 15.860 -0.506 1.00 98.00 ? 17 LYS A NZ 1 P32322 UNP 17 K +ATOM 118 N N . GLY A 1 18 ? -6.577 13.610 0.206 1.00 97.94 ? 18 GLY A N 1 P32322 UNP 18 G +ATOM 119 C CA . GLY A 1 18 ? -7.440 13.492 -0.966 1.00 97.94 ? 18 GLY A CA 1 P32322 UNP 18 G +ATOM 120 C C . GLY A 1 18 ? -8.765 14.235 -0.780 1.00 97.94 ? 18 GLY A C 1 P32322 UNP 18 G +ATOM 121 O O . GLY A 1 18 ? -9.122 15.062 -1.616 1.00 97.94 ? 18 GLY A O 1 P32322 UNP 18 G +ATOM 122 N N . PHE A 1 19 ? -9.464 14.005 0.335 1.00 98.31 ? 19 PHE A N 1 P32322 UNP 19 F +ATOM 123 C CA . PHE A 1 19 ? -10.758 14.631 0.625 1.00 98.31 ? 19 PHE A CA 1 P32322 UNP 19 F +ATOM 124 C C . PHE A 1 19 ? -10.655 16.150 0.775 1.00 98.31 ? 19 PHE A C 1 P32322 UNP 19 F +ATOM 125 C CB . PHE A 1 19 ? -11.360 14.022 1.901 1.00 98.31 ? 19 PHE A CB 1 P32322 UNP 19 F +ATOM 126 O O . PHE A 1 19 ? -11.490 16.884 0.243 1.00 98.31 ? 19 PHE A O 1 P32322 UNP 19 F +ATOM 127 C CG . PHE A 1 19 ? -11.708 12.543 1.854 1.00 98.31 ? 19 PHE A CG 1 P32322 UNP 19 F +ATOM 128 C CD1 . PHE A 1 19 ? -12.208 11.956 0.674 1.00 98.31 ? 19 PHE A CD1 1 P32322 UNP 19 F +ATOM 129 C CD2 . PHE A 1 19 ? -11.597 11.756 3.019 1.00 98.31 ? 19 PHE A CD2 1 P32322 UNP 19 F +ATOM 130 C CE1 . PHE A 1 19 ? -12.539 10.593 0.643 1.00 98.31 ? 19 PHE A CE1 1 P32322 UNP 19 F +ATOM 131 C CE2 . PHE A 1 19 ? -11.971 10.399 2.996 1.00 98.31 ? 19 PHE A CE2 1 P32322 UNP 19 F +ATOM 132 C CZ . PHE A 1 19 ? -12.428 9.815 1.805 1.00 98.31 ? 19 PHE A CZ 1 P32322 UNP 19 F +ATOM 133 N N . THR A 1 20 ? -9.613 16.638 1.452 1.00 98.06 ? 20 THR A N 1 P32322 UNP 20 T +ATOM 134 C CA . THR A 1 20 ? -9.378 18.083 1.583 1.00 98.06 ? 20 THR A CA 1 P32322 UNP 20 T +ATOM 135 C C . THR A 1 20 ? -8.999 18.720 0.246 1.00 98.06 ? 20 THR A C 1 P32322 UNP 20 T +ATOM 136 C CB . THR A 1 20 ? -8.318 18.406 2.643 1.00 98.06 ? 20 THR A CB 1 P32322 UNP 20 T +ATOM 137 O O . THR A 1 20 ? -9.529 19.775 -0.092 1.00 98.06 ? 20 THR A O 1 P32322 UNP 20 T +ATOM 138 C CG2 . THR A 1 20 ? -8.800 18.084 4.055 1.00 98.06 ? 20 THR A CG2 1 P32322 UNP 20 T +ATOM 139 O OG1 . THR A 1 20 ? -7.135 17.675 2.433 1.00 98.06 ? 20 THR A OG1 1 P32322 UNP 20 T +ATOM 140 N N . ALA A 1 21 ? -8.160 18.065 -0.565 1.00 97.81 ? 21 ALA A N 1 P32322 UNP 21 A +ATOM 141 C CA . ALA A 1 21 ? -7.802 18.540 -1.904 1.00 97.81 ? 21 ALA A CA 1 P32322 UNP 21 A +ATOM 142 C C . ALA A 1 21 ? -8.977 18.503 -2.899 1.00 97.81 ? 21 ALA A C 1 P32322 UNP 21 A +ATOM 143 C CB . ALA A 1 21 ? -6.627 17.704 -2.422 1.00 97.81 ? 21 ALA A CB 1 P32322 UNP 21 A +ATOM 144 O O . ALA A 1 21 ? -9.018 19.308 -3.827 1.00 97.81 ? 21 ALA A O 1 P32322 UNP 21 A +ATOM 145 N N . ALA A 1 22 ? -9.931 17.587 -2.718 1.00 97.62 ? 22 ALA A N 1 P32322 UNP 22 A +ATOM 146 C CA . ALA A 1 22 ? -11.161 17.528 -3.503 1.00 97.62 ? 22 ALA A CA 1 P32322 UNP 22 A +ATOM 147 C C . ALA A 1 22 ? -12.198 18.587 -3.082 1.00 97.62 ? 22 ALA A C 1 P32322 UNP 22 A +ATOM 148 C CB . ALA A 1 22 ? -11.725 16.106 -3.405 1.00 97.62 ? 22 ALA A CB 1 P32322 UNP 22 A +ATOM 149 O O . ALA A 1 22 ? -13.180 18.784 -3.792 1.00 97.62 ? 22 ALA A O 1 P32322 UNP 22 A +ATOM 150 N N . GLY A 1 23 ? -12.004 19.259 -1.940 1.00 97.25 ? 23 GLY A N 1 P32322 UNP 23 G +ATOM 151 C CA . GLY A 1 23 ? -12.938 20.257 -1.414 1.00 97.25 ? 23 GLY A CA 1 P32322 UNP 23 G +ATOM 152 C C . GLY A 1 23 ? -14.238 19.674 -0.849 1.00 97.25 ? 23 GLY A C 1 P32322 UNP 23 G +ATOM 153 O O . GLY A 1 23 ? -15.140 20.435 -0.514 1.00 97.25 ? 23 GLY A O 1 P32322 UNP 23 G +ATOM 154 N N . VAL A 1 24 ? -14.341 18.345 -0.717 1.00 97.19 ? 24 VAL A N 1 P32322 UNP 24 V +ATOM 155 C CA . VAL A 1 24 ? -15.546 17.673 -0.191 1.00 97.19 ? 24 VAL A CA 1 P32322 UNP 24 V +ATOM 156 C C . VAL A 1 24 ? -15.632 17.725 1.335 1.00 97.19 ? 24 VAL A C 1 P32322 UNP 24 V +ATOM 157 C CB . VAL A 1 24 ? -15.661 16.219 -0.687 1.00 97.19 ? 24 VAL A CB 1 P32322 UNP 24 V +ATOM 158 O O . VAL A 1 24 ? -16.719 17.624 1.898 1.00 97.19 ? 24 VAL A O 1 P32322 UNP 24 V +ATOM 159 C CG1 . VAL A 1 24 ? -15.800 16.175 -2.213 1.00 97.19 ? 24 VAL A CG1 1 P32322 UNP 24 V +ATOM 160 C CG2 . VAL A 1 24 ? -14.480 15.335 -0.268 1.00 97.19 ? 24 VAL A CG2 1 P32322 UNP 24 V +ATOM 161 N N . LEU A 1 25 ? -14.495 17.906 2.017 1.00 96.94 ? 25 LEU A N 1 P32322 UNP 25 L +ATOM 162 C CA . LEU A 1 25 ? -14.412 18.037 3.471 1.00 96.94 ? 25 LEU A CA 1 P32322 UNP 25 L +ATOM 163 C C . LEU A 1 25 ? -13.411 19.123 3.861 1.00 96.94 ? 25 LEU A C 1 P32322 UNP 25 L +ATOM 164 C CB . LEU A 1 25 ? -14.007 16.691 4.100 1.00 96.94 ? 25 LEU A CB 1 P32322 UNP 25 L +ATOM 165 O O . LEU A 1 25 ? -12.262 19.125 3.420 1.00 96.94 ? 25 LEU A O 1 P32322 UNP 25 L +ATOM 166 C CG . LEU A 1 25 ? -15.101 15.611 4.043 1.00 96.94 ? 25 LEU A CG 1 P32322 UNP 25 L +ATOM 167 C CD1 . LEU A 1 25 ? -14.512 14.269 4.457 1.00 96.94 ? 25 LEU A CD1 1 P32322 UNP 25 L +ATOM 168 C CD2 . LEU A 1 25 ? -16.268 15.934 4.983 1.00 96.94 ? 25 LEU A CD2 1 P32322 UNP 25 L +ATOM 169 N N . ALA A 1 26 ? -13.824 20.015 4.759 1.00 97.50 ? 26 ALA A N 1 P32322 UNP 26 A +ATOM 170 C CA . ALA A 1 26 ? -12.896 20.922 5.418 1.00 97.50 ? 26 ALA A CA 1 P32322 UNP 26 A +ATOM 171 C C . ALA A 1 26 ? -12.024 20.140 6.415 1.00 97.50 ? 26 ALA A C 1 P32322 UNP 26 A +ATOM 172 C CB . ALA A 1 26 ? -13.686 22.045 6.096 1.00 97.50 ? 26 ALA A CB 1 P32322 UNP 26 A +ATOM 173 O O . ALA A 1 26 ? -12.538 19.312 7.165 1.00 97.50 ? 26 ALA A O 1 P32322 UNP 26 A +ATOM 174 N N . ALA A 1 27 ? -10.723 20.438 6.485 1.00 97.69 ? 27 ALA A N 1 P32322 UNP 27 A +ATOM 175 C CA . ALA A 1 27 ? -9.782 19.680 7.320 1.00 97.69 ? 27 ALA A CA 1 P32322 UNP 27 A +ATOM 176 C C . ALA A 1 27 ? -10.204 19.594 8.802 1.00 97.69 ? 27 ALA A C 1 P32322 UNP 27 A +ATOM 177 C CB . ALA A 1 27 ? -8.396 20.313 7.173 1.00 97.69 ? 27 ALA A CB 1 P32322 UNP 27 A +ATOM 178 O O . ALA A 1 27 ? -10.093 18.537 9.414 1.00 97.69 ? 27 ALA A O 1 P32322 UNP 27 A +ATOM 179 N N . HIS A 1 28 ? -10.801 20.658 9.352 1.00 96.88 ? 28 HIS A N 1 P32322 UNP 28 H +ATOM 180 C CA . HIS A 1 28 ? -11.279 20.700 10.742 1.00 96.88 ? 28 HIS A CA 1 P32322 UNP 28 H +ATOM 181 C C . HIS A 1 28 ? -12.505 19.803 11.022 1.00 96.88 ? 28 HIS A C 1 P32322 UNP 28 H +ATOM 182 C CB . HIS A 1 28 ? -11.580 22.159 11.119 1.00 96.88 ? 28 HIS A CB 1 P32322 UNP 28 H +ATOM 183 O O . HIS A 1 28 ? -12.873 19.610 12.185 1.00 96.88 ? 28 HIS A O 1 P32322 UNP 28 H +ATOM 184 C CG . HIS A 1 28 ? -12.810 22.716 10.438 1.00 96.88 ? 28 HIS A CG 1 P32322 UNP 28 H +ATOM 185 C CD2 . HIS A 1 28 ? -14.106 22.564 10.855 1.00 96.88 ? 28 HIS A CD2 1 P32322 UNP 28 H +ATOM 186 N ND1 . HIS A 1 28 ? -12.846 23.451 9.275 1.00 96.88 ? 28 HIS A ND1 1 P32322 UNP 28 H +ATOM 187 C CE1 . HIS A 1 28 ? -14.133 23.729 9.000 1.00 96.88 ? 28 HIS A CE1 1 P32322 UNP 28 H +ATOM 188 N NE2 . HIS A 1 28 ? -14.941 23.192 9.927 1.00 96.88 ? 28 HIS A NE2 1 P32322 UNP 28 H +ATOM 189 N N . LYS A 1 29 ? -13.173 19.287 9.979 1.00 98.06 ? 29 LYS A N 1 P32322 UNP 29 K +ATOM 190 C CA . LYS A 1 29 ? -14.241 18.275 10.080 1.00 98.06 ? 29 LYS A CA 1 P32322 UNP 29 K +ATOM 191 C C . LYS A 1 29 ? -13.689 16.851 10.114 1.00 98.06 ? 29 LYS A C 1 P32322 UNP 29 K +ATOM 192 C CB . LYS A 1 29 ? -15.246 18.429 8.922 1.00 98.06 ? 29 LYS A CB 1 P32322 UNP 29 K +ATOM 193 O O . LYS A 1 29 ? -14.456 15.928 10.382 1.00 98.06 ? 29 LYS A O 1 P32322 UNP 29 K +ATOM 194 C CG . LYS A 1 29 ? -16.085 19.712 8.981 1.00 98.06 ? 29 LYS A CG 1 P32322 UNP 29 K +ATOM 195 C CD . LYS A 1 29 ? -17.079 19.683 10.152 1.00 98.06 ? 29 LYS A CD 1 P32322 UNP 29 K +ATOM 196 C CE . LYS A 1 29 ? -18.037 20.874 10.073 1.00 98.06 ? 29 LYS A CE 1 P32322 UNP 29 K +ATOM 197 N NZ . LYS A 1 29 ? -19.091 20.778 11.116 1.00 98.06 ? 29 LYS A NZ 1 P32322 UNP 29 K +ATOM 198 N N . ILE A 1 30 ? -12.387 16.685 9.893 1.00 98.62 ? 30 ILE A N 1 P32322 UNP 30 I +ATOM 199 C CA . ILE A 1 30 ? -11.695 15.405 9.969 1.00 98.62 ? 30 ILE A CA 1 P32322 UNP 30 I +ATOM 200 C C . ILE A 1 30 ? -11.024 15.280 11.339 1.00 98.62 ? 30 ILE A C 1 P32322 UNP 30 I +ATOM 201 C CB . ILE A 1 30 ? -10.708 15.231 8.793 1.00 98.62 ? 30 ILE A CB 1 P32322 UNP 30 I +ATOM 202 O O . ILE A 1 30 ? -10.355 16.214 11.793 1.00 98.62 ? 30 ILE A O 1 P32322 UNP 30 I +ATOM 203 C CG1 . ILE A 1 30 ? -11.421 15.469 7.437 1.00 98.62 ? 30 ILE A CG1 1 P32322 UNP 30 I +ATOM 204 C CG2 . ILE A 1 30 ? -10.093 13.822 8.854 1.00 98.62 ? 30 ILE A CG2 1 P32322 UNP 30 I +ATOM 205 C CD1 . ILE A 1 30 ? -10.516 15.342 6.206 1.00 98.62 ? 30 ILE A CD1 1 P32322 UNP 30 I +ATOM 206 N N . MET A 1 31 ? -11.187 14.125 11.981 1.00 98.69 ? 31 MET A N 1 P32322 UNP 31 M +ATOM 207 C CA . MET A 1 31 ? -10.444 13.738 13.179 1.00 98.69 ? 31 MET A CA 1 P32322 UNP 31 M +ATOM 208 C C . MET A 1 31 ? -9.719 12.413 12.944 1.00 98.69 ? 31 MET A C 1 P32322 UNP 31 M +ATOM 209 C CB . MET A 1 31 ? -11.381 13.690 14.393 1.00 98.69 ? 31 MET A CB 1 P32322 UNP 31 M +ATOM 210 O O . MET A 1 31 ? -10.275 11.514 12.323 1.00 98.69 ? 31 MET A O 1 P32322 UNP 31 M +ATOM 211 C CG . MET A 1 31 ? -10.612 13.447 15.697 1.00 98.69 ? 31 MET A CG 1 P32322 UNP 31 M +ATOM 212 S SD . MET A 1 31 ? -11.610 13.575 17.202 1.00 98.69 ? 31 MET A SD 1 P32322 UNP 31 M +ATOM 213 C CE . MET A 1 31 ? -11.907 15.353 17.315 1.00 98.69 ? 31 MET A CE 1 P32322 UNP 31 M +ATOM 214 N N . ALA A 1 32 ? -8.482 12.285 13.419 1.00 98.62 ? 32 ALA A N 1 P32322 UNP 32 A +ATOM 215 C CA . ALA A 1 32 ? -7.744 11.027 13.374 1.00 98.62 ? 32 ALA A CA 1 P32322 UNP 32 A +ATOM 216 C C . ALA A 1 32 ? -7.126 10.696 14.735 1.00 98.62 ? 32 ALA A C 1 P32322 UNP 32 A +ATOM 217 C CB . ALA A 1 32 ? -6.701 11.080 12.250 1.00 98.62 ? 32 ALA A CB 1 P32322 UNP 32 A +ATOM 218 O O . ALA A 1 32 ? -6.557 11.580 15.384 1.00 98.62 ? 32 ALA A O 1 P32322 UNP 32 A +ATOM 219 N N . SER A 1 33 ? -7.193 9.423 15.130 1.00 98.38 ? 33 SER A N 1 P32322 UNP 33 S +ATOM 220 C CA . SER A 1 33 ? -6.567 8.921 16.349 1.00 98.38 ? 33 SER A CA 1 P32322 UNP 33 S +ATOM 221 C C . SER A 1 33 ? -5.351 8.040 16.088 1.00 98.38 ? 33 SER A C 1 P32322 UNP 33 S +ATOM 222 C CB . SER A 1 33 ? -7.561 8.222 17.278 1.00 98.38 ? 33 SER A CB 1 P32322 UNP 33 S +ATOM 223 O O . SER A 1 33 ? -5.291 7.268 15.127 1.00 98.38 ? 33 SER A O 1 P32322 UNP 33 S +ATOM 224 O OG . SER A 1 33 ? -8.134 7.106 16.634 1.00 98.38 ? 33 SER A OG 1 P32322 UNP 33 S +ATOM 225 N N . SER A 1 34 ? -4.352 8.154 16.961 1.00 96.50 ? 34 SER A N 1 P32322 UNP 34 S +ATOM 226 C CA . SER A 1 34 ? -3.191 7.263 16.997 1.00 96.50 ? 34 SER A CA 1 P32322 UNP 34 S +ATOM 227 C C . SER A 1 34 ? -2.592 7.239 18.401 1.00 96.50 ? 34 SER A C 1 P32322 UNP 34 S +ATOM 228 C CB . SER A 1 34 ? -2.122 7.743 16.013 1.00 96.50 ? 34 SER A CB 1 P32322 UNP 34 S +ATOM 229 O O . SER A 1 34 ? -2.396 8.310 18.972 1.00 96.50 ? 34 SER A O 1 P32322 UNP 34 S +ATOM 230 O OG . SER A 1 34 ? -0.984 6.899 16.015 1.00 96.50 ? 34 SER A OG 1 P32322 UNP 34 S +ATOM 231 N N . PRO A 1 35 ? -2.236 6.061 18.947 1.00 94.06 ? 35 PRO A N 1 P32322 UNP 35 P +ATOM 232 C CA . PRO A 1 35 ? -1.517 5.996 20.219 1.00 94.06 ? 35 PRO A CA 1 P32322 UNP 35 P +ATOM 233 C C . PRO A 1 35 ? -0.097 6.574 20.108 1.00 94.06 ? 35 PRO A C 1 P32322 UNP 35 P +ATOM 234 C CB . PRO A 1 35 ? -1.499 4.508 20.580 1.00 94.06 ? 35 PRO A CB 1 P32322 UNP 35 P +ATOM 235 O O . PRO A 1 35 ? 0.430 7.105 21.079 1.00 94.06 ? 35 PRO A O 1 P32322 UNP 35 P +ATOM 236 C CG . PRO A 1 35 ? -1.552 3.802 19.224 1.00 94.06 ? 35 PRO A CG 1 P32322 UNP 35 P +ATOM 237 C CD . PRO A 1 35 ? -2.432 4.729 18.389 1.00 94.06 ? 35 PRO A CD 1 P32322 UNP 35 P +ATOM 238 N N . ASP A 1 36 ? 0.514 6.491 18.922 1.00 93.75 ? 36 ASP A N 1 P32322 UNP 36 D +ATOM 239 C CA . ASP A 1 36 ? 1.807 7.105 18.620 1.00 93.75 ? 36 ASP A CA 1 P32322 UNP 36 D +ATOM 240 C C . ASP A 1 36 ? 1.578 8.429 17.884 1.00 93.75 ? 36 ASP A C 1 P32322 UNP 36 D +ATOM 241 C CB . ASP A 1 36 ? 2.675 6.120 17.825 1.00 93.75 ? 36 ASP A CB 1 P32322 UNP 36 D +ATOM 242 O O . ASP A 1 36 ? 1.156 8.452 16.719 1.00 93.75 ? 36 ASP A O 1 P32322 UNP 36 D +ATOM 243 C CG . ASP A 1 36 ? 4.079 6.656 17.517 1.00 93.75 ? 36 ASP A CG 1 P32322 UNP 36 D +ATOM 244 O OD1 . ASP A 1 36 ? 4.346 7.843 17.812 1.00 93.75 ? 36 ASP A OD1 1 P32322 UNP 36 D +ATOM 245 O OD2 . ASP A 1 36 ? 4.851 5.871 16.921 1.00 93.75 ? 36 ASP A OD2 1 P32322 UNP 36 D +ATOM 246 N N . MET A 1 37 ? 1.825 9.530 18.591 1.00 94.00 ? 37 MET A N 1 P32322 UNP 37 M +ATOM 247 C CA . MET A 1 37 ? 1.623 10.894 18.103 1.00 94.00 ? 37 MET A CA 1 P32322 UNP 37 M +ATOM 248 C C . MET A 1 37 ? 2.882 11.517 17.483 1.00 94.00 ? 37 MET A C 1 P32322 UNP 37 M +ATOM 249 C CB . MET A 1 37 ? 1.040 11.753 19.237 1.00 94.00 ? 37 MET A CB 1 P32322 UNP 37 M +ATOM 250 O O . MET A 1 37 ? 2.805 12.633 16.959 1.00 94.00 ? 37 MET A O 1 P32322 UNP 37 M +ATOM 251 C CG . MET A 1 37 ? -0.414 11.363 19.552 1.00 94.00 ? 37 MET A CG 1 P32322 UNP 37 M +ATOM 252 S SD . MET A 1 37 ? -1.580 11.602 18.175 1.00 94.00 ? 37 MET A SD 1 P32322 UNP 37 M +ATOM 253 C CE . MET A 1 37 ? -1.693 13.404 18.145 1.00 94.00 ? 37 MET A CE 1 P32322 UNP 37 M +ATOM 254 N N . ASP A 1 38 ? 4.006 10.795 17.481 1.00 94.06 ? 38 ASP A N 1 P32322 UNP 38 D +ATOM 255 C CA . ASP A 1 38 ? 5.297 11.263 16.961 1.00 94.06 ? 38 ASP A CA 1 P32322 UNP 38 D +ATOM 256 C C . ASP A 1 38 ? 5.542 10.830 15.504 1.00 94.06 ? 38 ASP A C 1 P32322 UNP 38 D +ATOM 257 C CB . ASP A 1 38 ? 6.419 10.820 17.913 1.00 94.06 ? 38 ASP A CB 1 P32322 UNP 38 D +ATOM 258 O O . ASP A 1 38 ? 6.531 11.213 14.872 1.00 94.06 ? 38 ASP A O 1 P32322 UNP 38 D +ATOM 259 C CG . ASP A 1 38 ? 6.315 11.486 19.292 1.00 94.06 ? 38 ASP A CG 1 P32322 UNP 38 D +ATOM 260 O OD1 . ASP A 1 38 ? 5.908 12.673 19.339 1.00 94.06 ? 38 ASP A OD1 1 P32322 UNP 38 D +ATOM 261 O OD2 . ASP A 1 38 ? 6.684 10.826 20.287 1.00 94.06 ? 38 ASP A OD2 1 P32322 UNP 38 D +ATOM 262 N N . LEU A 1 39 ? 4.606 10.076 14.916 1.00 94.44 ? 39 LEU A N 1 P32322 UNP 39 L +ATOM 263 C CA . LEU A 1 39 ? 4.662 9.650 13.520 1.00 94.44 ? 39 LEU A CA 1 P32322 UNP 39 L +ATOM 264 C C . LEU A 1 39 ? 4.700 10.840 12.545 1.00 94.44 ? 39 LEU A C 1 P32322 UNP 39 L +ATOM 265 C CB . LEU A 1 39 ? 3.466 8.735 13.199 1.00 94.44 ? 39 LEU A CB 1 P32322 UNP 39 L +ATOM 266 O O . LEU A 1 39 ? 3.953 11.818 12.657 1.00 94.44 ? 39 LEU A O 1 P32322 UNP 39 L +ATOM 267 C CG . LEU A 1 39 ? 3.415 7.413 13.985 1.00 94.44 ? 39 LEU A CG 1 P32322 UNP 39 L +ATOM 268 C CD1 . LEU A 1 39 ? 2.133 6.662 13.616 1.00 94.44 ? 39 LEU A CD1 1 P32322 UNP 39 L +ATOM 269 C CD2 . LEU A 1 39 ? 4.607 6.510 13.659 1.00 94.44 ? 39 LEU A CD2 1 P32322 UNP 39 L +ATOM 270 N N . ALA A 1 40 ? 5.491 10.706 11.476 1.00 96.56 ? 40 ALA A N 1 P32322 UNP 40 A +ATOM 271 C CA . ALA A 1 40 ? 5.569 11.709 10.410 1.00 96.56 ? 40 ALA A CA 1 P32322 UNP 40 A +ATOM 272 C C . ALA A 1 40 ? 4.197 12.017 9.769 1.00 96.56 ? 40 ALA A C 1 P32322 UNP 40 A +ATOM 273 C CB . ALA A 1 40 ? 6.571 11.215 9.359 1.00 96.56 ? 40 ALA A CB 1 P32322 UNP 40 A +ATOM 274 O O . ALA A 1 40 ? 3.922 13.163 9.407 1.00 96.56 ? 40 ALA A O 1 P32322 UNP 40 A +ATOM 275 N N . THR A 1 41 ? 3.316 11.017 9.667 1.00 96.50 ? 41 THR A N 1 P32322 UNP 41 T +ATOM 276 C CA . THR A 1 41 ? 1.941 11.169 9.162 1.00 96.50 ? 41 THR A CA 1 P32322 UNP 41 T +ATOM 277 C C . THR A 1 41 ? 1.066 11.998 10.098 1.00 96.50 ? 41 THR A C 1 P32322 UNP 41 T +ATOM 278 C CB . THR A 1 41 ? 1.284 9.799 8.944 1.00 96.50 ? 41 THR A CB 1 P32322 UNP 41 T +ATOM 279 O O . THR A 1 41 ? 0.306 12.835 9.617 1.00 96.50 ? 41 THR A O 1 P32322 UNP 41 T +ATOM 280 C CG2 . THR A 1 41 ? 1.882 9.076 7.739 1.00 96.50 ? 41 THR A CG2 1 P32322 UNP 41 T +ATOM 281 O OG1 . THR A 1 41 ? 1.508 8.976 10.064 1.00 96.50 ? 41 THR A OG1 1 P32322 UNP 41 T +ATOM 282 N N . VAL A 1 42 ? 1.221 11.854 11.419 1.00 96.94 ? 42 VAL A N 1 P32322 UNP 42 V +ATOM 283 C CA . VAL A 1 42 ? 0.528 12.681 12.423 1.00 96.94 ? 42 VAL A CA 1 P32322 UNP 42 V +ATOM 284 C C . VAL A 1 42 ? 0.968 14.140 12.299 1.00 96.94 ? 42 VAL A C 1 P32322 UNP 42 V +ATOM 285 C CB . VAL A 1 42 ? 0.775 12.136 13.847 1.00 96.94 ? 42 VAL A CB 1 P32322 UNP 42 V +ATOM 286 O O . VAL A 1 42 ? 0.129 15.039 12.243 1.00 96.94 ? 42 VAL A O 1 P32322 UNP 42 V +ATOM 287 C CG1 . VAL A 1 42 ? 0.187 13.050 14.924 1.00 96.94 ? 42 VAL A CG1 1 P32322 UNP 42 V +ATOM 288 C CG2 . VAL A 1 42 ? 0.120 10.760 14.016 1.00 96.94 ? 42 VAL A CG2 1 P32322 UNP 42 V +ATOM 289 N N . SER A 1 43 ? 2.273 14.395 12.155 1.00 97.00 ? 43 SER A N 1 P32322 UNP 43 S +ATOM 290 C CA . SER A 1 43 ? 2.794 15.748 11.906 1.00 97.00 ? 43 SER A CA 1 P32322 UNP 43 S +ATOM 291 C C . SER A 1 43 ? 2.233 16.359 10.613 1.00 97.00 ? 43 SER A C 1 P32322 UNP 43 S +ATOM 292 C CB . SER A 1 43 ? 4.324 15.701 11.867 1.00 97.00 ? 43 SER A CB 1 P32322 UNP 43 S +ATOM 293 O O . SER A 1 43 ? 1.835 17.527 10.587 1.00 97.00 ? 43 SER A O 1 P32322 UNP 43 S +ATOM 294 O OG . SER A 1 43 ? 4.882 17.001 11.773 1.00 97.00 ? 43 SER A OG 1 P32322 UNP 43 S +ATOM 295 N N . ALA A 1 44 ? 2.132 15.566 9.542 1.00 97.56 ? 44 ALA A N 1 P32322 UNP 44 A +ATOM 296 C CA . ALA A 1 44 ? 1.564 16.010 8.271 1.00 97.56 ? 44 ALA A CA 1 P32322 UNP 44 A +ATOM 297 C C . ALA A 1 44 ? 0.053 16.306 8.360 1.00 97.56 ? 44 ALA A C 1 P32322 UNP 44 A +ATOM 298 C CB . ALA A 1 44 ? 1.892 14.961 7.204 1.00 97.56 ? 44 ALA A CB 1 P32322 UNP 44 A +ATOM 299 O O . ALA A 1 44 ? -0.395 17.328 7.840 1.00 97.56 ? 44 ALA A O 1 P32322 UNP 44 A +ATOM 300 N N . LEU A 1 45 ? -0.719 15.467 9.060 1.00 97.75 ? 45 LEU A N 1 P32322 UNP 45 L +ATOM 301 C CA . LEU A 1 45 ? -2.144 15.689 9.340 1.00 97.75 ? 45 LEU A CA 1 P32322 UNP 45 L +ATOM 302 C C . LEU A 1 45 ? -2.365 16.965 10.163 1.00 97.75 ? 45 LEU A C 1 P32322 UNP 45 L +ATOM 303 C CB . LEU A 1 45 ? -2.706 14.463 10.085 1.00 97.75 ? 45 LEU A CB 1 P32322 UNP 45 L +ATOM 304 O O . LEU A 1 45 ? -3.230 17.775 9.827 1.00 97.75 ? 45 LEU A O 1 P32322 UNP 45 L +ATOM 305 C CG . LEU A 1 45 ? -2.960 13.231 9.199 1.00 97.75 ? 45 LEU A CG 1 P32322 UNP 45 L +ATOM 306 C CD1 . LEU A 1 45 ? -3.231 12.008 10.072 1.00 97.75 ? 45 LEU A CD1 1 P32322 UNP 45 L +ATOM 307 C CD2 . LEU A 1 45 ? -4.167 13.442 8.287 1.00 97.75 ? 45 LEU A CD2 1 P32322 UNP 45 L +ATOM 308 N N . ARG A 1 46 ? -1.527 17.204 11.182 1.00 97.06 ? 46 ARG A N 1 P32322 UNP 46 R +ATOM 309 C CA . ARG A 1 46 ? -1.585 18.421 12.009 1.00 97.06 ? 46 ARG A CA 1 P32322 UNP 46 R +ATOM 310 C C . ARG A 1 46 ? -1.414 19.678 11.160 1.00 97.06 ? 46 ARG A C 1 P32322 UNP 46 R +ATOM 311 C CB . ARG A 1 46 ? -0.513 18.355 13.110 1.00 97.06 ? 46 ARG A CB 1 P32322 UNP 46 R +ATOM 312 O O . ARG A 1 46 ? -2.198 20.612 11.282 1.00 97.06 ? 46 ARG A O 1 P32322 UNP 46 R +ATOM 313 C CG . ARG A 1 46 ? -0.725 19.446 14.173 1.00 97.06 ? 46 ARG A CG 1 P32322 UNP 46 R +ATOM 314 C CD . ARG A 1 46 ? 0.289 19.335 15.320 1.00 97.06 ? 46 ARG A CD 1 P32322 UNP 46 R +ATOM 315 N NE . ARG A 1 46 ? 0.107 18.095 16.102 1.00 97.06 ? 46 ARG A NE 1 P32322 UNP 46 R +ATOM 316 N NH1 . ARG A 1 46 ? 2.164 18.033 17.136 1.00 97.06 ? 46 ARG A NH1 1 P32322 UNP 46 R +ATOM 317 N NH2 . ARG A 1 46 ? 0.723 16.371 17.461 1.00 97.06 ? 46 ARG A NH2 1 P32322 UNP 46 R +ATOM 318 C CZ . ARG A 1 46 ? 0.993 17.512 16.894 1.00 97.06 ? 46 ARG A CZ 1 P32322 UNP 46 R +ATOM 319 N N . LYS A 1 47 ? -0.419 19.684 10.265 1.00 97.38 ? 47 LYS A N 1 P32322 UNP 47 K +ATOM 320 C CA . LYS A 1 47 ? -0.158 20.807 9.345 1.00 97.38 ? 47 LYS A CA 1 P32322 UNP 47 K +ATOM 321 C C . LYS A 1 47 ? -1.298 21.054 8.354 1.00 97.38 ? 47 LYS A C 1 P32322 UNP 47 K +ATOM 322 C CB . LYS A 1 47 ? 1.149 20.563 8.578 1.00 97.38 ? 47 LYS A CB 1 P32322 UNP 47 K +ATOM 323 O O . LYS A 1 47 ? -1.461 22.179 7.901 1.00 97.38 ? 47 LYS A O 1 P32322 UNP 47 K +ATOM 324 C CG . LYS A 1 47 ? 2.383 20.723 9.473 1.00 97.38 ? 47 LYS A CG 1 P32322 UNP 47 K +ATOM 325 C CD . LYS A 1 47 ? 3.658 20.433 8.675 1.00 97.38 ? 47 LYS A CD 1 P32322 UNP 47 K +ATOM 326 C CE . LYS A 1 47 ? 4.872 20.522 9.603 1.00 97.38 ? 47 LYS A CE 1 P32322 UNP 47 K +ATOM 327 N NZ . LYS A 1 47 ? 6.138 20.258 8.876 1.00 97.38 ? 47 LYS A NZ 1 P32322 UNP 47 K +ATOM 328 N N . MET A 1 48 ? -2.075 20.025 8.025 1.00 96.38 ? 48 MET A N 1 P32322 UNP 48 M +ATOM 329 C CA . MET A 1 48 ? -3.241 20.128 7.142 1.00 96.38 ? 48 MET A CA 1 P32322 UNP 48 M +ATOM 330 C C . MET A 1 48 ? -4.465 20.743 7.841 1.00 96.38 ? 48 MET A C 1 P32322 UNP 48 M +ATOM 331 C CB . MET A 1 48 ? -3.536 18.719 6.614 1.00 96.38 ? 48 MET A CB 1 P32322 UNP 48 M +ATOM 332 O O . MET A 1 48 ? -5.395 21.171 7.165 1.00 96.38 ? 48 MET A O 1 P32322 UNP 48 M +ATOM 333 C CG . MET A 1 48 ? -4.512 18.660 5.435 1.00 96.38 ? 48 MET A CG 1 P32322 UNP 48 M +ATOM 334 S SD . MET A 1 48 ? -4.974 16.966 4.988 1.00 96.38 ? 48 MET A SD 1 P32322 UNP 48 M +ATOM 335 C CE . MET A 1 48 ? -3.369 16.247 4.563 1.00 96.38 ? 48 MET A CE 1 P32322 UNP 48 M +ATOM 336 N N . GLY A 1 49 ? -4.472 20.806 9.177 1.00 97.56 ? 49 GLY A N 1 P32322 UNP 49 G +ATOM 337 C CA . GLY A 1 49 ? -5.612 21.279 9.968 1.00 97.56 ? 49 GLY A CA 1 P32322 UNP 49 G +ATOM 338 C C . GLY A 1 49 ? -6.590 20.173 10.379 1.00 97.56 ? 49 GLY A C 1 P32322 UNP 49 G +ATOM 339 O O . GLY A 1 49 ? -7.725 20.476 10.745 1.00 97.56 ? 49 GLY A O 1 P32322 UNP 49 G +ATOM 340 N N . VAL A 1 50 ? -6.167 18.906 10.310 1.00 98.25 ? 50 VAL A N 1 P32322 UNP 50 V +ATOM 341 C CA . VAL A 1 50 ? -6.932 17.756 10.818 1.00 98.25 ? 50 VAL A CA 1 P32322 UNP 50 V +ATOM 342 C C . VAL A 1 50 ? -6.853 17.725 12.345 1.00 98.25 ? 50 VAL A C 1 P32322 UNP 50 V +ATOM 343 C CB . VAL A 1 50 ? -6.428 16.442 10.187 1.00 98.25 ? 50 VAL A CB 1 P32322 UNP 50 V +ATOM 344 O O . VAL A 1 50 ? -5.779 17.932 12.918 1.00 98.25 ? 50 VAL A O 1 P32322 UNP 50 V +ATOM 345 C CG1 . VAL A 1 50 ? -7.109 15.199 10.767 1.00 98.25 ? 50 VAL A CG1 1 P32322 UNP 50 V +ATOM 346 C CG2 . VAL A 1 50 ? -6.667 16.462 8.670 1.00 98.25 ? 50 VAL A CG2 1 P32322 UNP 50 V +ATOM 347 N N . LYS A 1 51 ? -7.981 17.457 13.015 1.00 98.31 ? 51 LYS A N 1 P32322 UNP 51 K +ATOM 348 C CA . LYS A 1 51 ? -8.002 17.261 14.470 1.00 98.31 ? 51 LYS A CA 1 P32322 UNP 51 K +ATOM 349 C C . LYS A 1 51 ? -7.321 15.940 14.816 1.00 98.31 ? 51 LYS A C 1 P32322 UNP 51 K +ATOM 350 C CB . LYS A 1 51 ? -9.433 17.277 15.016 1.00 98.31 ? 51 LYS A CB 1 P32322 UNP 51 K +ATOM 351 O O . LYS A 1 51 ? -7.565 14.925 14.173 1.00 98.31 ? 51 LYS A O 1 P32322 UNP 51 K +ATOM 352 C CG . LYS A 1 51 ? -10.148 18.624 14.842 1.00 98.31 ? 51 LYS A CG 1 P32322 UNP 51 K +ATOM 353 C CD . LYS A 1 51 ? -11.522 18.514 15.510 1.00 98.31 ? 51 LYS A CD 1 P32322 UNP 51 K +ATOM 354 C CE . LYS A 1 51 ? -12.345 19.796 15.406 1.00 98.31 ? 51 LYS A CE 1 P32322 UNP 51 K +ATOM 355 N NZ . LYS A 1 51 ? -13.635 19.610 16.119 1.00 98.31 ? 51 LYS A NZ 1 P32322 UNP 51 K +ATOM 356 N N . LEU A 1 52 ? -6.477 15.944 15.838 1.00 98.44 ? 52 LEU A N 1 P32322 UNP 52 L +ATOM 357 C CA . LEU A 1 52 ? -5.713 14.769 16.244 1.00 98.44 ? 52 LEU A CA 1 P32322 UNP 52 L +ATOM 358 C C . LEU A 1 52 ? -5.922 14.500 17.724 1.00 98.44 ? 52 LEU A C 1 P32322 UNP 52 L +ATOM 359 C CB . LEU A 1 52 ? -4.230 14.988 15.936 1.00 98.44 ? 52 LEU A CB 1 P32322 UNP 52 L +ATOM 360 O O . LEU A 1 52 ? -5.925 15.440 18.517 1.00 98.44 ? 52 LEU A O 1 P32322 UNP 52 L +ATOM 361 C CG . LEU A 1 52 ? -3.895 15.024 14.438 1.00 98.44 ? 52 LEU A CG 1 P32322 UNP 52 L +ATOM 362 C CD1 . LEU A 1 52 ? -2.515 15.649 14.275 1.00 98.44 ? 52 LEU A CD1 1 P32322 UNP 52 L +ATOM 363 C CD2 . LEU A 1 52 ? -3.898 13.625 13.825 1.00 98.44 ? 52 LEU A CD2 1 P32322 UNP 52 L +ATOM 364 N N . THR A 1 53 ? -6.048 13.229 18.080 1.00 98.25 ? 53 THR A N 1 P32322 UNP 53 T +ATOM 365 C CA . THR A 1 53 ? -6.242 12.786 19.463 1.00 98.25 ? 53 THR A CA 1 P32322 UNP 53 T +ATOM 366 C C . THR A 1 53 ? -5.537 11.448 19.701 1.00 98.25 ? 53 THR A C 1 P32322 UNP 53 T +ATOM 367 C CB . THR A 1 53 ? -7.741 12.700 19.803 1.00 98.25 ? 53 THR A CB 1 P32322 UNP 53 T +ATOM 368 O O . THR A 1 53 ? -5.455 10.631 18.784 1.00 98.25 ? 53 THR A O 1 P32322 UNP 53 T +ATOM 369 C CG2 . THR A 1 53 ? -8.538 11.791 18.866 1.00 98.25 ? 53 THR A CG2 1 P32322 UNP 53 T +ATOM 370 O OG1 . THR A 1 53 ? -7.886 12.210 21.109 1.00 98.25 ? 53 THR A OG1 1 P32322 UNP 53 T +ATOM 371 N N . PRO A 1 54 ? -5.012 11.177 20.904 1.00 97.44 ? 54 PRO A N 1 P32322 UNP 54 P +ATOM 372 C CA . PRO A 1 54 ? -4.568 9.833 21.257 1.00 97.44 ? 54 PRO A CA 1 P32322 UNP 54 P +ATOM 373 C C . PRO A 1 54 ? -5.738 8.873 21.550 1.00 97.44 ? 54 PRO A C 1 P32322 UNP 54 P +ATOM 374 C CB . PRO A 1 54 ? -3.647 10.036 22.459 1.00 97.44 ? 54 PRO A CB 1 P32322 UNP 54 P +ATOM 375 O O . PRO A 1 54 ? -5.511 7.675 21.694 1.00 97.44 ? 54 PRO A O 1 P32322 UNP 54 P +ATOM 376 C CG . PRO A 1 54 ? -4.239 11.263 23.150 1.00 97.44 ? 54 PRO A CG 1 P32322 UNP 54 P +ATOM 377 C CD . PRO A 1 54 ? -4.780 12.110 22.000 1.00 97.44 ? 54 PRO A CD 1 P32322 UNP 54 P +ATOM 378 N N . HIS A 1 55 ? -6.981 9.366 21.637 1.00 97.88 ? 55 HIS A N 1 P32322 UNP 55 H +ATOM 379 C CA . HIS A 1 55 ? -8.139 8.600 22.101 1.00 97.88 ? 55 HIS A CA 1 P32322 UNP 55 H +ATOM 380 C C . HIS A 1 55 ? -9.086 8.219 20.954 1.00 97.88 ? 55 HIS A C 1 P32322 UNP 55 H +ATOM 381 C CB . HIS A 1 55 ? -8.854 9.407 23.196 1.00 97.88 ? 55 HIS A CB 1 P32322 UNP 55 H +ATOM 382 O O . HIS A 1 55 ? -9.696 9.075 20.310 1.00 97.88 ? 55 HIS A O 1 P32322 UNP 55 H +ATOM 383 C CG . HIS A 1 55 ? -7.954 9.767 24.353 1.00 97.88 ? 55 HIS A CG 1 P32322 UNP 55 H +ATOM 384 C CD2 . HIS A 1 55 ? -7.625 11.028 24.780 1.00 97.88 ? 55 HIS A CD2 1 P32322 UNP 55 H +ATOM 385 N ND1 . HIS A 1 55 ? -7.274 8.878 25.156 1.00 97.88 ? 55 HIS A ND1 1 P32322 UNP 55 H +ATOM 386 C CE1 . HIS A 1 55 ? -6.553 9.583 26.042 1.00 97.88 ? 55 HIS A CE1 1 P32322 UNP 55 H +ATOM 387 N NE2 . HIS A 1 55 ? -6.722 10.898 25.846 1.00 97.88 ? 55 HIS A NE2 1 P32322 UNP 55 H +ATOM 388 N N . ASN A 1 56 ? -9.273 6.915 20.722 1.00 98.06 ? 56 ASN A N 1 P32322 UNP 56 N +ATOM 389 C CA . ASN A 1 56 ? -10.173 6.418 19.673 1.00 98.06 ? 56 ASN A CA 1 P32322 UNP 56 N +ATOM 390 C C . ASN A 1 56 ? -11.632 6.822 19.933 1.00 98.06 ? 56 ASN A C 1 P32322 UNP 56 N +ATOM 391 C CB . ASN A 1 56 ? -10.027 4.892 19.568 1.00 98.06 ? 56 ASN A CB 1 P32322 UNP 56 N +ATOM 392 O O . ASN A 1 56 ? -12.331 7.239 19.012 1.00 98.06 ? 56 ASN A O 1 P32322 UNP 56 N +ATOM 393 C CG . ASN A 1 56 ? -8.636 4.465 19.145 1.00 98.06 ? 56 ASN A CG 1 P32322 UNP 56 N +ATOM 394 N ND2 . ASN A 1 56 ? -8.127 3.383 19.671 1.00 98.06 ? 56 ASN A ND2 1 P32322 UNP 56 N +ATOM 395 O OD1 . ASN A 1 56 ? -7.984 5.115 18.338 1.00 98.06 ? 56 ASN A OD1 1 P32322 UNP 56 N +ATOM 396 N N . LYS A 1 57 ? -12.058 6.791 21.200 1.00 97.88 ? 57 LYS A N 1 P32322 UNP 57 K +ATOM 397 C CA . LYS A 1 57 ? -13.399 7.193 21.645 1.00 97.88 ? 57 LYS A CA 1 P32322 UNP 57 K +ATOM 398 C C . LYS A 1 57 ? -13.778 8.622 21.238 1.00 97.88 ? 57 LYS A C 1 P32322 UNP 57 K +ATOM 399 C CB . LYS A 1 57 ? -13.453 6.999 23.165 1.00 97.88 ? 57 LYS A CB 1 P32322 UNP 57 K +ATOM 400 O O . LYS A 1 57 ? -14.890 8.848 20.772 1.00 97.88 ? 57 LYS A O 1 P32322 UNP 57 K +ATOM 401 C CG . LYS A 1 57 ? -14.839 7.285 23.753 1.00 97.88 ? 57 LYS A CG 1 P32322 UNP 57 K +ATOM 402 C CD . LYS A 1 57 ? -14.829 6.965 25.252 1.00 97.88 ? 57 LYS A CD 1 P32322 UNP 57 K +ATOM 403 C CE . LYS A 1 57 ? -16.217 7.157 25.865 1.00 97.88 ? 57 LYS A CE 1 P32322 UNP 57 K +ATOM 404 N NZ . LYS A 1 57 ? -16.844 5.857 26.161 1.00 97.88 ? 57 LYS A NZ 1 P32322 UNP 57 K +ATOM 405 N N . GLU A 1 58 ? -12.854 9.577 21.343 1.00 98.19 ? 58 GLU A N 1 P32322 UNP 58 E +ATOM 406 C CA . GLU A 1 58 ? -13.102 10.960 20.902 1.00 98.19 ? 58 GLU A CA 1 P32322 UNP 58 E +ATOM 407 C C . GLU A 1 58 ? -13.332 11.038 19.386 1.00 98.19 ? 58 GLU A C 1 P32322 UNP 58 E +ATOM 408 C CB . GLU A 1 58 ? -11.907 11.852 21.257 1.00 98.19 ? 58 GLU A CB 1 P32322 UNP 58 E +ATOM 409 O O . GLU A 1 58 ? -14.187 11.789 18.916 1.00 98.19 ? 58 GLU A O 1 P32322 UNP 58 E +ATOM 410 C CG . GLU A 1 58 ? -11.740 12.097 22.762 1.00 98.19 ? 58 GLU A CG 1 P32322 UNP 58 E +ATOM 411 C CD . GLU A 1 58 ? -10.540 13.008 23.073 1.00 98.19 ? 58 GLU A CD 1 P32322 UNP 58 E +ATOM 412 O OE1 . GLU A 1 58 ? -10.248 13.189 24.271 1.00 98.19 ? 58 GLU A OE1 1 P32322 UNP 58 E +ATOM 413 O OE2 . GLU A 1 58 ? -9.879 13.491 22.120 1.00 98.19 ? 58 GLU A OE2 1 P32322 UNP 58 E +ATOM 414 N N . THR A 1 59 ? -12.606 10.218 18.618 1.00 98.50 ? 59 THR A N 1 P32322 UNP 59 T +ATOM 415 C CA . THR A 1 59 ? -12.774 10.139 17.160 1.00 98.50 ? 59 THR A CA 1 P32322 UNP 59 T +ATOM 416 C C . THR A 1 59 ? -14.138 9.567 16.797 1.00 98.50 ? 59 THR A C 1 P32322 UNP 59 T +ATOM 417 C CB . THR A 1 59 ? -11.638 9.342 16.501 1.00 98.50 ? 59 THR A CB 1 P32322 UNP 59 T +ATOM 418 O O . THR A 1 59 ? -14.786 10.106 15.904 1.00 98.50 ? 59 THR A O 1 P32322 UNP 59 T +ATOM 419 C CG2 . THR A 1 59 ? -11.715 9.297 14.969 1.00 98.50 ? 59 THR A CG2 1 P32322 UNP 59 T +ATOM 420 O OG1 . THR A 1 59 ? -10.420 9.965 16.833 1.00 98.50 ? 59 THR A OG1 1 P32322 UNP 59 T +ATOM 421 N N . VAL A 1 60 ? -14.614 8.545 17.512 1.00 98.56 ? 60 VAL A N 1 P32322 UNP 60 V +ATOM 422 C CA . VAL A 1 60 ? -15.972 8.001 17.335 1.00 98.56 ? 60 VAL A CA 1 P32322 UNP 60 V +ATOM 423 C C . VAL A 1 60 ? -17.008 9.093 17.589 1.00 98.56 ? 60 VAL A C 1 P32322 UNP 60 V +ATOM 424 C CB . VAL A 1 60 ? -16.212 6.800 18.265 1.00 98.56 ? 60 VAL A CB 1 P32322 UNP 60 V +ATOM 425 O O . VAL A 1 60 ? -17.784 9.417 16.700 1.00 98.56 ? 60 VAL A O 1 P32322 UNP 60 V +ATOM 426 C CG1 . VAL A 1 60 ? -17.629 6.232 18.134 1.00 98.56 ? 60 VAL A CG1 1 P32322 UNP 60 V +ATOM 427 C CG2 . VAL A 1 60 ? -15.226 5.668 17.973 1.00 98.56 ? 60 VAL A CG2 1 P32322 UNP 60 V +ATOM 428 N N . GLN A 1 61 ? -16.952 9.750 18.748 1.00 98.06 ? 61 GLN A N 1 P32322 UNP 61 Q +ATOM 429 C CA . GLN A 1 61 ? -17.924 10.776 19.141 1.00 98.06 ? 61 GLN A CA 1 P32322 UNP 61 Q +ATOM 430 C C . GLN A 1 61 ? -17.981 11.976 18.180 1.00 98.06 ? 61 GLN A C 1 P32322 UNP 61 Q +ATOM 431 C CB . GLN A 1 61 ? -17.577 11.259 20.554 1.00 98.06 ? 61 GLN A CB 1 P32322 UNP 61 Q +ATOM 432 O O . GLN A 1 61 ? -19.053 12.538 17.964 1.00 98.06 ? 61 GLN A O 1 P32322 UNP 61 Q +ATOM 433 C CG . GLN A 1 61 ? -17.856 10.181 21.611 1.00 98.06 ? 61 GLN A CG 1 P32322 UNP 61 Q +ATOM 434 C CD . GLN A 1 61 ? -17.393 10.586 23.004 1.00 98.06 ? 61 GLN A CD 1 P32322 UNP 61 Q +ATOM 435 N NE2 . GLN A 1 61 ? -17.738 9.817 24.013 1.00 98.06 ? 61 GLN A NE2 1 P32322 UNP 61 Q +ATOM 436 O OE1 . GLN A 1 61 ? -16.731 11.586 23.230 1.00 98.06 ? 61 GLN A OE1 1 P32322 UNP 61 Q +ATOM 437 N N . HIS A 1 62 ? -16.851 12.376 17.589 1.00 98.00 ? 62 HIS A N 1 P32322 UNP 62 H +ATOM 438 C CA . HIS A 1 62 ? -16.795 13.485 16.624 1.00 98.00 ? 62 HIS A CA 1 P32322 UNP 62 H +ATOM 439 C C . HIS A 1 62 ? -17.399 13.133 15.252 1.00 98.00 ? 62 HIS A C 1 P32322 UNP 62 H +ATOM 440 C CB . HIS A 1 62 ? -15.328 13.957 16.510 1.00 98.00 ? 62 HIS A CB 1 P32322 UNP 62 H +ATOM 441 O O . HIS A 1 62 ? -17.752 14.042 14.494 1.00 98.00 ? 62 HIS A O 1 P32322 UNP 62 H +ATOM 442 C CG . HIS A 1 62 ? -15.045 14.950 15.398 1.00 98.00 ? 62 HIS A CG 1 P32322 UNP 62 H +ATOM 443 C CD2 . HIS A 1 62 ? -14.760 14.587 14.114 1.00 98.00 ? 62 HIS A CD2 1 P32322 UNP 62 H +ATOM 444 N ND1 . HIS A 1 62 ? -15.083 16.359 15.468 1.00 98.00 ? 62 HIS A ND1 1 P32322 UNP 62 H +ATOM 445 C CE1 . HIS A 1 62 ? -14.883 16.776 14.206 1.00 98.00 ? 62 HIS A CE1 1 P32322 UNP 62 H +ATOM 446 N NE2 . HIS A 1 62 ? -14.666 15.741 13.380 1.00 98.00 ? 62 HIS A NE2 1 P32322 UNP 62 H +ATOM 447 N N . SER A 1 63 ? -17.480 11.850 14.898 1.00 98.25 ? 63 SER A N 1 P32322 UNP 63 S +ATOM 448 C CA . SER A 1 63 ? -17.620 11.413 13.505 1.00 98.25 ? 63 SER A CA 1 P32322 UNP 63 S +ATOM 449 C C . SER A 1 63 ? -19.024 10.931 13.152 1.00 98.25 ? 63 SER A C 1 P32322 UNP 63 S +ATOM 450 C CB . SER A 1 63 ? -16.579 10.342 13.192 1.00 98.25 ? 63 SER A CB 1 P32322 UNP 63 S +ATOM 451 O O . SER A 1 63 ? -19.719 10.341 13.968 1.00 98.25 ? 63 SER A O 1 P32322 UNP 63 S +ATOM 452 O OG . SER A 1 63 ? -15.308 10.882 13.488 1.00 98.25 ? 63 SER A OG 1 P32322 UNP 63 S +ATOM 453 N N . ASP A 1 64 ? -19.422 11.146 11.897 1.00 98.19 ? 64 ASP A N 1 P32322 UNP 64 D +ATOM 454 C CA . ASP A 1 64 ? -20.603 10.512 11.292 1.00 98.19 ? 64 ASP A CA 1 P32322 UNP 64 D +ATOM 455 C C . ASP A 1 64 ? -20.172 9.287 10.461 1.00 98.19 ? 64 ASP A C 1 P32322 UNP 64 D +ATOM 456 C CB . ASP A 1 64 ? -21.345 11.521 10.397 1.00 98.19 ? 64 ASP A CB 1 P32322 UNP 64 D +ATOM 457 O O . ASP A 1 64 ? -20.816 8.244 10.475 1.00 98.19 ? 64 ASP A O 1 P32322 UNP 64 D +ATOM 458 C CG . ASP A 1 64 ? -21.780 12.818 11.092 1.00 98.19 ? 64 ASP A CG 1 P32322 UNP 64 D +ATOM 459 O OD1 . ASP A 1 64 ? -22.422 12.752 12.157 1.00 98.19 ? 64 ASP A OD1 1 P32322 UNP 64 D +ATOM 460 O OD2 . ASP A 1 64 ? -21.493 13.899 10.506 1.00 98.19 ? 64 ASP A OD2 1 P32322 UNP 64 D +ATOM 461 N N . VAL A 1 65 ? -19.033 9.390 9.766 1.00 98.62 ? 65 VAL A N 1 P32322 UNP 65 V +ATOM 462 C CA . VAL A 1 65 ? -18.393 8.282 9.039 1.00 98.62 ? 65 VAL A CA 1 P32322 UNP 65 V +ATOM 463 C C . VAL A 1 65 ? -17.061 7.968 9.706 1.00 98.62 ? 65 VAL A C 1 P32322 UNP 65 V +ATOM 464 C CB . VAL A 1 65 ? -18.188 8.629 7.556 1.00 98.62 ? 65 VAL A CB 1 P32322 UNP 65 V +ATOM 465 O O . VAL A 1 65 ? -16.213 8.853 9.833 1.00 98.62 ? 65 VAL A O 1 P32322 UNP 65 V +ATOM 466 C CG1 . VAL A 1 65 ? -17.485 7.493 6.803 1.00 98.62 ? 65 VAL A CG1 1 P32322 UNP 65 V +ATOM 467 C CG2 . VAL A 1 65 ? -19.518 8.928 6.853 1.00 98.62 ? 65 VAL A CG2 1 P32322 UNP 65 V +ATOM 468 N N . LEU A 1 66 ? -16.866 6.718 10.117 1.00 98.75 ? 66 LEU A N 1 P32322 UNP 66 L +ATOM 469 C CA . LEU A 1 66 ? -15.699 6.279 10.876 1.00 98.75 ? 66 LEU A CA 1 P32322 UNP 66 L +ATOM 470 C C . LEU A 1 66 ? -14.880 5.262 10.077 1.00 98.75 ? 66 LEU A C 1 P32322 UNP 66 L +ATOM 471 C CB . LEU A 1 66 ? -16.188 5.708 12.215 1.00 98.75 ? 66 LEU A CB 1 P32322 UNP 66 L +ATOM 472 O O . LEU A 1 66 ? -15.263 4.102 9.956 1.00 98.75 ? 66 LEU A O 1 P32322 UNP 66 L +ATOM 473 C CG . LEU A 1 66 ? -15.043 5.332 13.170 1.00 98.75 ? 66 LEU A CG 1 P32322 UNP 66 L +ATOM 474 C CD1 . LEU A 1 66 ? -14.331 6.579 13.706 1.00 98.75 ? 66 LEU A CD1 1 P32322 UNP 66 L +ATOM 475 C CD2 . LEU A 1 66 ? -15.615 4.543 14.341 1.00 98.75 ? 66 LEU A CD2 1 P32322 UNP 66 L +ATOM 476 N N . PHE A 1 67 ? -13.726 5.682 9.572 1.00 98.75 ? 67 PHE A N 1 P32322 UNP 67 F +ATOM 477 C CA . PHE A 1 67 ? -12.777 4.812 8.888 1.00 98.75 ? 67 PHE A CA 1 P32322 UNP 67 F +ATOM 478 C C . PHE A 1 67 ? -11.897 4.053 9.884 1.00 98.75 ? 67 PHE A C 1 P32322 UNP 67 F +ATOM 479 C CB . PHE A 1 67 ? -11.915 5.623 7.917 1.00 98.75 ? 67 PHE A CB 1 P32322 UNP 67 F +ATOM 480 O O . PHE A 1 67 ? -11.214 4.655 10.716 1.00 98.75 ? 67 PHE A O 1 P32322 UNP 67 F +ATOM 481 C CG . PHE A 1 67 ? -12.648 6.076 6.671 1.00 98.75 ? 67 PHE A CG 1 P32322 UNP 67 F +ATOM 482 C CD1 . PHE A 1 67 ? -12.661 5.256 5.530 1.00 98.75 ? 67 PHE A CD1 1 P32322 UNP 67 F +ATOM 483 C CD2 . PHE A 1 67 ? -13.333 7.303 6.655 1.00 98.75 ? 67 PHE A CD2 1 P32322 UNP 67 F +ATOM 484 C CE1 . PHE A 1 67 ? -13.340 5.666 4.369 1.00 98.75 ? 67 PHE A CE1 1 P32322 UNP 67 F +ATOM 485 C CE2 . PHE A 1 67 ? -14.029 7.706 5.500 1.00 98.75 ? 67 PHE A CE2 1 P32322 UNP 67 F +ATOM 486 C CZ . PHE A 1 67 ? -14.031 6.888 4.356 1.00 98.75 ? 67 PHE A CZ 1 P32322 UNP 67 F +ATOM 487 N N . LEU A 1 68 ? -11.833 2.732 9.744 1.00 98.50 ? 68 LEU A N 1 P32322 UNP 68 L +ATOM 488 C CA . LEU A 1 68 ? -10.878 1.882 10.450 1.00 98.50 ? 68 LEU A CA 1 P32322 UNP 68 L +ATOM 489 C C . LEU A 1 68 ? -9.630 1.708 9.572 1.00 98.50 ? 68 LEU A C 1 P32322 UNP 68 L +ATOM 490 C CB . LEU A 1 68 ? -11.526 0.545 10.854 1.00 98.50 ? 68 LEU A CB 1 P32322 UNP 68 L +ATOM 491 O O . LEU A 1 68 ? -9.594 0.881 8.661 1.00 98.50 ? 68 LEU A O 1 P32322 UNP 68 L +ATOM 492 C CG . LEU A 1 68 ? -12.898 0.639 11.548 1.00 98.50 ? 68 LEU A CG 1 P32322 UNP 68 L +ATOM 493 C CD1 . LEU A 1 68 ? -13.371 -0.768 11.909 1.00 98.50 ? 68 LEU A CD1 1 P32322 UNP 68 L +ATOM 494 C CD2 . LEU A 1 68 ? -12.845 1.478 12.827 1.00 98.50 ? 68 LEU A CD2 1 P32322 UNP 68 L +ATOM 495 N N . ALA A 1 69 ? -8.604 2.516 9.841 1.00 97.69 ? 69 ALA A N 1 P32322 UNP 69 A +ATOM 496 C CA . ALA A 1 69 ? -7.353 2.602 9.084 1.00 97.69 ? 69 ALA A CA 1 P32322 UNP 69 A +ATOM 497 C C . ALA A 1 69 ? -6.149 2.031 9.864 1.00 97.69 ? 69 ALA A C 1 P32322 UNP 69 A +ATOM 498 C CB . ALA A 1 69 ? -7.162 4.054 8.624 1.00 97.69 ? 69 ALA A CB 1 P32322 UNP 69 A +ATOM 499 O O . ALA A 1 69 ? -5.015 2.510 9.745 1.00 97.69 ? 69 ALA A O 1 P32322 UNP 69 A +ATOM 500 N N . VAL A 1 70 ? -6.395 0.999 10.676 1.00 95.62 ? 70 VAL A N 1 P32322 UNP 70 V +ATOM 501 C CA . VAL A 1 70 ? -5.375 0.254 11.431 1.00 95.62 ? 70 VAL A CA 1 P32322 UNP 70 V +ATOM 502 C C . VAL A 1 70 ? -4.996 -1.053 10.730 1.00 95.62 ? 70 VAL A C 1 P32322 UNP 70 V +ATOM 503 C CB . VAL A 1 70 ? -5.801 0.009 12.893 1.00 95.62 ? 70 VAL A CB 1 P32322 UNP 70 V +ATOM 504 O O . VAL A 1 70 ? -5.608 -1.468 9.748 1.00 95.62 ? 70 VAL A O 1 P32322 UNP 70 V +ATOM 505 C CG1 . VAL A 1 70 ? -5.965 1.322 13.655 1.00 95.62 ? 70 VAL A CG1 1 P32322 UNP 70 V +ATOM 506 C CG2 . VAL A 1 70 ? -7.088 -0.806 13.010 1.00 95.62 ? 70 VAL A CG2 1 P32322 UNP 70 V +ATOM 507 N N . LYS A 1 71 ? -3.951 -1.722 11.227 1.00 92.19 ? 71 LYS A N 1 P32322 UNP 71 K +ATOM 508 C CA . LYS A 1 71 ? -3.560 -3.044 10.716 1.00 92.19 ? 71 LYS A CA 1 P32322 UNP 71 K +ATOM 509 C C . LYS A 1 71 ? -4.650 -4.086 11.026 1.00 92.19 ? 71 LYS A C 1 P32322 UNP 71 K +ATOM 510 C CB . LYS A 1 71 ? -2.214 -3.482 11.304 1.00 92.19 ? 71 LYS A CB 1 P32322 UNP 71 K +ATOM 511 O O . LYS A 1 71 ? -5.256 -3.985 12.089 1.00 92.19 ? 71 LYS A O 1 P32322 UNP 71 K +ATOM 512 C CG . LYS A 1 71 ? -1.064 -2.565 10.873 1.00 92.19 ? 71 LYS A CG 1 P32322 UNP 71 K +ATOM 513 C CD . LYS A 1 71 ? 0.254 -3.063 11.470 1.00 92.19 ? 71 LYS A CD 1 P32322 UNP 71 K +ATOM 514 C CE . LYS A 1 71 ? 1.393 -2.117 11.089 1.00 92.19 ? 71 LYS A CE 1 P32322 UNP 71 K +ATOM 515 N NZ . LYS A 1 71 ? 2.630 -2.445 11.837 1.00 92.19 ? 71 LYS A NZ 1 P32322 UNP 71 K +ATOM 516 N N . PRO A 1 72 ? -4.824 -5.133 10.196 1.00 91.88 ? 72 PRO A N 1 P32322 UNP 72 P +ATOM 517 C CA . PRO A 1 72 ? -5.900 -6.121 10.360 1.00 91.88 ? 72 PRO A CA 1 P32322 UNP 72 P +ATOM 518 C C . PRO A 1 72 ? -6.013 -6.727 11.765 1.00 91.88 ? 72 PRO A C 1 P32322 UNP 72 P +ATOM 519 C CB . PRO A 1 72 ? -5.627 -7.185 9.291 1.00 91.88 ? 72 PRO A CB 1 P32322 UNP 72 P +ATOM 520 O O . PRO A 1 72 ? -7.079 -6.702 12.364 1.00 91.88 ? 72 PRO A O 1 P32322 UNP 72 P +ATOM 521 C CG . PRO A 1 72 ? -4.979 -6.372 8.174 1.00 91.88 ? 72 PRO A CG 1 P32322 UNP 72 P +ATOM 522 C CD . PRO A 1 72 ? -4.128 -5.361 8.932 1.00 91.88 ? 72 PRO A CD 1 P32322 UNP 72 P +ATOM 523 N N . HIS A 1 73 ? -4.892 -7.157 12.350 1.00 90.12 ? 73 HIS A N 1 P32322 UNP 73 H +ATOM 524 C CA . HIS A 1 73 ? -4.856 -7.749 13.696 1.00 90.12 ? 73 HIS A CA 1 P32322 UNP 73 H +ATOM 525 C C . HIS A 1 73 ? -5.199 -6.776 14.836 1.00 90.12 ? 73 HIS A C 1 P32322 UNP 73 H +ATOM 526 C CB . HIS A 1 73 ? -3.465 -8.353 13.939 1.00 90.12 ? 73 HIS A CB 1 P32322 UNP 73 H +ATOM 527 O O . HIS A 1 73 ? -5.368 -7.210 15.968 1.00 90.12 ? 73 HIS A O 1 P32322 UNP 73 H +ATOM 528 C CG . HIS A 1 73 ? -2.349 -7.335 13.922 1.00 90.12 ? 73 HIS A CG 1 P32322 UNP 73 H +ATOM 529 C CD2 . HIS A 1 73 ? -1.841 -6.635 14.987 1.00 90.12 ? 73 HIS A CD2 1 P32322 UNP 73 H +ATOM 530 N ND1 . HIS A 1 73 ? -1.629 -6.965 12.812 1.00 90.12 ? 73 HIS A ND1 1 P32322 UNP 73 H +ATOM 531 C CE1 . HIS A 1 73 ? -0.702 -6.078 13.200 1.00 90.12 ? 73 HIS A CE1 1 P32322 UNP 73 H +ATOM 532 N NE2 . HIS A 1 73 ? -0.789 -5.833 14.512 1.00 90.12 ? 73 HIS A NE2 1 P32322 UNP 73 H +ATOM 533 N N . ILE A 1 74 ? -5.251 -5.469 14.572 1.00 93.38 ? 74 ILE A N 1 P32322 UNP 74 I +ATOM 534 C CA . ILE A 1 74 ? -5.605 -4.450 15.567 1.00 93.38 ? 74 ILE A CA 1 P32322 UNP 74 I +ATOM 535 C C . ILE A 1 74 ? -7.129 -4.254 15.609 1.00 93.38 ? 74 ILE A C 1 P32322 UNP 74 I +ATOM 536 C CB . ILE A 1 74 ? -4.823 -3.138 15.300 1.00 93.38 ? 74 ILE A CB 1 P32322 UNP 74 I +ATOM 537 O O . ILE A 1 74 ? -7.653 -3.839 16.637 1.00 93.38 ? 74 ILE A O 1 P32322 UNP 74 I +ATOM 538 C CG1 . ILE A 1 74 ? -3.299 -3.404 15.304 1.00 93.38 ? 74 ILE A CG1 1 P32322 UNP 74 I +ATOM 539 C CG2 . ILE A 1 74 ? -5.171 -2.047 16.324 1.00 93.38 ? 74 ILE A CG2 1 P32322 UNP 74 I +ATOM 540 C CD1 . ILE A 1 74 ? -2.419 -2.178 15.024 1.00 93.38 ? 74 ILE A CD1 1 P32322 UNP 74 I +ATOM 541 N N . ILE A 1 75 ? -7.849 -4.587 14.529 1.00 94.88 ? 75 ILE A N 1 P32322 UNP 75 I +ATOM 542 C CA . ILE A 1 75 ? -9.291 -4.332 14.409 1.00 94.88 ? 75 ILE A CA 1 P32322 UNP 75 I +ATOM 543 C C . ILE A 1 75 ? -10.104 -4.944 15.558 1.00 94.88 ? 75 ILE A C 1 P32322 UNP 75 I +ATOM 544 C CB . ILE A 1 75 ? -9.837 -4.745 13.019 1.00 94.88 ? 75 ILE A CB 1 P32322 UNP 75 I +ATOM 545 O O . ILE A 1 75 ? -10.867 -4.186 16.151 1.00 94.88 ? 75 ILE A O 1 P32322 UNP 75 I +ATOM 546 C CG1 . ILE A 1 75 ? -9.213 -3.909 11.881 1.00 94.88 ? 75 ILE A CG1 1 P32322 UNP 75 I +ATOM 547 C CG2 . ILE A 1 75 ? -11.373 -4.641 12.983 1.00 94.88 ? 75 ILE A CG2 1 P32322 UNP 75 I +ATOM 548 C CD1 . ILE A 1 75 ? -9.714 -2.464 11.784 1.00 94.88 ? 75 ILE A CD1 1 P32322 UNP 75 I +ATOM 549 N N . PRO A 1 76 ? -9.936 -6.225 15.954 1.00 93.25 ? 76 PRO A N 1 P32322 UNP 76 P +ATOM 550 C CA . PRO A 1 76 ? -10.738 -6.797 17.038 1.00 93.25 ? 76 PRO A CA 1 P32322 UNP 76 P +ATOM 551 C C . PRO A 1 76 ? -10.637 -5.997 18.345 1.00 93.25 ? 76 PRO A C 1 P32322 UNP 76 P +ATOM 552 C CB . PRO A 1 76 ? -10.240 -8.237 17.205 1.00 93.25 ? 76 PRO A CB 1 P32322 UNP 76 P +ATOM 553 O O . PRO A 1 76 ? -11.657 -5.679 18.946 1.00 93.25 ? 76 PRO A O 1 P32322 UNP 76 P +ATOM 554 C CG . PRO A 1 76 ? -9.694 -8.582 15.821 1.00 93.25 ? 76 PRO A CG 1 P32322 UNP 76 P +ATOM 555 C CD . PRO A 1 76 ? -9.094 -7.257 15.360 1.00 93.25 ? 76 PRO A CD 1 P32322 UNP 76 P +ATOM 556 N N . PHE A 1 77 ? -9.422 -5.579 18.722 1.00 94.12 ? 77 PHE A N 1 P32322 UNP 77 F +ATOM 557 C CA . PHE A 1 77 ? -9.180 -4.784 19.930 1.00 94.12 ? 77 PHE A CA 1 P32322 UNP 77 F +ATOM 558 C C . PHE A 1 77 ? -9.843 -3.407 19.867 1.00 94.12 ? 77 PHE A C 1 P32322 UNP 77 F +ATOM 559 C CB . PHE A 1 77 ? -7.669 -4.607 20.137 1.00 94.12 ? 77 PHE A CB 1 P32322 UNP 77 F +ATOM 560 O O . PHE A 1 77 ? -10.387 -2.942 20.862 1.00 94.12 ? 77 PHE A O 1 P32322 UNP 77 F +ATOM 561 C CG . PHE A 1 77 ? -6.899 -5.905 20.258 1.00 94.12 ? 77 PHE A CG 1 P32322 UNP 77 F +ATOM 562 C CD1 . PHE A 1 77 ? -6.935 -6.630 21.461 1.00 94.12 ? 77 PHE A CD1 1 P32322 UNP 77 F +ATOM 563 C CD2 . PHE A 1 77 ? -6.170 -6.405 19.163 1.00 94.12 ? 77 PHE A CD2 1 P32322 UNP 77 F +ATOM 564 C CE1 . PHE A 1 77 ? -6.242 -7.848 21.571 1.00 94.12 ? 77 PHE A CE1 1 P32322 UNP 77 F +ATOM 565 C CE2 . PHE A 1 77 ? -5.475 -7.622 19.272 1.00 94.12 ? 77 PHE A CE2 1 P32322 UNP 77 F +ATOM 566 C CZ . PHE A 1 77 ? -5.512 -8.344 20.477 1.00 94.12 ? 77 PHE A CZ 1 P32322 UNP 77 F +ATOM 567 N N . ILE A 1 78 ? -9.814 -2.763 18.697 1.00 96.31 ? 78 ILE A N 1 P32322 UNP 78 I +ATOM 568 C CA . ILE A 1 78 ? -10.472 -1.470 18.488 1.00 96.31 ? 78 ILE A CA 1 P32322 UNP 78 I +ATOM 569 C C . ILE A 1 78 ? -11.985 -1.624 18.596 1.00 96.31 ? 78 ILE A C 1 P32322 UNP 78 I +ATOM 570 C CB . ILE A 1 78 ? -10.061 -0.871 17.127 1.00 96.31 ? 78 ILE A CB 1 P32322 UNP 78 I +ATOM 571 O O . ILE A 1 78 ? -12.621 -0.822 19.267 1.00 96.31 ? 78 ILE A O 1 P32322 UNP 78 I +ATOM 572 C CG1 . ILE A 1 78 ? -8.553 -0.553 17.084 1.00 96.31 ? 78 ILE A CG1 1 P32322 UNP 78 I +ATOM 573 C CG2 . ILE A 1 78 ? -10.889 0.366 16.748 1.00 96.31 ? 78 ILE A CG2 1 P32322 UNP 78 I +ATOM 574 C CD1 . ILE A 1 78 ? -8.042 0.488 18.084 1.00 96.31 ? 78 ILE A CD1 1 P32322 UNP 78 I +ATOM 575 N N . LEU A 1 79 ? -12.569 -2.649 17.971 1.00 96.94 ? 79 LEU A N 1 P32322 UNP 79 L +ATOM 576 C CA . LEU A 1 79 ? -14.015 -2.876 18.034 1.00 96.94 ? 79 LEU A CA 1 P32322 UNP 79 L +ATOM 577 C C . LEU A 1 79 ? -14.486 -3.157 19.464 1.00 96.94 ? 79 LEU A C 1 P32322 UNP 79 L +ATOM 578 C CB . LEU A 1 79 ? -14.412 -4.031 17.106 1.00 96.94 ? 79 LEU A CB 1 P32322 UNP 79 L +ATOM 579 O O . LEU A 1 79 ? -15.533 -2.647 19.852 1.00 96.94 ? 79 LEU A O 1 P32322 UNP 79 L +ATOM 580 C CG . LEU A 1 79 ? -14.145 -3.787 15.614 1.00 96.94 ? 79 LEU A CG 1 P32322 UNP 79 L +ATOM 581 C CD1 . LEU A 1 79 ? -14.537 -5.044 14.847 1.00 96.94 ? 79 LEU A CD1 1 P32322 UNP 79 L +ATOM 582 C CD2 . LEU A 1 79 ? -14.912 -2.600 15.033 1.00 96.94 ? 79 LEU A CD2 1 P32322 UNP 79 L +ATOM 583 N N . ASP A 1 80 ? -13.705 -3.901 20.250 1.00 96.06 ? 80 ASP A N 1 P32322 UNP 80 D +ATOM 584 C CA . ASP A 1 80 ? -13.991 -4.128 21.671 1.00 96.06 ? 80 ASP A CA 1 P32322 UNP 80 D +ATOM 585 C C . ASP A 1 80 ? -13.849 -2.828 22.498 1.00 96.06 ? 80 ASP A C 1 P32322 UNP 80 D +ATOM 586 C CB . ASP A 1 80 ? -13.083 -5.255 22.213 1.00 96.06 ? 80 ASP A CB 1 P32322 UNP 80 D +ATOM 587 O O . ASP A 1 80 ? -14.630 -2.600 23.420 1.00 96.06 ? 80 ASP A O 1 P32322 UNP 80 D +ATOM 588 C CG . ASP A 1 80 ? -13.395 -6.662 21.656 1.00 96.06 ? 80 ASP A CG 1 P32322 UNP 80 D +ATOM 589 O OD1 . ASP A 1 80 ? -14.565 -6.967 21.337 1.00 96.06 ? 80 ASP A OD1 1 P32322 UNP 80 D +ATOM 590 O OD2 . ASP A 1 80 ? -12.477 -7.513 21.560 1.00 96.06 ? 80 ASP A OD2 1 P32322 UNP 80 D +ATOM 591 N N . GLU A 1 81 ? -12.896 -1.947 22.157 1.00 97.19 ? 81 GLU A N 1 P32322 UNP 81 E +ATOM 592 C CA . GLU A 1 81 ? -12.690 -0.646 22.820 1.00 97.19 ? 81 GLU A CA 1 P32322 UNP 81 E +ATOM 593 C C . GLU A 1 81 ? -13.834 0.343 22.549 1.00 97.19 ? 81 GLU A C 1 P32322 UNP 81 E +ATOM 594 C CB . GLU A 1 81 ? -11.342 -0.036 22.365 1.00 97.19 ? 81 GLU A CB 1 P32322 UNP 81 E +ATOM 595 O O . GLU A 1 81 ? -14.322 0.994 23.473 1.00 97.19 ? 81 GLU A O 1 P32322 UNP 81 E +ATOM 596 C CG . GLU A 1 81 ? -10.970 1.285 23.072 1.00 97.19 ? 81 GLU A CG 1 P32322 UNP 81 E +ATOM 597 C CD . GLU A 1 81 ? -9.813 2.058 22.403 1.00 97.19 ? 81 GLU A CD 1 P32322 UNP 81 E +ATOM 598 O OE1 . GLU A 1 81 ? -9.643 3.261 22.715 1.00 97.19 ? 81 GLU A OE1 1 P32322 UNP 81 E +ATOM 599 O OE2 . GLU A 1 81 ? -9.105 1.512 21.525 1.00 97.19 ? 81 GLU A OE2 1 P32322 UNP 81 E +ATOM 600 N N . ILE A 1 82 ? -14.242 0.487 21.284 1.00 97.44 ? 82 ILE A N 1 P32322 UNP 82 I +ATOM 601 C CA . ILE A 1 82 ? -15.164 1.546 20.843 1.00 97.44 ? 82 ILE A CA 1 P32322 UNP 82 I +ATOM 602 C C . ILE A 1 82 ? -16.594 1.071 20.584 1.00 97.44 ? 82 ILE A C 1 P32322 UNP 82 I +ATOM 603 C CB . ILE A 1 82 ? -14.618 2.288 19.611 1.00 97.44 ? 82 ILE A CB 1 P32322 UNP 82 I +ATOM 604 O O . ILE A 1 82 ? -17.465 1.897 20.313 1.00 97.44 ? 82 ILE A O 1 P32322 UNP 82 I +ATOM 605 C CG1 . ILE A 1 82 ? -14.412 1.383 18.376 1.00 97.44 ? 82 ILE A CG1 1 P32322 UNP 82 I +ATOM 606 C CG2 . ILE A 1 82 ? -13.325 3.054 19.948 1.00 97.44 ? 82 ILE A CG2 1 P32322 UNP 82 I +ATOM 607 C CD1 . ILE A 1 82 ? -14.954 2.000 17.092 1.00 97.44 ? 82 ILE A CD1 1 P32322 UNP 82 I +ATOM 608 N N . GLY A 1 83 ? -16.864 -0.235 20.648 1.00 97.19 ? 83 GLY A N 1 P32322 UNP 83 G +ATOM 609 C CA . GLY A 1 83 ? -18.164 -0.806 20.290 1.00 97.19 ? 83 GLY A CA 1 P32322 UNP 83 G +ATOM 610 C C . GLY A 1 83 ? -19.331 -0.201 21.073 1.00 97.19 ? 83 GLY A C 1 P32322 UNP 83 G +ATOM 611 O O . GLY A 1 83 ? -20.374 0.086 20.492 1.00 97.19 ? 83 GLY A O 1 P32322 UNP 83 G +ATOM 612 N N . ALA A 1 84 ? -19.129 0.089 22.363 1.00 97.62 ? 84 ALA A N 1 P32322 UNP 84 A +ATOM 613 C CA . ALA A 1 84 ? -20.128 0.730 23.224 1.00 97.62 ? 84 ALA A CA 1 P32322 UNP 84 A +ATOM 614 C C . ALA A 1 84 ? -20.416 2.204 22.868 1.00 97.62 ? 84 ALA A C 1 P32322 UNP 84 A +ATOM 615 C CB . ALA A 1 84 ? -19.645 0.607 24.674 1.00 97.62 ? 84 ALA A CB 1 P32322 UNP 84 A +ATOM 616 O O . ALA A 1 84 ? -21.452 2.736 23.259 1.00 97.62 ? 84 ALA A O 1 P32322 UNP 84 A +ATOM 617 N N . ASP A 1 85 ? -19.511 2.862 22.141 1.00 98.06 ? 85 ASP A N 1 P32322 UNP 85 D +ATOM 618 C CA . ASP A 1 85 ? -19.632 4.258 21.711 1.00 98.06 ? 85 ASP A CA 1 P32322 UNP 85 D +ATOM 619 C C . ASP A 1 85 ? -20.214 4.394 20.294 1.00 98.06 ? 85 ASP A C 1 P32322 UNP 85 D +ATOM 620 C CB . ASP A 1 85 ? -18.260 4.937 21.826 1.00 98.06 ? 85 ASP A CB 1 P32322 UNP 85 D +ATOM 621 O O . ASP A 1 85 ? -20.507 5.504 19.841 1.00 98.06 ? 85 ASP A O 1 P32322 UNP 85 D +ATOM 622 C CG . ASP A 1 85 ? -17.824 5.084 23.283 1.00 98.06 ? 85 ASP A CG 1 P32322 UNP 85 D +ATOM 623 O OD1 . ASP A 1 85 ? -18.423 5.904 24.016 1.00 98.06 ? 85 ASP A OD1 1 P32322 UNP 85 D +ATOM 624 O OD2 . ASP A 1 85 ? -16.826 4.471 23.721 1.00 98.06 ? 85 ASP A OD2 1 P32322 UNP 85 D +ATOM 625 N N . ILE A 1 86 ? -20.407 3.279 19.580 1.00 98.12 ? 86 ILE A N 1 P32322 UNP 86 I +ATOM 626 C CA . ILE A 1 86 ? -21.092 3.290 18.290 1.00 98.12 ? 86 ILE A CA 1 P32322 UNP 86 I +ATOM 627 C C . ILE A 1 86 ? -22.573 3.623 18.502 1.00 98.12 ? 86 ILE A C 1 P32322 UNP 86 I +ATOM 628 C CB . ILE A 1 86 ? -20.883 1.970 17.514 1.00 98.12 ? 86 ILE A CB 1 P32322 UNP 86 I +ATOM 629 O O . ILE A 1 86 ? -23.300 2.968 19.247 1.00 98.12 ? 86 ILE A O 1 P32322 UNP 86 I +ATOM 630 C CG1 . ILE A 1 86 ? -19.402 1.730 17.136 1.00 98.12 ? 86 ILE A CG1 1 P32322 UNP 86 I +ATOM 631 C CG2 . ILE A 1 86 ? -21.754 1.922 16.242 1.00 98.12 ? 86 ILE A CG2 1 P32322 UNP 86 I +ATOM 632 C CD1 . ILE A 1 86 ? -18.761 2.809 16.247 1.00 98.12 ? 86 ILE A CD1 1 P32322 UNP 86 I +ATOM 633 N N . GLU A 1 87 ? -23.013 4.658 17.798 1.00 97.75 ? 87 GLU A N 1 P32322 UNP 87 E +ATOM 634 C CA . GLU A 1 87 ? -24.398 5.131 17.676 1.00 97.75 ? 87 GLU A CA 1 P32322 UNP 87 E +ATOM 635 C C . GLU A 1 87 ? -25.008 4.898 16.283 1.00 97.75 ? 87 GLU A C 1 P32322 UNP 87 E +ATOM 636 C CB . GLU A 1 87 ? -24.502 6.607 18.068 1.00 97.75 ? 87 GLU A CB 1 P32322 UNP 87 E +ATOM 637 O O . GLU A 1 87 ? -24.260 4.779 15.316 1.00 97.75 ? 87 GLU A O 1 P32322 UNP 87 E +ATOM 638 C CG . GLU A 1 87 ? -24.065 6.875 19.517 1.00 97.75 ? 87 GLU A CG 1 P32322 UNP 87 E +ATOM 639 C CD . GLU A 1 87 ? -24.196 8.365 19.821 1.00 97.75 ? 87 GLU A CD 1 P32322 UNP 87 E +ATOM 640 O OE1 . GLU A 1 87 ? -23.180 9.027 20.129 1.00 97.75 ? 87 GLU A OE1 1 P32322 UNP 87 E +ATOM 641 O OE2 . GLU A 1 87 ? -25.275 8.932 19.548 1.00 97.75 ? 87 GLU A OE2 1 P32322 UNP 87 E +ATOM 642 N N . ASP A 1 88 ? -26.345 4.925 16.157 1.00 96.69 ? 88 ASP A N 1 P32322 UNP 88 D +ATOM 643 C CA . ASP A 1 88 ? -27.081 4.664 14.897 1.00 96.69 ? 88 ASP A CA 1 P32322 UNP 88 D +ATOM 644 C C . ASP A 1 88 ? -26.673 5.583 13.741 1.00 96.69 ? 88 ASP A C 1 P32322 UNP 88 D +ATOM 645 C CB . ASP A 1 88 ? -28.600 4.847 15.098 1.00 96.69 ? 88 ASP A CB 1 P32322 UNP 88 D +ATOM 646 O O . ASP A 1 88 ? -26.778 5.206 12.573 1.00 96.69 ? 88 ASP A O 1 P32322 UNP 88 D +ATOM 647 C CG . ASP A 1 88 ? -29.193 3.872 16.107 1.00 96.69 ? 88 ASP A CG 1 P32322 UNP 88 D +ATOM 648 O OD1 . ASP A 1 88 ? -28.733 2.711 16.139 1.00 96.69 ? 88 ASP A OD1 1 P32322 UNP 88 D +ATOM 649 O OD2 . ASP A 1 88 ? -29.943 4.330 16.995 1.00 96.69 ? 88 ASP A OD2 1 P32322 UNP 88 D +ATOM 650 N N . ARG A 1 89 ? -26.189 6.795 14.052 1.00 97.19 ? 89 ARG A N 1 P32322 UNP 89 R +ATOM 651 C CA . ARG A 1 89 ? -25.704 7.743 13.041 1.00 97.19 ? 89 ARG A CA 1 P32322 UNP 89 R +ATOM 652 C C . ARG A 1 89 ? -24.464 7.240 12.299 1.00 97.19 ? 89 ARG A C 1 P32322 UNP 89 R +ATOM 653 C CB . ARG A 1 89 ? -25.444 9.138 13.643 1.00 97.19 ? 89 ARG A CB 1 P32322 UNP 89 R +ATOM 654 O O . ARG A 1 89 ? -24.259 7.668 11.167 1.00 97.19 ? 89 ARG A O 1 P32322 UNP 89 R +ATOM 655 C CG . ARG A 1 89 ? -24.260 9.184 14.625 1.00 97.19 ? 89 ARG A CG 1 P32322 UNP 89 R +ATOM 656 C CD . ARG A 1 89 ? -23.789 10.614 14.921 1.00 97.19 ? 89 ARG A CD 1 P32322 UNP 89 R +ATOM 657 N NE . ARG A 1 89 ? -22.675 10.583 15.888 1.00 97.19 ? 89 ARG A NE 1 P32322 UNP 89 R +ATOM 658 N NH1 . ARG A 1 89 ? -23.964 10.471 17.761 1.00 97.19 ? 89 ARG A NH1 1 P32322 UNP 89 R +ATOM 659 N NH2 . ARG A 1 89 ? -21.791 10.148 17.953 1.00 97.19 ? 89 ARG A NH2 1 P32322 UNP 89 R +ATOM 660 C CZ . ARG A 1 89 ? -22.802 10.418 17.190 1.00 97.19 ? 89 ARG A CZ 1 P32322 UNP 89 R +ATOM 661 N N . HIS A 1 90 ? -23.650 6.386 12.926 1.00 98.50 ? 90 HIS A N 1 P32322 UNP 90 H +ATOM 662 C CA . HIS A 1 90 ? -22.328 6.056 12.409 1.00 98.50 ? 90 HIS A CA 1 P32322 UNP 90 H +ATOM 663 C C . HIS A 1 90 ? -22.403 5.069 11.255 1.00 98.50 ? 90 HIS A C 1 P32322 UNP 90 H +ATOM 664 C CB . HIS A 1 90 ? -21.387 5.507 13.484 1.00 98.50 ? 90 HIS A CB 1 P32322 UNP 90 H +ATOM 665 O O . HIS A 1 90 ? -23.103 4.063 11.331 1.00 98.50 ? 90 HIS A O 1 P32322 UNP 90 H +ATOM 666 C CG . HIS A 1 90 ? -21.144 6.448 14.626 1.00 98.50 ? 90 HIS A CG 1 P32322 UNP 90 H +ATOM 667 C CD2 . HIS A 1 90 ? -20.269 7.495 14.704 1.00 98.50 ? 90 HIS A CD2 1 P32322 UNP 90 H +ATOM 668 N ND1 . HIS A 1 90 ? -21.764 6.350 15.833 1.00 98.50 ? 90 HIS A ND1 1 P32322 UNP 90 H +ATOM 669 C CE1 . HIS A 1 90 ? -21.239 7.265 16.663 1.00 98.50 ? 90 HIS A CE1 1 P32322 UNP 90 H +ATOM 670 N NE2 . HIS A 1 90 ? -20.357 8.020 16.001 1.00 98.50 ? 90 HIS A NE2 1 P32322 UNP 90 H +ATOM 671 N N . ILE A 1 91 ? -21.586 5.323 10.238 1.00 98.62 ? 91 ILE A N 1 P32322 UNP 91 I +ATOM 672 C CA . ILE A 1 91 ? -21.225 4.339 9.219 1.00 98.62 ? 91 ILE A CA 1 P32322 UNP 91 I +ATOM 673 C C . ILE A 1 91 ? -19.776 3.931 9.485 1.00 98.62 ? 91 ILE A C 1 P32322 UNP 91 I +ATOM 674 C CB . ILE A 1 91 ? -21.427 4.910 7.801 1.00 98.62 ? 91 ILE A CB 1 P32322 UNP 91 I +ATOM 675 O O . ILE A 1 91 ? -18.864 4.758 9.384 1.00 98.62 ? 91 ILE A O 1 P32322 UNP 91 I +ATOM 676 C CG1 . ILE A 1 91 ? -22.875 5.410 7.586 1.00 98.62 ? 91 ILE A CG1 1 P32322 UNP 91 I +ATOM 677 C CG2 . ILE A 1 91 ? -21.076 3.831 6.759 1.00 98.62 ? 91 ILE A CG2 1 P32322 UNP 91 I +ATOM 678 C CD1 . ILE A 1 91 ? -23.032 6.255 6.316 1.00 98.62 ? 91 ILE A CD1 1 P32322 UNP 91 I +ATOM 679 N N . VAL A 1 92 ? -19.560 2.669 9.851 1.00 98.69 ? 92 VAL A N 1 P32322 UNP 92 V +ATOM 680 C CA . VAL A 1 92 ? -18.228 2.117 10.120 1.00 98.69 ? 92 VAL A CA 1 P32322 UNP 92 V +ATOM 681 C C . VAL A 1 92 ? -17.639 1.589 8.817 1.00 98.69 ? 92 VAL A C 1 P32322 UNP 92 V +ATOM 682 C CB . VAL A 1 92 ? -18.278 1.024 11.204 1.00 98.69 ? 92 VAL A CB 1 P32322 UNP 92 V +ATOM 683 O O . VAL A 1 92 ? -18.131 0.615 8.254 1.00 98.69 ? 92 VAL A O 1 P32322 UNP 92 V +ATOM 684 C CG1 . VAL A 1 92 ? -16.874 0.473 11.492 1.00 98.69 ? 92 VAL A CG1 1 P32322 UNP 92 V +ATOM 685 C CG2 . VAL A 1 92 ? -18.844 1.576 12.521 1.00 98.69 ? 92 VAL A CG2 1 P32322 UNP 92 V +ATOM 686 N N . VAL A 1 93 ? -16.567 2.217 8.339 1.00 98.75 ? 93 VAL A N 1 P32322 UNP 93 V +ATOM 687 C CA . VAL A 1 93 ? -15.912 1.876 7.072 1.00 98.75 ? 93 VAL A CA 1 P32322 UNP 93 V +ATOM 688 C C . VAL A 1 93 ? -14.579 1.190 7.351 1.00 98.75 ? 93 VAL A C 1 P32322 UNP 93 V +ATOM 689 C CB . VAL A 1 93 ? -15.743 3.103 6.161 1.00 98.75 ? 93 VAL A CB 1 P32322 UNP 93 V +ATOM 690 O O . VAL A 1 93 ? -13.612 1.830 7.760 1.00 98.75 ? 93 VAL A O 1 P32322 UNP 93 V +ATOM 691 C CG1 . VAL A 1 93 ? -15.224 2.665 4.783 1.00 98.75 ? 93 VAL A CG1 1 P32322 UNP 93 V +ATOM 692 C CG2 . VAL A 1 93 ? -17.067 3.849 5.955 1.00 98.75 ? 93 VAL A CG2 1 P32322 UNP 93 V +ATOM 693 N N . SER A 1 94 ? -14.493 -0.119 7.136 1.00 98.31 ? 94 SER A N 1 P32322 UNP 94 S +ATOM 694 C CA . SER A 1 94 ? -13.249 -0.862 7.356 1.00 98.31 ? 94 SER A CA 1 P32322 UNP 94 S +ATOM 695 C C . SER A 1 94 ? -12.359 -0.849 6.124 1.00 98.31 ? 94 SER A C 1 P32322 UNP 94 S +ATOM 696 C CB . SER A 1 94 ? -13.537 -2.295 7.769 1.00 98.31 ? 94 SER A CB 1 P32322 UNP 94 S +ATOM 697 O O . SER A 1 94 ? -12.757 -1.355 5.080 1.00 98.31 ? 94 SER A O 1 P32322 UNP 94 S +ATOM 698 O OG . SER A 1 94 ? -12.320 -2.959 8.074 1.00 98.31 ? 94 SER A OG 1 P32322 UNP 94 S +ATOM 699 N N . CYS A 1 95 ? -11.135 -0.334 6.265 1.00 97.12 ? 95 CYS A N 1 P32322 UNP 95 C +ATOM 700 C CA . CYS A 1 95 ? -10.105 -0.380 5.222 1.00 97.12 ? 95 CYS A CA 1 P32322 UNP 95 C +ATOM 701 C C . CYS A 1 95 ? -9.048 -1.471 5.471 1.00 97.12 ? 95 CYS A C 1 P32322 UNP 95 C +ATOM 702 C CB . CYS A 1 95 ? -9.450 0.997 5.090 1.00 97.12 ? 95 CYS A CB 1 P32322 UNP 95 C +ATOM 703 O O . CYS A 1 95 ? -8.010 -1.507 4.804 1.00 97.12 ? 95 CYS A O 1 P32322 UNP 95 C +ATOM 704 S SG . CYS A 1 95 ? -10.664 2.246 4.586 1.00 97.12 ? 95 CYS A SG 1 P32322 UNP 95 C +ATOM 705 N N . ALA A 1 96 ? -9.248 -2.317 6.483 1.00 94.31 ? 96 ALA A N 1 P32322 UNP 96 A +ATOM 706 C CA . ALA A 1 96 ? -8.269 -3.317 6.879 1.00 94.31 ? 96 ALA A CA 1 P32322 UNP 96 A +ATOM 707 C C . ALA A 1 96 ? -8.310 -4.535 5.942 1.00 94.31 ? 96 ALA A C 1 P32322 UNP 96 A +ATOM 708 C CB . ALA A 1 96 ? -8.505 -3.682 8.342 1.00 94.31 ? 96 ALA A CB 1 P32322 UNP 96 A +ATOM 709 O O . ALA A 1 96 ? -9.326 -5.218 5.823 1.00 94.31 ? 96 ALA A O 1 P32322 UNP 96 A +ATOM 710 N N . ALA A 1 97 ? -7.178 -4.829 5.297 1.00 92.19 ? 97 ALA A N 1 P32322 UNP 97 A +ATOM 711 C CA . ALA A 1 97 ? -7.052 -5.956 4.375 1.00 92.19 ? 97 ALA A CA 1 P32322 UNP 97 A +ATOM 712 C C . ALA A 1 97 ? -7.385 -7.298 5.052 1.00 92.19 ? 97 ALA A C 1 P32322 UNP 97 A +ATOM 713 C CB . ALA A 1 97 ? -5.639 -5.956 3.780 1.00 92.19 ? 97 ALA A CB 1 P32322 UNP 97 A +ATOM 714 O O . ALA A 1 97 ? -6.823 -7.625 6.098 1.00 92.19 ? 97 ALA A O 1 P32322 UNP 97 A +ATOM 715 N N . GLY A 1 98 ? -8.283 -8.066 4.433 1.00 91.62 ? 98 GLY A N 1 P32322 UNP 98 G +ATOM 716 C CA . GLY A 1 98 ? -8.726 -9.373 4.919 1.00 91.62 ? 98 GLY A CA 1 P32322 UNP 98 G +ATOM 717 C C . GLY A 1 98 ? -9.676 -9.333 6.120 1.00 91.62 ? 98 GLY A C 1 P32322 UNP 98 G +ATOM 718 O O . GLY A 1 98 ? -10.039 -10.384 6.620 1.00 91.62 ? 98 GLY A O 1 P32322 UNP 98 G +ATOM 719 N N . VAL A 1 99 ? -10.103 -8.171 6.624 1.00 95.38 ? 99 VAL A N 1 P32322 UNP 99 V +ATOM 720 C CA . VAL A 1 99 ? -11.098 -8.142 7.711 1.00 95.38 ? 99 VAL A CA 1 P32322 UNP 99 V +ATOM 721 C C . VAL A 1 99 ? -12.498 -8.107 7.114 1.00 95.38 ? 99 VAL A C 1 P32322 UNP 99 V +ATOM 722 C CB . VAL A 1 99 ? -10.856 -6.992 8.694 1.00 95.38 ? 99 VAL A CB 1 P32322 UNP 99 V +ATOM 723 O O . VAL A 1 99 ? -12.836 -7.168 6.394 1.00 95.38 ? 99 VAL A O 1 P32322 UNP 99 V +ATOM 724 C CG1 . VAL A 1 99 ? -11.844 -7.087 9.858 1.00 95.38 ? 99 VAL A CG1 1 P32322 UNP 99 V +ATOM 725 C CG2 . VAL A 1 99 ? -9.434 -7.081 9.264 1.00 95.38 ? 99 VAL A CG2 1 P32322 UNP 99 V +ATOM 726 N N . THR A 1 100 ? -13.302 -9.128 7.410 1.00 96.44 ? 100 THR A N 1 P32322 UNP 100 T +ATOM 727 C CA . THR A 1 100 ? -14.635 -9.286 6.811 1.00 96.44 ? 100 THR A CA 1 P32322 UNP 100 T +ATOM 728 C C . THR A 1 100 ? -15.681 -8.403 7.461 1.00 96.44 ? 100 THR A C 1 P32322 UNP 100 T +ATOM 729 C CB . THR A 1 100 ? -15.158 -10.723 6.872 1.00 96.44 ? 100 THR A CB 1 P32322 UNP 100 T +ATOM 730 O O . THR A 1 100 ? -15.608 -8.132 8.663 1.00 96.44 ? 100 THR A O 1 P32322 UNP 100 T +ATOM 731 C CG2 . THR A 1 100 ? -14.238 -11.684 6.156 1.00 96.44 ? 100 THR A CG2 1 P32322 UNP 100 T +ATOM 732 O OG1 . THR A 1 100 ? -15.265 -11.171 8.207 1.00 96.44 ? 100 THR A OG1 1 P32322 UNP 100 T +ATOM 733 N N . ILE A 1 101 ? -16.712 -8.045 6.700 1.00 97.56 ? 101 ILE A N 1 P32322 UNP 101 I +ATOM 734 C CA . ILE A 1 101 ? -17.926 -7.411 7.225 1.00 97.56 ? 101 ILE A CA 1 P32322 UNP 101 I +ATOM 735 C C . ILE A 1 101 ? -18.495 -8.261 8.364 1.00 97.56 ? 101 ILE A C 1 P32322 UNP 101 I +ATOM 736 C CB . ILE A 1 101 ? -18.957 -7.236 6.091 1.00 97.56 ? 101 ILE A CB 1 P32322 UNP 101 I +ATOM 737 O O . ILE A 1 101 ? -18.698 -7.751 9.464 1.00 97.56 ? 101 ILE A O 1 P32322 UNP 101 I +ATOM 738 C CG1 . ILE A 1 101 ? -18.415 -6.248 5.035 1.00 97.56 ? 101 ILE A CG1 1 P32322 UNP 101 I +ATOM 739 C CG2 . ILE A 1 101 ? -20.312 -6.761 6.636 1.00 97.56 ? 101 ILE A CG2 1 P32322 UNP 101 I +ATOM 740 C CD1 . ILE A 1 101 ? -19.314 -6.057 3.811 1.00 97.56 ? 101 ILE A CD1 1 P32322 UNP 101 I +ATOM 741 N N . SER A 1 102 ? -18.645 -9.572 8.141 1.00 96.12 ? 102 SER A N 1 P32322 UNP 102 S +ATOM 742 C CA . SER A 1 102 ? -19.177 -10.511 9.136 1.00 96.12 ? 102 SER A CA 1 P32322 UNP 102 S +ATOM 743 C C . SER A 1 102 ? -18.412 -10.475 10.465 1.00 96.12 ? 102 SER A C 1 P32322 UNP 102 S +ATOM 744 C CB . SER A 1 102 ? -19.152 -11.933 8.562 1.00 96.12 ? 102 SER A CB 1 P32322 UNP 102 S +ATOM 745 O O . SER A 1 102 ? -19.033 -10.510 11.527 1.00 96.12 ? 102 SER A O 1 P32322 UNP 102 S +ATOM 746 O OG . SER A 1 102 ? -19.653 -12.869 9.501 1.00 96.12 ? 102 SER A OG 1 P32322 UNP 102 S +ATOM 747 N N . SER A 1 103 ? -17.075 -10.413 10.447 1.00 95.12 ? 103 SER A N 1 P32322 UNP 103 S +ATOM 748 C CA . SER A 1 103 ? -16.271 -10.340 11.679 1.00 95.12 ? 103 SER A CA 1 P32322 UNP 103 S +ATOM 749 C C . SER A 1 103 ? -16.514 -9.046 12.466 1.00 95.12 ? 103 SER A C 1 P32322 UNP 103 S +ATOM 750 C CB . SER A 1 103 ? -14.776 -10.497 11.366 1.00 95.12 ? 103 SER A CB 1 P32322 UNP 103 S +ATOM 751 O O . SER A 1 103 ? -16.565 -9.066 13.698 1.00 95.12 ? 103 SER A O 1 P32322 UNP 103 S +ATOM 752 O OG . SER A 1 103 ? -14.250 -9.383 10.666 1.00 95.12 ? 103 SER A OG 1 P32322 UNP 103 S +ATOM 753 N N . ILE A 1 104 ? -16.723 -7.931 11.760 1.00 97.06 ? 104 ILE A N 1 P32322 UNP 104 I +ATOM 754 C CA . ILE A 1 104 ? -16.942 -6.609 12.353 1.00 97.06 ? 104 ILE A CA 1 P32322 UNP 104 I +ATOM 755 C C . ILE A 1 104 ? -18.362 -6.514 12.903 1.00 97.06 ? 104 ILE A C 1 P32322 UNP 104 I +ATOM 756 C CB . ILE A 1 104 ? -16.654 -5.498 11.319 1.00 97.06 ? 104 ILE A CB 1 P32322 UNP 104 I +ATOM 757 O O . ILE A 1 104 ? -18.546 -6.152 14.065 1.00 97.06 ? 104 ILE A O 1 P32322 UNP 104 I +ATOM 758 C CG1 . ILE A 1 104 ? -15.178 -5.555 10.867 1.00 97.06 ? 104 ILE A CG1 1 P32322 UNP 104 I +ATOM 759 C CG2 . ILE A 1 104 ? -16.994 -4.107 11.894 1.00 97.06 ? 104 ILE A CG2 1 P32322 UNP 104 I +ATOM 760 C CD1 . ILE A 1 104 ? -14.887 -4.658 9.669 1.00 97.06 ? 104 ILE A CD1 1 P32322 UNP 104 I +ATOM 761 N N . GLU A 1 105 ? -19.361 -6.884 12.098 1.00 97.50 ? 105 GLU A N 1 P32322 UNP 105 E +ATOM 762 C CA . GLU A 1 105 ? -20.767 -6.883 12.501 1.00 97.50 ? 105 GLU A CA 1 P32322 UNP 105 E +ATOM 763 C C . GLU A 1 105 ? -20.992 -7.797 13.705 1.00 97.50 ? 105 GLU A C 1 P32322 UNP 105 E +ATOM 764 C CB . GLU A 1 105 ? -21.679 -7.313 11.340 1.00 97.50 ? 105 GLU A CB 1 P32322 UNP 105 E +ATOM 765 O O . GLU A 1 105 ? -21.655 -7.384 14.652 1.00 97.50 ? 105 GLU A O 1 P32322 UNP 105 E +ATOM 766 C CG . GLU A 1 105 ? -21.792 -6.231 10.256 1.00 97.50 ? 105 GLU A CG 1 P32322 UNP 105 E +ATOM 767 C CD . GLU A 1 105 ? -22.836 -6.558 9.174 1.00 97.50 ? 105 GLU A CD 1 P32322 UNP 105 E +ATOM 768 O OE1 . GLU A 1 105 ? -23.258 -5.613 8.472 1.00 97.50 ? 105 GLU A OE1 1 P32322 UNP 105 E +ATOM 769 O OE2 . GLU A 1 105 ? -23.215 -7.740 9.014 1.00 97.50 ? 105 GLU A OE2 1 P32322 UNP 105 E +ATOM 770 N N . LYS A 1 106 ? -20.382 -8.992 13.738 1.00 95.81 ? 106 LYS A N 1 P32322 UNP 106 K +ATOM 771 C CA . LYS A 1 106 ? -20.476 -9.913 14.882 1.00 95.81 ? 106 LYS A CA 1 P32322 UNP 106 K +ATOM 772 C C . LYS A 1 106 ? -19.978 -9.279 16.185 1.00 95.81 ? 106 LYS A C 1 P32322 UNP 106 K +ATOM 773 C CB . LYS A 1 106 ? -19.704 -11.200 14.552 1.00 95.81 ? 106 LYS A CB 1 P32322 UNP 106 K +ATOM 774 O O . LYS A 1 106 ? -20.630 -9.432 17.215 1.00 95.81 ? 106 LYS A O 1 P32322 UNP 106 K +ATOM 775 C CG . LYS A 1 106 ? -19.782 -12.248 15.673 1.00 95.81 ? 106 LYS A CG 1 P32322 UNP 106 K +ATOM 776 C CD . LYS A 1 106 ? -18.963 -13.487 15.301 1.00 95.81 ? 106 LYS A CD 1 P32322 UNP 106 K +ATOM 777 C CE . LYS A 1 106 ? -18.990 -14.502 16.448 1.00 95.81 ? 106 LYS A CE 1 P32322 UNP 106 K +ATOM 778 N NZ . LYS A 1 106 ? -18.081 -15.642 16.173 1.00 95.81 ? 106 LYS A NZ 1 P32322 UNP 106 K +ATOM 779 N N . LYS A 1 107 ? -18.841 -8.575 16.151 1.00 95.38 ? 107 LYS A N 1 P32322 UNP 107 K +ATOM 780 C CA . LYS A 1 107 ? -18.270 -7.884 17.322 1.00 95.38 ? 107 LYS A CA 1 P32322 UNP 107 K +ATOM 781 C C . LYS A 1 107 ? -19.130 -6.690 17.744 1.00 95.38 ? 107 LYS A C 1 P32322 UNP 107 K +ATOM 782 C CB . LYS A 1 107 ? -16.825 -7.455 17.010 1.00 95.38 ? 107 LYS A CB 1 P32322 UNP 107 K +ATOM 783 O O . LYS A 1 107 ? -19.489 -6.578 18.911 1.00 95.38 ? 107 LYS A O 1 P32322 UNP 107 K +ATOM 784 C CG . LYS A 1 107 ? -15.789 -8.582 17.184 1.00 95.38 ? 107 LYS A CG 1 P32322 UNP 107 K +ATOM 785 C CD . LYS A 1 107 ? -15.308 -8.695 18.641 1.00 95.38 ? 107 LYS A CD 1 P32322 UNP 107 K +ATOM 786 C CE . LYS A 1 107 ? -14.191 -9.736 18.808 1.00 95.38 ? 107 LYS A CE 1 P32322 UNP 107 K +ATOM 787 N NZ . LYS A 1 107 ? -13.638 -9.732 20.186 1.00 95.38 ? 107 LYS A NZ 1 P32322 UNP 107 K +ATOM 788 N N . LEU A 1 108 ? -19.513 -5.828 16.802 1.00 97.44 ? 108 LEU A N 1 P32322 UNP 108 L +ATOM 789 C CA . LEU A 1 108 ? -20.310 -4.632 17.098 1.00 97.44 ? 108 LEU A CA 1 P32322 UNP 108 L +ATOM 790 C C . LEU A 1 108 ? -21.742 -4.960 17.546 1.00 97.44 ? 108 LEU A C 1 P32322 UNP 108 L +ATOM 791 C CB . LEU A 1 108 ? -20.314 -3.708 15.871 1.00 97.44 ? 108 LEU A CB 1 P32322 UNP 108 L +ATOM 792 O O . LEU A 1 108 ? -22.292 -4.258 18.395 1.00 97.44 ? 108 LEU A O 1 P32322 UNP 108 L +ATOM 793 C CG . LEU A 1 108 ? -18.961 -3.046 15.556 1.00 97.44 ? 108 LEU A CG 1 P32322 UNP 108 L +ATOM 794 C CD1 . LEU A 1 108 ? -19.128 -2.133 14.341 1.00 97.44 ? 108 LEU A CD1 1 P32322 UNP 108 L +ATOM 795 C CD2 . LEU A 1 108 ? -18.440 -2.205 16.726 1.00 97.44 ? 108 LEU A CD2 1 P32322 UNP 108 L +ATOM 796 N N . SER A 1 109 ? -22.314 -6.062 17.053 1.00 96.88 ? 109 SER A N 1 P32322 UNP 109 S +ATOM 797 C CA . SER A 1 109 ? -23.653 -6.529 17.441 1.00 96.88 ? 109 SER A CA 1 P32322 UNP 109 S +ATOM 798 C C . SER A 1 109 ? -23.759 -6.925 18.916 1.00 96.88 ? 109 SER A C 1 P32322 UNP 109 S +ATOM 799 C CB . SER A 1 109 ? -24.117 -7.695 16.567 1.00 96.88 ? 109 SER A CB 1 P32322 UNP 109 S +ATOM 800 O O . SER A 1 109 ? -24.866 -6.992 19.444 1.00 96.88 ? 109 SER A O 1 P32322 UNP 109 S +ATOM 801 O OG . SER A 1 109 ? -24.246 -7.277 15.225 1.00 96.88 ? 109 SER A OG 1 P32322 UNP 109 S +ATOM 802 N N . ALA A 1 110 ? -22.633 -7.146 19.607 1.00 96.19 ? 110 ALA A N 1 P32322 UNP 110 A +ATOM 803 C CA . ALA A 1 110 ? -22.619 -7.343 21.057 1.00 96.19 ? 110 ALA A CA 1 P32322 UNP 110 A +ATOM 804 C C . ALA A 1 110 ? -22.973 -6.063 21.841 1.00 96.19 ? 110 ALA A C 1 P32322 UNP 110 A +ATOM 805 C CB . ALA A 1 110 ? -21.238 -7.872 21.460 1.00 96.19 ? 110 ALA A CB 1 P32322 UNP 110 A +ATOM 806 O O . ALA A 1 110 ? -23.399 -6.152 22.991 1.00 96.19 ? 110 ALA A O 1 P32322 UNP 110 A +ATOM 807 N N . PHE A 1 111 ? -22.810 -4.885 21.228 1.00 96.75 ? 111 PHE A N 1 P32322 UNP 111 F +ATOM 808 C CA . PHE A 1 111 ? -23.048 -3.582 21.854 1.00 96.75 ? 111 PHE A CA 1 P32322 UNP 111 F +ATOM 809 C C . PHE A 1 111 ? -24.296 -2.881 21.314 1.00 96.75 ? 111 PHE A C 1 P32322 UNP 111 F +ATOM 810 C CB . PHE A 1 111 ? -21.821 -2.692 21.634 1.00 96.75 ? 111 PHE A CB 1 P32322 UNP 111 F +ATOM 811 O O . PHE A 1 111 ? -25.015 -2.236 22.077 1.00 96.75 ? 111 PHE A O 1 P32322 UNP 111 F +ATOM 812 C CG . PHE A 1 111 ? -20.536 -3.249 22.209 1.00 96.75 ? 111 PHE A CG 1 P32322 UNP 111 F +ATOM 813 C CD1 . PHE A 1 111 ? -20.225 -3.040 23.565 1.00 96.75 ? 111 PHE A CD1 1 P32322 UNP 111 F +ATOM 814 C CD2 . PHE A 1 111 ? -19.648 -3.971 21.389 1.00 96.75 ? 111 PHE A CD2 1 P32322 UNP 111 F +ATOM 815 C CE1 . PHE A 1 111 ? -19.016 -3.528 24.092 1.00 96.75 ? 111 PHE A CE1 1 P32322 UNP 111 F +ATOM 816 C CE2 . PHE A 1 111 ? -18.440 -4.457 21.916 1.00 96.75 ? 111 PHE A CE2 1 P32322 UNP 111 F +ATOM 817 C CZ . PHE A 1 111 ? -18.121 -4.229 23.266 1.00 96.75 ? 111 PHE A CZ 1 P32322 UNP 111 F +ATOM 818 N N . ARG A 1 112 ? -24.563 -2.998 20.007 1.00 93.81 ? 112 ARG A N 1 P32322 UNP 112 R +ATOM 819 C CA . ARG A 1 112 ? -25.693 -2.333 19.350 1.00 93.81 ? 112 ARG A CA 1 P32322 UNP 112 R +ATOM 820 C C . ARG A 1 112 ? -26.311 -3.228 18.276 1.00 93.81 ? 112 ARG A C 1 P32322 UNP 112 R +ATOM 821 C CB . ARG A 1 112 ? -25.211 -0.993 18.767 1.00 93.81 ? 112 ARG A CB 1 P32322 UNP 112 R +ATOM 822 O O . ARG A 1 112 ? -25.571 -3.750 17.446 1.00 93.81 ? 112 ARG A O 1 P32322 UNP 112 R +ATOM 823 C CG . ARG A 1 112 ? -26.331 -0.237 18.032 1.00 93.81 ? 112 ARG A CG 1 P32322 UNP 112 R +ATOM 824 C CD . ARG A 1 112 ? -25.933 1.180 17.630 1.00 93.81 ? 112 ARG A CD 1 P32322 UNP 112 R +ATOM 825 N NE . ARG A 1 112 ? -25.814 2.054 18.808 1.00 93.81 ? 112 ARG A NE 1 P32322 UNP 112 R +ATOM 826 N NH1 . ARG A 1 112 ? -27.668 3.358 18.510 1.00 93.81 ? 112 ARG A NH1 1 P32322 UNP 112 R +ATOM 827 N NH2 . ARG A 1 112 ? -26.343 3.726 20.245 1.00 93.81 ? 112 ARG A NH2 1 P32322 UNP 112 R +ATOM 828 C CZ . ARG A 1 112 ? -26.623 3.019 19.189 1.00 93.81 ? 112 ARG A CZ 1 P32322 UNP 112 R +ATOM 829 N N . PRO A 1 113 ? -27.648 -3.375 18.232 1.00 93.62 ? 113 PRO A N 1 P32322 UNP 113 P +ATOM 830 C CA . PRO A 1 113 ? -28.293 -4.064 17.122 1.00 93.62 ? 113 PRO A CA 1 P32322 UNP 113 P +ATOM 831 C C . PRO A 1 113 ? -28.106 -3.280 15.816 1.00 93.62 ? 113 PRO A C 1 P32322 UNP 113 P +ATOM 832 C CB . PRO A 1 113 ? -29.768 -4.175 17.521 1.00 93.62 ? 113 PRO A CB 1 P32322 UNP 113 P +ATOM 833 O O . PRO A 1 113 ? -28.181 -2.056 15.811 1.00 93.62 ? 113 PRO A O 1 P32322 UNP 113 P +ATOM 834 C CG . PRO A 1 113 ? -29.985 -2.952 18.413 1.00 93.62 ? 113 PRO A CG 1 P32322 UNP 113 P +ATOM 835 C CD . PRO A 1 113 ? -28.649 -2.826 19.142 1.00 93.62 ? 113 PRO A CD 1 P32322 UNP 113 P +ATOM 836 N N . ALA A 1 114 ? -27.922 -3.994 14.708 1.00 96.62 ? 114 ALA A N 1 P32322 UNP 114 A +ATOM 837 C CA . ALA A 1 114 ? -27.848 -3.433 13.357 1.00 96.62 ? 114 ALA A CA 1 P32322 UNP 114 A +ATOM 838 C C . ALA A 1 114 ? -26.723 -2.392 13.104 1.00 96.62 ? 114 ALA A C 1 P32322 UNP 114 A +ATOM 839 C CB . ALA A 1 114 ? -29.252 -2.966 12.936 1.00 96.62 ? 114 ALA A CB 1 P32322 UNP 114 A +ATOM 840 O O . ALA A 1 114 ? -27.000 -1.287 12.632 1.00 96.62 ? 114 ALA A O 1 P32322 UNP 114 A +ATOM 841 N N . PRO A 1 115 ? -25.440 -2.711 13.380 1.00 97.75 ? 115 PRO A N 1 P32322 UNP 115 P +ATOM 842 C CA . PRO A 1 115 ? -24.332 -1.809 13.066 1.00 97.75 ? 115 PRO A CA 1 P32322 UNP 115 P +ATOM 843 C C . PRO A 1 115 ? -24.183 -1.606 11.548 1.00 97.75 ? 115 PRO A C 1 P32322 UNP 115 P +ATOM 844 C CB . PRO A 1 115 ? -23.093 -2.473 13.680 1.00 97.75 ? 115 PRO A CB 1 P32322 UNP 115 P +ATOM 845 O O . PRO A 1 115 ? -24.018 -2.568 10.803 1.00 97.75 ? 115 PRO A O 1 P32322 UNP 115 P +ATOM 846 C CG . PRO A 1 115 ? -23.430 -3.965 13.633 1.00 97.75 ? 115 PRO A CG 1 P32322 UNP 115 P +ATOM 847 C CD . PRO A 1 115 ? -24.936 -3.984 13.883 1.00 97.75 ? 115 PRO A CD 1 P32322 UNP 115 P +ATOM 848 N N . ARG A 1 116 ? -24.184 -0.351 11.083 1.00 98.44 ? 116 ARG A N 1 P32322 UNP 116 R +ATOM 849 C CA . ARG A 1 116 ? -23.978 0.001 9.665 1.00 98.44 ? 116 ARG A CA 1 P32322 UNP 116 R +ATOM 850 C C . ARG A 1 116 ? -22.496 -0.105 9.311 1.00 98.44 ? 116 ARG A C 1 P32322 UNP 116 R +ATOM 851 C CB . ARG A 1 116 ? -24.523 1.413 9.391 1.00 98.44 ? 116 ARG A CB 1 P32322 UNP 116 R +ATOM 852 O O . ARG A 1 116 ? -21.707 0.778 9.656 1.00 98.44 ? 116 ARG A O 1 P32322 UNP 116 R +ATOM 853 C CG . ARG A 1 116 ? -26.055 1.486 9.487 1.00 98.44 ? 116 ARG A CG 1 P32322 UNP 116 R +ATOM 854 C CD . ARG A 1 116 ? -26.547 2.904 9.787 1.00 98.44 ? 116 ARG A CD 1 P32322 UNP 116 R +ATOM 855 N NE . ARG A 1 116 ? -26.344 3.835 8.664 1.00 98.44 ? 116 ARG A NE 1 P32322 UNP 116 R +ATOM 856 N NH1 . ARG A 1 116 ? -26.363 5.782 9.891 1.00 98.44 ? 116 ARG A NH1 1 P32322 UNP 116 R +ATOM 857 N NH2 . ARG A 1 116 ? -26.190 5.921 7.734 1.00 98.44 ? 116 ARG A NH2 1 P32322 UNP 116 R +ATOM 858 C CZ . ARG A 1 116 ? -26.299 5.150 8.760 1.00 98.44 ? 116 ARG A CZ 1 P32322 UNP 116 R +ATOM 859 N N . VAL A 1 117 ? -22.117 -1.191 8.641 1.00 98.62 ? 117 VAL A N 1 P32322 UNP 117 V +ATOM 860 C CA . VAL A 1 117 ? -20.728 -1.487 8.261 1.00 98.62 ? 117 VAL A CA 1 P32322 UNP 117 V +ATOM 861 C C . VAL A 1 117 ? -20.578 -1.474 6.741 1.00 98.62 ? 117 VAL A C 1 P32322 UNP 117 V +ATOM 862 C CB . VAL A 1 117 ? -20.253 -2.822 8.871 1.00 98.62 ? 117 VAL A CB 1 P32322 UNP 117 V +ATOM 863 O O . VAL A 1 117 ? -21.417 -1.999 6.019 1.00 98.62 ? 117 VAL A O 1 P32322 UNP 117 V +ATOM 864 C CG1 . VAL A 1 117 ? -18.791 -3.135 8.513 1.00 98.62 ? 117 VAL A CG1 1 P32322 UNP 117 V +ATOM 865 C CG2 . VAL A 1 117 ? -20.342 -2.795 10.405 1.00 98.62 ? 117 VAL A CG2 1 P32322 UNP 117 V +ATOM 866 N N . ILE A 1 118 ? -19.486 -0.893 6.250 1.00 98.75 ? 118 ILE A N 1 P32322 UNP 118 I +ATOM 867 C CA . ILE A 1 118 ? -19.047 -0.983 4.855 1.00 98.75 ? 118 ILE A CA 1 P32322 UNP 118 I +ATOM 868 C C . ILE A 1 118 ? -17.593 -1.449 4.858 1.00 98.75 ? 118 ILE A C 1 P32322 UNP 118 I +ATOM 869 C CB . ILE A 1 118 ? -19.254 0.363 4.118 1.00 98.75 ? 118 ILE A CB 1 P32322 UNP 118 I +ATOM 870 O O . ILE A 1 118 ? -16.753 -0.901 5.574 1.00 98.75 ? 118 ILE A O 1 P32322 UNP 118 I +ATOM 871 C CG1 . ILE A 1 118 ? -20.768 0.673 4.017 1.00 98.75 ? 118 ILE A CG1 1 P32322 UNP 118 I +ATOM 872 C CG2 . ILE A 1 118 ? -18.605 0.342 2.720 1.00 98.75 ? 118 ILE A CG2 1 P32322 UNP 118 I +ATOM 873 C CD1 . ILE A 1 118 ? -21.120 2.005 3.348 1.00 98.75 ? 118 ILE A CD1 1 P32322 UNP 118 I +ATOM 874 N N . ARG A 1 119 ? -17.264 -2.453 4.048 1.00 98.44 ? 119 ARG A N 1 P32322 UNP 119 R +ATOM 875 C CA . ARG A 1 119 ? -15.871 -2.846 3.810 1.00 98.44 ? 119 ARG A CA 1 P32322 UNP 119 R +ATOM 876 C C . ARG A 1 119 ? -15.368 -2.125 2.572 1.00 98.44 ? 119 ARG A C 1 P32322 UNP 119 R +ATOM 877 C CB . ARG A 1 119 ? -15.770 -4.369 3.718 1.00 98.44 ? 119 ARG A CB 1 P32322 UNP 119 R +ATOM 878 O O . ARG A 1 119 ? -16.029 -2.125 1.544 1.00 98.44 ? 119 ARG A O 1 P32322 UNP 119 R +ATOM 879 C CG . ARG A 1 119 ? -14.339 -4.867 3.491 1.00 98.44 ? 119 ARG A CG 1 P32322 UNP 119 R +ATOM 880 C CD . ARG A 1 119 ? -14.324 -6.398 3.502 1.00 98.44 ? 119 ARG A CD 1 P32322 UNP 119 R +ATOM 881 N NE . ARG A 1 119 ? -13.004 -6.925 3.124 1.00 98.44 ? 119 ARG A NE 1 P32322 UNP 119 R +ATOM 882 N NH1 . ARG A 1 119 ? -13.588 -9.150 2.969 1.00 98.44 ? 119 ARG A NH1 1 P32322 UNP 119 R +ATOM 883 N NH2 . ARG A 1 119 ? -11.532 -8.477 2.397 1.00 98.44 ? 119 ARG A NH2 1 P32322 UNP 119 R +ATOM 884 C CZ . ARG A 1 119 ? -12.724 -8.185 2.839 1.00 98.44 ? 119 ARG A CZ 1 P32322 UNP 119 R +ATOM 885 N N . CYS A 1 120 ? -14.198 -1.512 2.672 1.00 97.88 ? 120 CYS A N 1 P32322 UNP 120 C +ATOM 886 C CA . CYS A 1 120 ? -13.579 -0.733 1.612 1.00 97.88 ? 120 CYS A CA 1 P32322 UNP 120 C +ATOM 887 C C . CYS A 1 120 ? -12.162 -1.247 1.354 1.00 97.88 ? 120 CYS A C 1 P32322 UNP 120 C +ATOM 888 C CB . CYS A 1 120 ? -13.625 0.746 2.021 1.00 97.88 ? 120 CYS A CB 1 P32322 UNP 120 C +ATOM 889 O O . CYS A 1 120 ? -11.416 -1.579 2.276 1.00 97.88 ? 120 CYS A O 1 P32322 UNP 120 C +ATOM 890 S SG . CYS A 1 120 ? -12.765 1.798 0.816 1.00 97.88 ? 120 CYS A SG 1 P32322 UNP 120 C +ATOM 891 N N . MET A 1 121 ? -11.771 -1.286 0.086 1.00 97.69 ? 121 MET A N 1 P32322 UNP 121 M +ATOM 892 C CA . MET A 1 121 ? -10.390 -1.500 -0.319 1.00 97.69 ? 121 MET A CA 1 P32322 UNP 121 M +ATOM 893 C C . MET A 1 121 ? -9.983 -0.381 -1.257 1.00 97.69 ? 121 MET A C 1 P32322 UNP 121 M +ATOM 894 C CB . MET A 1 121 ? -10.238 -2.885 -0.944 1.00 97.69 ? 121 MET A CB 1 P32322 UNP 121 M +ATOM 895 O O . MET A 1 121 ? -10.596 -0.176 -2.299 1.00 97.69 ? 121 MET A O 1 P32322 UNP 121 M +ATOM 896 C CG . MET A 1 121 ? -8.807 -3.198 -1.397 1.00 97.69 ? 121 MET A CG 1 P32322 UNP 121 M +ATOM 897 S SD . MET A 1 121 ? -7.522 -3.071 -0.118 1.00 97.69 ? 121 MET A SD 1 P32322 UNP 121 M +ATOM 898 C CE . MET A 1 121 ? -8.206 -4.156 1.164 1.00 97.69 ? 121 MET A CE 1 P32322 UNP 121 M +ATOM 899 N N . THR A 1 122 ? -8.939 0.344 -0.874 1.00 98.31 ? 122 THR A N 1 P32322 UNP 122 T +ATOM 900 C CA . THR A 1 122 ? -8.397 1.468 -1.636 1.00 98.31 ? 122 THR A CA 1 P32322 UNP 122 T +ATOM 901 C C . THR A 1 122 ? -6.873 1.441 -1.587 1.00 98.31 ? 122 THR A C 1 P32322 UNP 122 T +ATOM 902 C CB . THR A 1 122 ? -8.989 2.792 -1.127 1.00 98.31 ? 122 THR A CB 1 P32322 UNP 122 T +ATOM 903 O O . THR A 1 122 ? -6.265 0.577 -0.952 1.00 98.31 ? 122 THR A O 1 P32322 UNP 122 T +ATOM 904 C CG2 . THR A 1 122 ? -8.405 3.239 0.208 1.00 98.31 ? 122 THR A CG2 1 P32322 UNP 122 T +ATOM 905 O OG1 . THR A 1 122 ? -8.735 3.816 -2.055 1.00 98.31 ? 122 THR A OG1 1 P32322 UNP 122 T +ATOM 906 N N . ASN A 1 123 ? -6.230 2.393 -2.253 1.00 98.06 ? 123 ASN A N 1 P32322 UNP 123 N +ATOM 907 C CA . ASN A 1 123 ? -4.785 2.453 -2.387 1.00 98.06 ? 123 ASN A CA 1 P32322 UNP 123 N +ATOM 908 C C . ASN A 1 123 ? -4.234 3.870 -2.158 1.00 98.06 ? 123 ASN A C 1 P32322 UNP 123 N +ATOM 909 C CB . ASN A 1 123 ? -4.424 1.815 -3.736 1.00 98.06 ? 123 ASN A CB 1 P32322 UNP 123 N +ATOM 910 O O . ASN A 1 123 ? -4.959 4.859 -2.114 1.00 98.06 ? 123 ASN A O 1 P32322 UNP 123 N +ATOM 911 C CG . ASN A 1 123 ? -4.944 2.547 -4.963 1.00 98.06 ? 123 ASN A CG 1 P32322 UNP 123 N +ATOM 912 N ND2 . ASN A 1 123 ? -4.755 1.977 -6.124 1.00 98.06 ? 123 ASN A ND2 1 P32322 UNP 123 N +ATOM 913 O OD1 . ASN A 1 123 ? -5.465 3.647 -4.915 1.00 98.06 ? 123 ASN A OD1 1 P32322 UNP 123 N +ATOM 914 N N . THR A 1 124 ? -2.919 3.992 -1.971 1.00 96.44 ? 124 THR A N 1 P32322 UNP 124 T +ATOM 915 C CA . THR A 1 124 ? -2.283 5.280 -1.641 1.00 96.44 ? 124 THR A CA 1 P32322 UNP 124 T +ATOM 916 C C . THR A 1 124 ? -2.413 6.384 -2.708 1.00 96.44 ? 124 THR A C 1 P32322 UNP 124 T +ATOM 917 C CB . THR A 1 124 ? -0.813 5.094 -1.244 1.00 96.44 ? 124 THR A CB 1 P32322 UNP 124 T +ATOM 918 O O . THR A 1 124 ? -2.409 7.552 -2.305 1.00 96.44 ? 124 THR A O 1 P32322 UNP 124 T +ATOM 919 C CG2 . THR A 1 124 ? -0.674 4.303 0.058 1.00 96.44 ? 124 THR A CG2 1 P32322 UNP 124 T +ATOM 920 O OG1 . THR A 1 124 ? -0.105 4.376 -2.226 1.00 96.44 ? 124 THR A OG1 1 P32322 UNP 124 T +ATOM 921 N N . PRO A 1 125 ? -2.587 6.101 -4.020 1.00 98.44 ? 125 PRO A N 1 P32322 UNP 125 P +ATOM 922 C CA . PRO A 1 125 ? -2.894 7.115 -5.036 1.00 98.44 ? 125 PRO A CA 1 P32322 UNP 125 P +ATOM 923 C C . PRO A 1 125 ? -4.130 7.997 -4.789 1.00 98.44 ? 125 PRO A C 1 P32322 UNP 125 P +ATOM 924 C CB . PRO A 1 125 ? -3.027 6.351 -6.352 1.00 98.44 ? 125 PRO A CB 1 P32322 UNP 125 P +ATOM 925 O O . PRO A 1 125 ? -4.224 9.056 -5.413 1.00 98.44 ? 125 PRO A O 1 P32322 UNP 125 P +ATOM 926 C CG . PRO A 1 125 ? -2.058 5.193 -6.172 1.00 98.44 ? 125 PRO A CG 1 P32322 UNP 125 P +ATOM 927 C CD . PRO A 1 125 ? -2.247 4.853 -4.699 1.00 98.44 ? 125 PRO A CD 1 P32322 UNP 125 P +ATOM 928 N N . VAL A 1 126 ? -5.007 7.681 -3.824 1.00 98.38 ? 126 VAL A N 1 P32322 UNP 126 V +ATOM 929 C CA . VAL A 1 126 ? -6.049 8.625 -3.354 1.00 98.38 ? 126 VAL A CA 1 P32322 UNP 126 V +ATOM 930 C C . VAL A 1 126 ? -5.476 9.990 -2.941 1.00 98.38 ? 126 VAL A C 1 P32322 UNP 126 V +ATOM 931 C CB . VAL A 1 126 ? -6.877 8.056 -2.183 1.00 98.38 ? 126 VAL A CB 1 P32322 UNP 126 V +ATOM 932 O O . VAL A 1 126 ? -6.144 11.014 -3.064 1.00 98.38 ? 126 VAL A O 1 P32322 UNP 126 V +ATOM 933 C CG1 . VAL A 1 126 ? -7.665 6.814 -2.594 1.00 98.38 ? 126 VAL A CG1 1 P32322 UNP 126 V +ATOM 934 C CG2 . VAL A 1 126 ? -6.033 7.767 -0.935 1.00 98.38 ? 126 VAL A CG2 1 P32322 UNP 126 V +ATOM 935 N N . VAL A 1 127 ? -4.200 10.036 -2.533 1.00 97.56 ? 127 VAL A N 1 P32322 UNP 127 V +ATOM 936 C CA . VAL A 1 127 ? -3.478 11.269 -2.171 1.00 97.56 ? 127 VAL A CA 1 P32322 UNP 127 V +ATOM 937 C C . VAL A 1 127 ? -3.342 12.268 -3.329 1.00 97.56 ? 127 VAL A C 1 P32322 UNP 127 V +ATOM 938 C CB . VAL A 1 127 ? -2.093 10.893 -1.608 1.00 97.56 ? 127 VAL A CB 1 P32322 UNP 127 V +ATOM 939 O O . VAL A 1 127 ? -3.194 13.468 -3.090 1.00 97.56 ? 127 VAL A O 1 P32322 UNP 127 V +ATOM 940 C CG1 . VAL A 1 127 ? -1.076 10.456 -2.669 1.00 97.56 ? 127 VAL A CG1 1 P32322 UNP 127 V +ATOM 941 C CG2 . VAL A 1 127 ? -1.474 12.036 -0.804 1.00 97.56 ? 127 VAL A CG2 1 P32322 UNP 127 V +ATOM 942 N N . VAL A 1 128 ? -3.374 11.779 -4.574 1.00 98.06 ? 128 VAL A N 1 P32322 UNP 128 V +ATOM 943 C CA . VAL A 1 128 ? -3.372 12.579 -5.813 1.00 98.06 ? 128 VAL A CA 1 P32322 UNP 128 V +ATOM 944 C C . VAL A 1 128 ? -4.700 12.481 -6.566 1.00 98.06 ? 128 VAL A C 1 P32322 UNP 128 V +ATOM 945 C CB . VAL A 1 128 ? -2.180 12.249 -6.737 1.00 98.06 ? 128 VAL A CB 1 P32322 UNP 128 V +ATOM 946 O O . VAL A 1 128 ? -4.777 12.917 -7.707 1.00 98.06 ? 128 VAL A O 1 P32322 UNP 128 V +ATOM 947 C CG1 . VAL A 1 128 ? -0.846 12.649 -6.097 1.00 98.06 ? 128 VAL A CG1 1 P32322 UNP 128 V +ATOM 948 C CG2 . VAL A 1 128 ? -2.115 10.770 -7.133 1.00 98.06 ? 128 VAL A CG2 1 P32322 UNP 128 V +ATOM 949 N N . ARG A 1 129 ? -5.744 11.961 -5.908 1.00 98.44 ? 129 ARG A N 1 P32322 UNP 129 R +ATOM 950 C CA . ARG A 1 129 ? -7.100 11.783 -6.446 1.00 98.44 ? 129 ARG A CA 1 P32322 UNP 129 R +ATOM 951 C C . ARG A 1 129 ? -7.203 10.824 -7.640 1.00 98.44 ? 129 ARG A C 1 P32322 UNP 129 R +ATOM 952 C CB . ARG A 1 129 ? -7.775 13.138 -6.715 1.00 98.44 ? 129 ARG A CB 1 P32322 UNP 129 R +ATOM 953 O O . ARG A 1 129 ? -8.133 10.927 -8.426 1.00 98.44 ? 129 ARG A O 1 P32322 UNP 129 R +ATOM 954 C CG . ARG A 1 129 ? -7.805 14.060 -5.485 1.00 98.44 ? 129 ARG A CG 1 P32322 UNP 129 R +ATOM 955 C CD . ARG A 1 129 ? -8.369 15.435 -5.850 1.00 98.44 ? 129 ARG A CD 1 P32322 UNP 129 R +ATOM 956 N NE . ARG A 1 129 ? -9.742 15.334 -6.371 1.00 98.44 ? 129 ARG A NE 1 P32322 UNP 129 R +ATOM 957 N NH1 . ARG A 1 129 ? -9.824 17.331 -7.504 1.00 98.44 ? 129 ARG A NH1 1 P32322 UNP 129 R +ATOM 958 N NH2 . ARG A 1 129 ? -11.539 15.894 -7.616 1.00 98.44 ? 129 ARG A NH2 1 P32322 UNP 129 R +ATOM 959 C CZ . ARG A 1 129 ? -10.355 16.187 -7.164 1.00 98.44 ? 129 ARG A CZ 1 P32322 UNP 129 R +ATOM 960 N N . GLU A 1 130 ? -6.273 9.880 -7.736 1.00 98.62 ? 130 GLU A N 1 P32322 UNP 130 E +ATOM 961 C CA . GLU A 1 130 ? -6.256 8.815 -8.752 1.00 98.62 ? 130 GLU A CA 1 P32322 UNP 130 E +ATOM 962 C C . GLU A 1 130 ? -6.277 7.440 -8.068 1.00 98.62 ? 130 GLU A C 1 P32322 UNP 130 E +ATOM 963 C CB . GLU A 1 130 ? -5.049 8.995 -9.690 1.00 98.62 ? 130 GLU A CB 1 P32322 UNP 130 E +ATOM 964 O O . GLU A 1 130 ? -5.591 6.498 -8.469 1.00 98.62 ? 130 GLU A O 1 P32322 UNP 130 E +ATOM 965 C CG . GLU A 1 130 ? -5.079 10.295 -10.514 1.00 98.62 ? 130 GLU A CG 1 P32322 UNP 130 E +ATOM 966 C CD . GLU A 1 130 ? -6.156 10.339 -11.614 1.00 98.62 ? 130 GLU A CD 1 P32322 UNP 130 E +ATOM 967 O OE1 . GLU A 1 130 ? -6.222 11.393 -12.292 1.00 98.62 ? 130 GLU A OE1 1 P32322 UNP 130 E +ATOM 968 O OE2 . GLU A 1 130 ? -6.837 9.314 -11.833 1.00 98.62 ? 130 GLU A OE2 1 P32322 UNP 130 E +ATOM 969 N N . GLY A 1 131 ? -6.998 7.350 -6.946 1.00 98.44 ? 131 GLY A N 1 P32322 UNP 131 G +ATOM 970 C CA . GLY A 1 131 ? -7.198 6.095 -6.237 1.00 98.44 ? 131 GLY A CA 1 P32322 UNP 131 G +ATOM 971 C C . GLY A 1 131 ? -8.029 5.103 -7.044 1.00 98.44 ? 131 GLY A C 1 P32322 UNP 131 G +ATOM 972 O O . GLY A 1 131 ? -8.814 5.483 -7.909 1.00 98.44 ? 131 GLY A O 1 P32322 UNP 131 G +ATOM 973 N N . ALA A 1 132 ? -7.889 3.822 -6.725 1.00 98.69 ? 132 ALA A N 1 P32322 UNP 132 A +ATOM 974 C CA . ALA A 1 132 ? -8.798 2.784 -7.194 1.00 98.69 ? 132 ALA A CA 1 P32322 UNP 132 A +ATOM 975 C C . ALA A 1 132 ? -9.431 2.132 -5.972 1.00 98.69 ? 132 ALA A C 1 P32322 UNP 132 A +ATOM 976 C CB . ALA A 1 132 ? -8.034 1.800 -8.081 1.00 98.69 ? 132 ALA A CB 1 P32322 UNP 132 A +ATOM 977 O O . ALA A 1 132 ? -8.742 1.465 -5.196 1.00 98.69 ? 132 ALA A O 1 P32322 UNP 132 A +ATOM 978 N N . THR A 1 133 ? -10.724 2.376 -5.795 1.00 98.75 ? 133 THR A N 1 P32322 UNP 133 T +ATOM 979 C CA . THR A 1 133 ? -11.475 1.985 -4.610 1.00 98.75 ? 133 THR A CA 1 P32322 UNP 133 T +ATOM 980 C C . THR A 1 133 ? -12.615 1.060 -4.993 1.00 98.75 ? 133 THR A C 1 P32322 UNP 133 T +ATOM 981 C CB . THR A 1 133 ? -12.001 3.209 -3.853 1.00 98.75 ? 133 THR A CB 1 P32322 UNP 133 T +ATOM 982 O O . THR A 1 133 ? -13.312 1.293 -5.976 1.00 98.75 ? 133 THR A O 1 P32322 UNP 133 T +ATOM 983 C CG2 . THR A 1 133 ? -12.569 2.829 -2.492 1.00 98.75 ? 133 THR A CG2 1 P32322 UNP 133 T +ATOM 984 O OG1 . THR A 1 133 ? -10.954 4.136 -3.637 1.00 98.75 ? 133 THR A OG1 1 P32322 UNP 133 T +ATOM 985 N N . VAL A 1 134 ? -12.813 0.019 -4.197 1.00 98.69 ? 134 VAL A N 1 P32322 UNP 134 V +ATOM 986 C CA . VAL A 1 134 ? -14.031 -0.788 -4.220 1.00 98.69 ? 134 VAL A CA 1 P32322 UNP 134 V +ATOM 987 C C . VAL A 1 134 ? -14.613 -0.844 -2.819 1.00 98.69 ? 134 VAL A C 1 P32322 UNP 134 V +ATOM 988 C CB . VAL A 1 134 ? -13.807 -2.199 -4.786 1.00 98.69 ? 134 VAL A CB 1 P32322 UNP 134 V +ATOM 989 O O . VAL A 1 134 ? -13.870 -0.735 -1.835 1.00 98.69 ? 134 VAL A O 1 P32322 UNP 134 V +ATOM 990 C CG1 . VAL A 1 134 ? -13.260 -2.153 -6.217 1.00 98.69 ? 134 VAL A CG1 1 P32322 UNP 134 V +ATOM 991 C CG2 . VAL A 1 134 ? -12.878 -3.045 -3.905 1.00 98.69 ? 134 VAL A CG2 1 P32322 UNP 134 V +ATOM 992 N N . TYR A 1 135 ? -15.922 -1.031 -2.716 1.00 98.81 ? 135 TYR A N 1 P32322 UNP 135 Y +ATOM 993 C CA . TYR A 1 135 ? -16.573 -1.253 -1.432 1.00 98.81 ? 135 TYR A CA 1 P32322 UNP 135 Y +ATOM 994 C C . TYR A 1 135 ? -17.664 -2.321 -1.528 1.00 98.81 ? 135 TYR A C 1 P32322 UNP 135 Y +ATOM 995 C CB . TYR A 1 135 ? -17.097 0.076 -0.865 1.00 98.81 ? 135 TYR A CB 1 P32322 UNP 135 Y +ATOM 996 O O . TYR A 1 135 ? -18.216 -2.543 -2.599 1.00 98.81 ? 135 TYR A O 1 P32322 UNP 135 Y +ATOM 997 C CG . TYR A 1 135 ? -18.309 0.635 -1.586 1.00 98.81 ? 135 TYR A CG 1 P32322 UNP 135 Y +ATOM 998 C CD1 . TYR A 1 135 ? -18.147 1.475 -2.706 1.00 98.81 ? 135 TYR A CD1 1 P32322 UNP 135 Y +ATOM 999 C CD2 . TYR A 1 135 ? -19.603 0.267 -1.166 1.00 98.81 ? 135 TYR A CD2 1 P32322 UNP 135 Y +ATOM 1000 C CE1 . TYR A 1 135 ? -19.278 1.951 -3.398 1.00 98.81 ? 135 TYR A CE1 1 P32322 UNP 135 Y +ATOM 1001 C CE2 . TYR A 1 135 ? -20.730 0.715 -1.877 1.00 98.81 ? 135 TYR A CE2 1 P32322 UNP 135 Y +ATOM 1002 O OH . TYR A 1 135 ? -21.657 1.950 -3.703 1.00 98.81 ? 135 TYR A OH 1 P32322 UNP 135 Y +ATOM 1003 C CZ . TYR A 1 135 ? -20.571 1.560 -2.991 1.00 98.81 ? 135 TYR A CZ 1 P32322 UNP 135 Y +ATOM 1004 N N . ALA A 1 136 ? -17.960 -2.955 -0.397 1.00 98.75 ? 136 ALA A N 1 P32322 UNP 136 A +ATOM 1005 C CA . ALA A 1 136 ? -19.092 -3.854 -0.209 1.00 98.75 ? 136 ALA A CA 1 P32322 UNP 136 A +ATOM 1006 C C . ALA A 1 136 ? -19.921 -3.372 0.988 1.00 98.75 ? 136 ALA A C 1 P32322 UNP 136 A +ATOM 1007 C CB . ALA A 1 136 ? -18.589 -5.289 -0.018 1.00 98.75 ? 136 ALA A CB 1 P32322 UNP 136 A +ATOM 1008 O O . ALA A 1 136 ? -19.365 -2.974 2.023 1.00 98.75 ? 136 ALA A O 1 P32322 UNP 136 A +ATOM 1009 N N . THR A 1 137 ? -21.242 -3.380 0.838 1.00 98.62 ? 137 THR A N 1 P32322 UNP 137 T +ATOM 1010 C CA . THR A 1 137 ? -22.193 -2.962 1.870 1.00 98.62 ? 137 THR A CA 1 P32322 UNP 137 T +ATOM 1011 C C . THR A 1 137 ? -22.505 -4.116 2.823 1.00 98.62 ? 137 THR A C 1 P32322 UNP 137 T +ATOM 1012 C CB . THR A 1 137 ? -23.468 -2.375 1.236 1.00 98.62 ? 137 THR A CB 1 P32322 UNP 137 T +ATOM 1013 O O . THR A 1 137 ? -22.654 -5.262 2.409 1.00 98.62 ? 137 THR A O 1 P32322 UNP 137 T +ATOM 1014 C CG2 . THR A 1 137 ? -23.191 -0.995 0.645 1.00 98.62 ? 137 THR A CG2 1 P32322 UNP 137 T +ATOM 1015 O OG1 . THR A 1 137 ? -23.970 -3.181 0.195 1.00 98.62 ? 137 THR A OG1 1 P32322 UNP 137 T +ATOM 1016 N N . GLY A 1 138 ? -22.534 -3.831 4.128 1.00 98.25 ? 138 GLY A N 1 P32322 UNP 138 G +ATOM 1017 C CA . GLY A 1 138 ? -22.867 -4.826 5.144 1.00 98.25 ? 138 GLY A CA 1 P32322 UNP 138 G +ATOM 1018 C C . GLY A 1 138 ? -24.362 -5.075 5.281 1.00 98.25 ? 138 GLY A C 1 P32322 UNP 138 G +ATOM 1019 O O . GLY A 1 138 ? -25.185 -4.365 4.703 1.00 98.25 ? 138 GLY A O 1 P32322 UNP 138 G +ATOM 1020 N N . THR A 1 139 ? -24.715 -6.059 6.106 1.00 97.94 ? 139 THR A N 1 P32322 UNP 139 T +ATOM 1021 C CA . THR A 1 139 ? -26.088 -6.549 6.307 1.00 97.94 ? 139 THR A CA 1 P32322 UNP 139 T +ATOM 1022 C C . THR A 1 139 ? -27.054 -5.431 6.696 1.00 97.94 ? 139 THR A C 1 P32322 UNP 139 T +ATOM 1023 C CB . THR A 1 139 ? -26.107 -7.598 7.434 1.00 97.94 ? 139 THR A CB 1 P32322 UNP 139 T +ATOM 1024 O O . THR A 1 139 ? -28.232 -5.457 6.338 1.00 97.94 ? 139 THR A O 1 P32322 UNP 139 T +ATOM 1025 C CG2 . THR A 1 139 ? -27.432 -8.361 7.492 1.00 97.94 ? 139 THR A CG2 1 P32322 UNP 139 T +ATOM 1026 O OG1 . THR A 1 139 ? -25.089 -8.558 7.268 1.00 97.94 ? 139 THR A OG1 1 P32322 UNP 139 T +ATOM 1027 N N . HIS A 1 140 ? -26.564 -4.450 7.455 1.00 98.00 ? 140 HIS A N 1 P32322 UNP 140 H +ATOM 1028 C CA . HIS A 1 140 ? -27.373 -3.364 8.008 1.00 98.00 ? 140 HIS A CA 1 P32322 UNP 140 H +ATOM 1029 C C . HIS A 1 140 ? -27.086 -1.995 7.385 1.00 98.00 ? 140 HIS A C 1 P32322 UNP 140 H +ATOM 1030 C CB . HIS A 1 140 ? -27.181 -3.343 9.523 1.00 98.00 ? 140 HIS A CB 1 P32322 UNP 140 H +ATOM 1031 O O . HIS A 1 140 ? -27.668 -1.000 7.820 1.00 98.00 ? 140 HIS A O 1 P32322 UNP 140 H +ATOM 1032 C CG . HIS A 1 140 ? -27.410 -4.683 10.168 1.00 98.00 ? 140 HIS A CG 1 P32322 UNP 140 H +ATOM 1033 C CD2 . HIS A 1 140 ? -26.477 -5.454 10.808 1.00 98.00 ? 140 HIS A CD2 1 P32322 UNP 140 H +ATOM 1034 N ND1 . HIS A 1 140 ? -28.601 -5.370 10.195 1.00 98.00 ? 140 HIS A ND1 1 P32322 UNP 140 H +ATOM 1035 C CE1 . HIS A 1 140 ? -28.400 -6.516 10.864 1.00 98.00 ? 140 HIS A CE1 1 P32322 UNP 140 H +ATOM 1036 N NE2 . HIS A 1 140 ? -27.131 -6.595 11.287 1.00 98.00 ? 140 HIS A NE2 1 P32322 UNP 140 H +ATOM 1037 N N . ALA A 1 141 ? -26.197 -1.921 6.391 1.00 97.69 ? 141 ALA A N 1 P32322 UNP 141 A +ATOM 1038 C CA . ALA A 1 141 ? -25.954 -0.684 5.661 1.00 97.69 ? 141 ALA A CA 1 P32322 UNP 141 A +ATOM 1039 C C . ALA A 1 141 ? -27.186 -0.330 4.817 1.00 97.69 ? 141 ALA A C 1 P32322 UNP 141 A +ATOM 1040 C CB . ALA A 1 141 ? -24.687 -0.829 4.815 1.00 97.69 ? 141 ALA A CB 1 P32322 UNP 141 A +ATOM 1041 O O . ALA A 1 141 ? -27.759 -1.168 4.122 1.00 97.69 ? 141 ALA A O 1 P32322 UNP 141 A +ATOM 1042 N N . GLN A 1 142 ? -27.609 0.928 4.880 1.00 97.38 ? 142 GLN A N 1 P32322 UNP 142 Q +ATOM 1043 C CA . GLN A 1 142 ? -28.716 1.412 4.064 1.00 97.38 ? 142 GLN A CA 1 P32322 UNP 142 Q +ATOM 1044 C C . GLN A 1 142 ? -28.226 1.711 2.643 1.00 97.38 ? 142 GLN A C 1 P32322 UNP 142 Q +ATOM 1045 C CB . GLN A 1 142 ? -29.363 2.636 4.729 1.00 97.38 ? 142 GLN A CB 1 P32322 UNP 142 Q +ATOM 1046 O O . GLN A 1 142 ? -27.059 2.031 2.425 1.00 97.38 ? 142 GLN A O 1 P32322 UNP 142 Q +ATOM 1047 C CG . GLN A 1 142 ? -29.923 2.292 6.120 1.00 97.38 ? 142 GLN A CG 1 P32322 UNP 142 Q +ATOM 1048 C CD . GLN A 1 142 ? -30.604 3.470 6.806 1.00 97.38 ? 142 GLN A CD 1 P32322 UNP 142 Q +ATOM 1049 N NE2 . GLN A 1 142 ? -31.282 3.239 7.908 1.00 97.38 ? 142 GLN A NE2 1 P32322 UNP 142 Q +ATOM 1050 O OE1 . GLN A 1 142 ? -30.553 4.611 6.390 1.00 97.38 ? 142 GLN A OE1 1 P32322 UNP 142 Q +ATOM 1051 N N . VAL A 1 143 ? -29.133 1.693 1.661 1.00 97.12 ? 143 VAL A N 1 P32322 UNP 143 V +ATOM 1052 C CA . VAL A 1 143 ? -28.810 2.051 0.263 1.00 97.12 ? 143 VAL A CA 1 P32322 UNP 143 V +ATOM 1053 C C . VAL A 1 143 ? -28.190 3.454 0.167 1.00 97.12 ? 143 VAL A C 1 P32322 UNP 143 V +ATOM 1054 C CB . VAL A 1 143 ? -30.082 1.966 -0.606 1.00 97.12 ? 143 VAL A CB 1 P32322 UNP 143 V +ATOM 1055 O O . VAL A 1 143 ? -27.319 3.714 -0.661 1.00 97.12 ? 143 VAL A O 1 P32322 UNP 143 V +ATOM 1056 C CG1 . VAL A 1 143 ? -29.841 2.389 -2.061 1.00 97.12 ? 143 VAL A CG1 1 P32322 UNP 143 V +ATOM 1057 C CG2 . VAL A 1 143 ? -30.649 0.539 -0.624 1.00 97.12 ? 143 VAL A CG2 1 P32322 UNP 143 V +ATOM 1058 N N . GLU A 1 144 ? -28.624 4.368 1.033 1.00 97.56 ? 144 GLU A N 1 P32322 UNP 144 E +ATOM 1059 C CA . GLU A 1 144 ? -28.099 5.733 1.132 1.00 97.56 ? 144 GLU A CA 1 P32322 UNP 144 E +ATOM 1060 C C . GLU A 1 144 ? -26.641 5.770 1.621 1.00 97.56 ? 144 GLU A C 1 P32322 UNP 144 E +ATOM 1061 C CB . GLU A 1 144 ? -29.014 6.545 2.061 1.00 97.56 ? 144 GLU A CB 1 P32322 UNP 144 E +ATOM 1062 O O . GLU A 1 144 ? -25.884 6.648 1.207 1.00 97.56 ? 144 GLU A O 1 P32322 UNP 144 E +ATOM 1063 C CG . GLU A 1 144 ? -30.439 6.663 1.490 1.00 97.56 ? 144 GLU A CG 1 P32322 UNP 144 E +ATOM 1064 C CD . GLU A 1 144 ? -31.434 7.344 2.441 1.00 97.56 ? 144 GLU A CD 1 P32322 UNP 144 E +ATOM 1065 O OE1 . GLU A 1 144 ? -32.646 7.102 2.236 1.00 97.56 ? 144 GLU A OE1 1 P32322 UNP 144 E +ATOM 1066 O OE2 . GLU A 1 144 ? -30.996 8.141 3.299 1.00 97.56 ? 144 GLU A OE2 1 P32322 UNP 144 E +ATOM 1067 N N . ASP A 1 145 ? -26.222 4.787 2.422 1.00 98.19 ? 145 ASP A N 1 P32322 UNP 145 D +ATOM 1068 C CA . ASP A 1 145 ? -24.862 4.673 2.962 1.00 98.19 ? 145 ASP A CA 1 P32322 UNP 145 D +ATOM 1069 C C . ASP A 1 145 ? -23.876 4.293 1.864 1.00 98.19 ? 145 ASP A C 1 P32322 UNP 145 D +ATOM 1070 C CB . ASP A 1 145 ? -24.785 3.614 4.081 1.00 98.19 ? 145 ASP A CB 1 P32322 UNP 145 D +ATOM 1071 O O . ASP A 1 145 ? -22.809 4.899 1.752 1.00 98.19 ? 145 ASP A O 1 P32322 UNP 145 D +ATOM 1072 C CG . ASP A 1 145 ? -25.767 3.859 5.214 1.00 98.19 ? 145 ASP A CG 1 P32322 UNP 145 D +ATOM 1073 O OD1 . ASP A 1 145 ? -26.308 4.977 5.290 1.00 98.19 ? 145 ASP A OD1 1 P32322 UNP 145 D +ATOM 1074 O OD2 . ASP A 1 145 ? -25.958 2.962 6.066 1.00 98.19 ? 145 ASP A OD2 1 P32322 UNP 145 D +ATOM 1075 N N . GLY A 1 146 ? -24.265 3.326 1.024 1.00 98.00 ? 146 GLY A N 1 P32322 UNP 146 G +ATOM 1076 C CA . GLY A 1 146 ? -23.510 2.932 -0.164 1.00 98.00 ? 146 GLY A CA 1 P32322 UNP 146 G +ATOM 1077 C C . GLY A 1 146 ? -23.325 4.115 -1.113 1.00 98.00 ? 146 GLY A C 1 P32322 UNP 146 G +ATOM 1078 O O . GLY A 1 146 ? -22.195 4.454 -1.456 1.00 98.00 ? 146 GLY A O 1 P32322 UNP 146 G +ATOM 1079 N N . ARG A 1 147 ? -24.410 4.837 -1.432 1.00 97.88 ? 147 ARG A N 1 P32322 UNP 147 R +ATOM 1080 C CA . ARG A 1 147 ? -24.350 6.043 -2.282 1.00 97.88 ? 147 ARG A CA 1 P32322 UNP 147 R +ATOM 1081 C C . ARG A 1 147 ? -23.460 7.136 -1.694 1.00 97.88 ? 147 ARG A C 1 P32322 UNP 147 R +ATOM 1082 C CB . ARG A 1 147 ? -25.752 6.615 -2.505 1.00 97.88 ? 147 ARG A CB 1 P32322 UNP 147 R +ATOM 1083 O O . ARG A 1 147 ? -22.694 7.760 -2.427 1.00 97.88 ? 147 ARG A O 1 P32322 UNP 147 R +ATOM 1084 C CG . ARG A 1 147 ? -26.627 5.722 -3.387 1.00 97.88 ? 147 ARG A CG 1 P32322 UNP 147 R +ATOM 1085 C CD . ARG A 1 147 ? -27.995 6.390 -3.529 1.00 97.88 ? 147 ARG A CD 1 P32322 UNP 147 R +ATOM 1086 N NE . ARG A 1 147 ? -28.974 5.487 -4.151 1.00 97.88 ? 147 ARG A NE 1 P32322 UNP 147 R +ATOM 1087 N NH1 . ARG A 1 147 ? -30.848 6.692 -3.596 1.00 97.88 ? 147 ARG A NH1 1 P32322 UNP 147 R +ATOM 1088 N NH2 . ARG A 1 147 ? -31.061 4.721 -4.626 1.00 97.88 ? 147 ARG A NH2 1 P32322 UNP 147 R +ATOM 1089 C CZ . ARG A 1 147 ? -30.285 5.639 -4.126 1.00 97.88 ? 147 ARG A CZ 1 P32322 UNP 147 R +ATOM 1090 N N . LEU A 1 148 ? -23.551 7.380 -0.384 1.00 98.06 ? 148 LEU A N 1 P32322 UNP 148 L +ATOM 1091 C CA . LEU A 1 148 ? -22.694 8.350 0.296 1.00 98.06 ? 148 LEU A CA 1 P32322 UNP 148 L +ATOM 1092 C C . LEU A 1 148 ? -21.219 7.938 0.214 1.00 98.06 ? 148 LEU A C 1 P32322 UNP 148 L +ATOM 1093 C CB . LEU A 1 148 ? -23.156 8.503 1.756 1.00 98.06 ? 148 LEU A CB 1 P32322 UNP 148 L +ATOM 1094 O O . LEU A 1 148 ? -20.365 8.791 -0.040 1.00 98.06 ? 148 LEU A O 1 P32322 UNP 148 L +ATOM 1095 C CG . LEU A 1 148 ? -22.292 9.472 2.588 1.00 98.06 ? 148 LEU A CG 1 P32322 UNP 148 L +ATOM 1096 C CD1 . LEU A 1 148 ? -22.341 10.903 2.043 1.00 98.06 ? 148 LEU A CD1 1 P32322 UNP 148 L +ATOM 1097 C CD2 . LEU A 1 148 ? -22.783 9.484 4.034 1.00 98.06 ? 148 LEU A CD2 1 P32322 UNP 148 L +ATOM 1098 N N . MET A 1 149 ? -20.913 6.650 0.406 1.00 98.19 ? 149 MET A N 1 P32322 UNP 149 M +ATOM 1099 C CA . MET A 1 149 ? -19.548 6.143 0.265 1.00 98.19 ? 149 MET A CA 1 P32322 UNP 149 M +ATOM 1100 C C . MET A 1 149 ? -19.031 6.248 -1.157 1.00 98.19 ? 149 MET A C 1 P32322 UNP 149 M +ATOM 1101 C CB . MET A 1 149 ? -19.404 4.690 0.754 1.00 98.19 ? 149 MET A CB 1 P32322 UNP 149 M +ATOM 1102 O O . MET A 1 149 ? -17.914 6.727 -1.350 1.00 98.19 ? 149 MET A O 1 P32322 UNP 149 M +ATOM 1103 C CG . MET A 1 149 ? -19.010 4.591 2.228 1.00 98.19 ? 149 MET A CG 1 P32322 UNP 149 M +ATOM 1104 S SD . MET A 1 149 ? -17.675 5.702 2.771 1.00 98.19 ? 149 MET A SD 1 P32322 UNP 149 M +ATOM 1105 C CE . MET A 1 149 ? -18.731 6.935 3.578 1.00 98.19 ? 149 MET A CE 1 P32322 UNP 149 M +ATOM 1106 N N . GLU A 1 150 ? -19.830 5.864 -2.146 1.00 98.44 ? 150 GLU A N 1 P32322 UNP 150 E +ATOM 1107 C CA . GLU A 1 150 ? -19.456 5.989 -3.547 1.00 98.44 ? 150 GLU A CA 1 P32322 UNP 150 E +ATOM 1108 C C . GLU A 1 150 ? -19.169 7.451 -3.900 1.00 98.44 ? 150 GLU A C 1 P32322 UNP 150 E +ATOM 1109 C CB . GLU A 1 150 ? -20.549 5.396 -4.437 1.00 98.44 ? 150 GLU A CB 1 P32322 UNP 150 E +ATOM 1110 O O . GLU A 1 150 ? -18.110 7.743 -4.454 1.00 98.44 ? 150 GLU A O 1 P32322 UNP 150 E +ATOM 1111 C CG . GLU A 1 150 ? -20.027 5.198 -5.868 1.00 98.44 ? 150 GLU A CG 1 P32322 UNP 150 E +ATOM 1112 C CD . GLU A 1 150 ? -21.068 4.581 -6.813 1.00 98.44 ? 150 GLU A CD 1 P32322 UNP 150 E +ATOM 1113 O OE1 . GLU A 1 150 ? -20.760 4.516 -8.024 1.00 98.44 ? 150 GLU A OE1 1 P32322 UNP 150 E +ATOM 1114 O OE2 . GLU A 1 150 ? -22.176 4.237 -6.347 1.00 98.44 ? 150 GLU A OE2 1 P32322 UNP 150 E +ATOM 1115 N N . GLN A 1 151 ? -20.031 8.390 -3.494 1.00 97.94 ? 151 GLN A N 1 P32322 UNP 151 Q +ATOM 1116 C CA . GLN A 1 151 ? -19.830 9.822 -3.724 1.00 97.94 ? 151 GLN A CA 1 P32322 UNP 151 Q +ATOM 1117 C C . GLN A 1 151 ? -18.557 10.350 -3.043 1.00 97.94 ? 151 GLN A C 1 P32322 UNP 151 Q +ATOM 1118 C CB . GLN A 1 151 ? -21.075 10.588 -3.244 1.00 97.94 ? 151 GLN A CB 1 P32322 UNP 151 Q +ATOM 1119 O O . GLN A 1 151 ? -17.793 11.102 -3.656 1.00 97.94 ? 151 GLN A O 1 P32322 UNP 151 Q +ATOM 1120 C CG . GLN A 1 151 ? -20.966 12.093 -3.543 1.00 97.94 ? 151 GLN A CG 1 P32322 UNP 151 Q +ATOM 1121 C CD . GLN A 1 151 ? -22.179 12.902 -3.090 1.00 97.94 ? 151 GLN A CD 1 P32322 UNP 151 Q +ATOM 1122 N NE2 . GLN A 1 151 ? -22.101 14.215 -3.146 1.00 97.94 ? 151 GLN A NE2 1 P32322 UNP 151 Q +ATOM 1123 O OE1 . GLN A 1 151 ? -23.209 12.409 -2.671 1.00 97.94 ? 151 GLN A OE1 1 P32322 UNP 151 Q +ATOM 1124 N N . LEU A 1 152 ? -18.317 9.976 -1.783 1.00 98.12 ? 152 LEU A N 1 P32322 UNP 152 L +ATOM 1125 C CA . LEU A 1 152 ? -17.151 10.430 -1.026 1.00 98.12 ? 152 LEU A CA 1 P32322 UNP 152 L +ATOM 1126 C C . LEU A 1 152 ? -15.848 9.871 -1.613 1.00 98.12 ? 152 LEU A C 1 P32322 UNP 152 L +ATOM 1127 C CB . LEU A 1 152 ? -17.333 10.044 0.455 1.00 98.12 ? 152 LEU A CB 1 P32322 UNP 152 L +ATOM 1128 O O . LEU A 1 152 ? -14.897 10.616 -1.833 1.00 98.12 ? 152 LEU A O 1 P32322 UNP 152 L +ATOM 1129 C CG . LEU A 1 152 ? -16.156 10.452 1.361 1.00 98.12 ? 152 LEU A CG 1 P32322 UNP 152 L +ATOM 1130 C CD1 . LEU A 1 152 ? -15.918 11.966 1.374 1.00 98.12 ? 152 LEU A CD1 1 P32322 UNP 152 L +ATOM 1131 C CD2 . LEU A 1 152 ? -16.403 9.990 2.796 1.00 98.12 ? 152 LEU A CD2 1 P32322 UNP 152 L +ATOM 1132 N N . LEU A 1 153 ? -15.792 8.569 -1.885 1.00 98.44 ? 153 LEU A N 1 P32322 UNP 153 L +ATOM 1133 C CA . LEU A 1 153 ? -14.585 7.898 -2.373 1.00 98.44 ? 153 LEU A CA 1 P32322 UNP 153 L +ATOM 1134 C C . LEU A 1 153 ? -14.317 8.203 -3.855 1.00 98.44 ? 153 LEU A C 1 P32322 UNP 153 L +ATOM 1135 C CB . LEU A 1 153 ? -14.705 6.393 -2.082 1.00 98.44 ? 153 LEU A CB 1 P32322 UNP 153 L +ATOM 1136 O O . LEU A 1 153 ? -13.154 8.319 -4.245 1.00 98.44 ? 153 LEU A O 1 P32322 UNP 153 L +ATOM 1137 C CG . LEU A 1 153 ? -14.686 6.046 -0.579 1.00 98.44 ? 153 LEU A CG 1 P32322 UNP 153 L +ATOM 1138 C CD1 . LEU A 1 153 ? -15.190 4.622 -0.343 1.00 98.44 ? 153 LEU A CD1 1 P32322 UNP 153 L +ATOM 1139 C CD2 . LEU A 1 153 ? -13.282 6.184 0.023 1.00 98.44 ? 153 LEU A CD2 1 P32322 UNP 153 L +ATOM 1140 N N . SER A 1 154 ? -15.358 8.465 -4.654 1.00 98.50 ? 154 SER A N 1 P32322 UNP 154 S +ATOM 1141 C CA . SER A 1 154 ? -15.206 8.944 -6.037 1.00 98.50 ? 154 SER A CA 1 P32322 UNP 154 S +ATOM 1142 C C . SER A 1 154 ? -14.541 10.321 -6.123 1.00 98.50 ? 154 SER A C 1 P32322 UNP 154 S +ATOM 1143 C CB . SER A 1 154 ? -16.547 9.021 -6.769 1.00 98.50 ? 154 SER A CB 1 P32322 UNP 154 S +ATOM 1144 O O . SER A 1 154 ? -13.955 10.679 -7.143 1.00 98.50 ? 154 SER A O 1 P32322 UNP 154 S +ATOM 1145 O OG . SER A 1 154 ? -17.099 7.737 -6.912 1.00 98.50 ? 154 SER A OG 1 P32322 UNP 154 S +ATOM 1146 N N . SER A 1 155 ? -14.566 11.124 -5.049 1.00 98.25 ? 155 SER A N 1 P32322 UNP 155 S +ATOM 1147 C CA . SER A 1 155 ? -13.885 12.425 -5.052 1.00 98.25 ? 155 SER A CA 1 P32322 UNP 155 S +ATOM 1148 C C . SER A 1 155 ? -12.353 12.297 -5.082 1.00 98.25 ? 155 SER A C 1 P32322 UNP 155 S +ATOM 1149 C CB . SER A 1 155 ? -14.360 13.292 -3.880 1.00 98.25 ? 155 SER A CB 1 P32322 UNP 155 S +ATOM 1150 O O . SER A 1 155 ? -11.656 13.275 -5.388 1.00 98.25 ? 155 SER A O 1 P32322 UNP 155 S +ATOM 1151 O OG . SER A 1 155 ? -13.579 13.127 -2.712 1.00 98.25 ? 155 SER A OG 1 P32322 UNP 155 S +ATOM 1152 N N . VAL A 1 156 ? -11.827 11.117 -4.729 1.00 98.44 ? 156 VAL A N 1 P32322 UNP 156 V +ATOM 1153 C CA . VAL A 1 156 ? -10.393 10.807 -4.618 1.00 98.44 ? 156 VAL A CA 1 P32322 UNP 156 V +ATOM 1154 C C . VAL A 1 156 ? -9.932 9.682 -5.553 1.00 98.44 ? 156 VAL A C 1 P32322 UNP 156 V +ATOM 1155 C CB . VAL A 1 156 ? -9.973 10.535 -3.158 1.00 98.44 ? 156 VAL A CB 1 P32322 UNP 156 V +ATOM 1156 O O . VAL A 1 156 ? -8.799 9.213 -5.423 1.00 98.44 ? 156 VAL A O 1 P32322 UNP 156 V +ATOM 1157 C CG1 . VAL A 1 156 ? -10.248 11.754 -2.279 1.00 98.44 ? 156 VAL A CG1 1 P32322 UNP 156 V +ATOM 1158 C CG2 . VAL A 1 156 ? -10.675 9.331 -2.524 1.00 98.44 ? 156 VAL A CG2 1 P32322 UNP 156 V +ATOM 1159 N N . GLY A 1 157 ? -10.759 9.265 -6.509 1.00 98.50 ? 157 GLY A N 1 P32322 UNP 157 G +ATOM 1160 C CA . GLY A 1 157 ? -10.385 8.272 -7.512 1.00 98.50 ? 157 GLY A CA 1 P32322 UNP 157 G +ATOM 1161 C C . GLY A 1 157 ? -11.581 7.533 -8.100 1.00 98.50 ? 157 GLY A C 1 P32322 UNP 157 G +ATOM 1162 O O . GLY A 1 157 ? -12.721 7.939 -7.919 1.00 98.50 ? 157 GLY A O 1 P32322 UNP 157 G +ATOM 1163 N N . PHE A 1 158 ? -11.316 6.424 -8.785 1.00 98.62 ? 158 PHE A N 1 P32322 UNP 158 F +ATOM 1164 C CA . PHE A 1 158 ? -12.347 5.475 -9.195 1.00 98.62 ? 158 PHE A CA 1 P32322 UNP 158 F +ATOM 1165 C C . PHE A 1 158 ? -12.957 4.799 -7.960 1.00 98.62 ? 158 PHE A C 1 P32322 UNP 158 F +ATOM 1166 C CB . PHE A 1 158 ? -11.725 4.450 -10.154 1.00 98.62 ? 158 PHE A CB 1 P32322 UNP 158 F +ATOM 1167 O O . PHE A 1 158 ? -12.221 4.375 -7.063 1.00 98.62 ? 158 PHE A O 1 P32322 UNP 158 F +ATOM 1168 C CG . PHE A 1 158 ? -12.660 3.325 -10.554 1.00 98.62 ? 158 PHE A CG 1 P32322 UNP 158 F +ATOM 1169 C CD1 . PHE A 1 158 ? -12.557 2.064 -9.935 1.00 98.62 ? 158 PHE A CD1 1 P32322 UNP 158 F +ATOM 1170 C CD2 . PHE A 1 158 ? -13.654 3.548 -11.525 1.00 98.62 ? 158 PHE A CD2 1 P32322 UNP 158 F +ATOM 1171 C CE1 . PHE A 1 158 ? -13.434 1.027 -10.298 1.00 98.62 ? 158 PHE A CE1 1 P32322 UNP 158 F +ATOM 1172 C CE2 . PHE A 1 158 ? -14.535 2.512 -11.882 1.00 98.62 ? 158 PHE A CE2 1 P32322 UNP 158 F +ATOM 1173 C CZ . PHE A 1 158 ? -14.422 1.251 -11.272 1.00 98.62 ? 158 PHE A CZ 1 P32322 UNP 158 F +ATOM 1174 N N . CYS A 1 159 ? -14.282 4.684 -7.925 1.00 98.69 ? 159 CYS A N 1 P32322 UNP 159 C +ATOM 1175 C CA . CYS A 1 159 ? -15.017 3.968 -6.891 1.00 98.69 ? 159 CYS A CA 1 P32322 UNP 159 C +ATOM 1176 C C . CYS A 1 159 ? -16.138 3.148 -7.532 1.00 98.69 ? 159 CYS A C 1 P32322 UNP 159 C +ATOM 1177 C CB . CYS A 1 159 ? -15.574 4.960 -5.871 1.00 98.69 ? 159 CYS A CB 1 P32322 UNP 159 C +ATOM 1178 O O . CYS A 1 159 ? -16.788 3.630 -8.455 1.00 98.69 ? 159 CYS A O 1 P32322 UNP 159 C +ATOM 1179 S SG . CYS A 1 159 ? -16.060 4.047 -4.383 1.00 98.69 ? 159 CYS A SG 1 P32322 UNP 159 C +ATOM 1180 N N . THR A 1 160 ? -16.356 1.924 -7.057 1.00 98.56 ? 160 THR A N 1 P32322 UNP 160 T +ATOM 1181 C CA . THR A 1 160 ? -17.492 1.096 -7.476 1.00 98.56 ? 160 THR A CA 1 P32322 UNP 160 T +ATOM 1182 C C . THR A 1 160 ? -17.848 0.077 -6.394 1.00 98.56 ? 160 THR A C 1 P32322 UNP 160 T +ATOM 1183 C CB . THR A 1 160 ? -17.194 0.427 -8.830 1.00 98.56 ? 160 THR A CB 1 P32322 UNP 160 T +ATOM 1184 O O . THR A 1 160 ? -16.979 -0.351 -5.626 1.00 98.56 ? 160 THR A O 1 P32322 UNP 160 T +ATOM 1185 C CG2 . THR A 1 160 ? -16.196 -0.729 -8.756 1.00 98.56 ? 160 THR A CG2 1 P32322 UNP 160 T +ATOM 1186 O OG1 . THR A 1 160 ? -18.372 -0.052 -9.426 1.00 98.56 ? 160 THR A OG1 1 P32322 UNP 160 T +ATOM 1187 N N . GLU A 1 161 ? -19.121 -0.298 -6.321 1.00 98.62 ? 161 GLU A N 1 P32322 UNP 161 E +ATOM 1188 C CA . GLU A 1 161 ? -19.590 -1.378 -5.455 1.00 98.62 ? 161 GLU A CA 1 P32322 UNP 161 E +ATOM 1189 C C . GLU A 1 161 ? -19.216 -2.743 -6.044 1.00 98.62 ? 161 GLU A C 1 P32322 UNP 161 E +ATOM 1190 C CB . GLU A 1 161 ? -21.102 -1.250 -5.228 1.00 98.62 ? 161 GLU A CB 1 P32322 UNP 161 E +ATOM 1191 O O . GLU A 1 161 ? -19.276 -2.952 -7.257 1.00 98.62 ? 161 GLU A O 1 P32322 UNP 161 E +ATOM 1192 C CG . GLU A 1 161 ? -21.611 -2.151 -4.087 1.00 98.62 ? 161 GLU A CG 1 P32322 UNP 161 E +ATOM 1193 C CD . GLU A 1 161 ? -22.981 -1.729 -3.523 1.00 98.62 ? 161 GLU A CD 1 P32322 UNP 161 E +ATOM 1194 O OE1 . GLU A 1 161 ? -23.354 -2.266 -2.452 1.00 98.62 ? 161 GLU A OE1 1 P32322 UNP 161 E +ATOM 1195 O OE2 . GLU A 1 161 ? -23.603 -0.790 -4.075 1.00 98.62 ? 161 GLU A OE2 1 P32322 UNP 161 E +ATOM 1196 N N . VAL A 1 162 ? -18.815 -3.675 -5.183 1.00 98.44 ? 162 VAL A N 1 P32322 UNP 162 V +ATOM 1197 C CA . VAL A 1 162 ? -18.491 -5.060 -5.539 1.00 98.44 ? 162 VAL A CA 1 P32322 UNP 162 V +ATOM 1198 C C . VAL A 1 162 ? -19.033 -6.011 -4.479 1.00 98.44 ? 162 VAL A C 1 P32322 UNP 162 V +ATOM 1199 C CB . VAL A 1 162 ? -16.972 -5.283 -5.712 1.00 98.44 ? 162 VAL A CB 1 P32322 UNP 162 V +ATOM 1200 O O . VAL A 1 162 ? -19.216 -5.628 -3.324 1.00 98.44 ? 162 VAL A O 1 P32322 UNP 162 V +ATOM 1201 C CG1 . VAL A 1 162 ? -16.378 -4.406 -6.822 1.00 98.44 ? 162 VAL A CG1 1 P32322 UNP 162 V +ATOM 1202 C CG2 . VAL A 1 162 ? -16.171 -5.053 -4.421 1.00 98.44 ? 162 VAL A CG2 1 P32322 UNP 162 V +ATOM 1203 N N . GLU A 1 163 ? -19.202 -7.276 -4.851 1.00 98.00 ? 163 GLU A N 1 P32322 UNP 163 E +ATOM 1204 C CA . GLU A 1 163 ? -19.409 -8.346 -3.877 1.00 98.00 ? 163 GLU A CA 1 P32322 UNP 163 E +ATOM 1205 C C . GLU A 1 163 ? -18.173 -8.499 -2.971 1.00 98.00 ? 163 GLU A C 1 P32322 UNP 163 E +ATOM 1206 C CB . GLU A 1 163 ? -19.731 -9.663 -4.597 1.00 98.00 ? 163 GLU A CB 1 P32322 UNP 163 E +ATOM 1207 O O . GLU A 1 163 ? -17.026 -8.351 -3.414 1.00 98.00 ? 163 GLU A O 1 P32322 UNP 163 E +ATOM 1208 C CG . GLU A 1 163 ? -21.030 -9.611 -5.419 1.00 98.00 ? 163 GLU A CG 1 P32322 UNP 163 E +ATOM 1209 C CD . GLU A 1 163 ? -22.266 -9.255 -4.578 1.00 98.00 ? 163 GLU A CD 1 P32322 UNP 163 E +ATOM 1210 O OE1 . GLU A 1 163 ? -23.109 -8.492 -5.099 1.00 98.00 ? 163 GLU A OE1 1 P32322 UNP 163 E +ATOM 1211 O OE2 . GLU A 1 163 ? -22.364 -9.762 -3.437 1.00 98.00 ? 163 GLU A OE2 1 P32322 UNP 163 E +ATOM 1212 N N . GLU A 1 164 ? -18.393 -8.785 -1.682 1.00 98.00 ? 164 GLU A N 1 P32322 UNP 164 E +ATOM 1213 C CA . GLU A 1 164 ? -17.319 -8.811 -0.678 1.00 98.00 ? 164 GLU A CA 1 P32322 UNP 164 E +ATOM 1214 C C . GLU A 1 164 ? -16.219 -9.839 -1.014 1.00 98.00 ? 164 GLU A C 1 P32322 UNP 164 E +ATOM 1215 C CB . GLU A 1 164 ? -17.907 -9.087 0.725 1.00 98.00 ? 164 GLU A CB 1 P32322 UNP 164 E +ATOM 1216 O O . GLU A 1 164 ? -15.033 -9.600 -0.761 1.00 98.00 ? 164 GLU A O 1 P32322 UNP 164 E +ATOM 1217 C CG . GLU A 1 164 ? -16.849 -8.784 1.797 1.00 98.00 ? 164 GLU A CG 1 P32322 UNP 164 E +ATOM 1218 C CD . GLU A 1 164 ? -17.169 -9.178 3.243 1.00 98.00 ? 164 GLU A CD 1 P32322 UNP 164 E +ATOM 1219 O OE1 . GLU A 1 164 ? -16.240 -8.967 4.069 1.00 98.00 ? 164 GLU A OE1 1 P32322 UNP 164 E +ATOM 1220 O OE2 . GLU A 1 164 ? -18.263 -9.677 3.561 1.00 98.00 ? 164 GLU A OE2 1 P32322 UNP 164 E +ATOM 1221 N N . ASP A 1 165 ? -16.592 -10.966 -1.623 1.00 97.00 ? 165 ASP A N 1 P32322 UNP 165 D +ATOM 1222 C CA . ASP A 1 165 ? -15.694 -12.069 -1.982 1.00 97.00 ? 165 ASP A CA 1 P32322 UNP 165 D +ATOM 1223 C C . ASP A 1 165 ? -14.650 -11.696 -3.055 1.00 97.00 ? 165 ASP A C 1 P32322 UNP 165 D +ATOM 1224 C CB . ASP A 1 165 ? -16.534 -13.295 -2.388 1.00 97.00 ? 165 ASP A CB 1 P32322 UNP 165 D +ATOM 1225 O O . ASP A 1 165 ? -13.593 -12.333 -3.152 1.00 97.00 ? 165 ASP A O 1 P32322 UNP 165 D +ATOM 1226 C CG . ASP A 1 165 ? -17.316 -13.146 -3.702 1.00 97.00 ? 165 ASP A CG 1 P32322 UNP 165 D +ATOM 1227 O OD1 . ASP A 1 165 ? -17.471 -12.000 -4.173 1.00 97.00 ? 165 ASP A OD1 1 P32322 UNP 165 D +ATOM 1228 O OD2 . ASP A 1 165 ? -17.727 -14.200 -4.233 1.00 97.00 ? 165 ASP A OD2 1 P32322 UNP 165 D +ATOM 1229 N N . LEU A 1 166 ? -14.887 -10.616 -3.807 1.00 98.12 ? 166 LEU A N 1 P32322 UNP 166 L +ATOM 1230 C CA . LEU A 1 166 ? -13.953 -10.075 -4.794 1.00 98.12 ? 166 LEU A CA 1 P32322 UNP 166 L +ATOM 1231 C C . LEU A 1 166 ? -12.878 -9.175 -4.169 1.00 98.12 ? 166 LEU A C 1 P32322 UNP 166 L +ATOM 1232 C CB . LEU A 1 166 ? -14.738 -9.312 -5.878 1.00 98.12 ? 166 LEU A CB 1 P32322 UNP 166 L +ATOM 1233 O O . LEU A 1 166 ? -11.815 -8.983 -4.769 1.00 98.12 ? 166 LEU A O 1 P32322 UNP 166 L +ATOM 1234 C CG . LEU A 1 166 ? -15.810 -10.136 -6.619 1.00 98.12 ? 166 LEU A CG 1 P32322 UNP 166 L +ATOM 1235 C CD1 . LEU A 1 166 ? -16.447 -9.274 -7.711 1.00 98.12 ? 166 LEU A CD1 1 P32322 UNP 166 L +ATOM 1236 C CD2 . LEU A 1 166 ? -15.230 -11.391 -7.279 1.00 98.12 ? 166 LEU A CD2 1 P32322 UNP 166 L +ATOM 1237 N N . ILE A 1 167 ? -13.105 -8.627 -2.969 1.00 98.25 ? 167 ILE A N 1 P32322 UNP 167 I +ATOM 1238 C CA . ILE A 1 167 ? -12.237 -7.594 -2.374 1.00 98.25 ? 167 ILE A CA 1 P32322 UNP 167 I +ATOM 1239 C C . ILE A 1 167 ? -10.800 -8.093 -2.160 1.00 98.25 ? 167 ILE A C 1 P32322 UNP 167 I +ATOM 1240 C CB . ILE A 1 167 ? -12.872 -7.033 -1.077 1.00 98.25 ? 167 ILE A CB 1 P32322 UNP 167 I +ATOM 1241 O O . ILE A 1 167 ? -9.840 -7.338 -2.350 1.00 98.25 ? 167 ILE A O 1 P32322 UNP 167 I +ATOM 1242 C CG1 . ILE A 1 167 ? -14.155 -6.249 -1.445 1.00 98.25 ? 167 ILE A CG1 1 P32322 UNP 167 I +ATOM 1243 C CG2 . ILE A 1 167 ? -11.874 -6.123 -0.336 1.00 98.25 ? 167 ILE A CG2 1 P32322 UNP 167 I +ATOM 1244 C CD1 . ILE A 1 167 ? -14.865 -5.558 -0.275 1.00 98.25 ? 167 ILE A CD1 1 P32322 UNP 167 I +ATOM 1245 N N . ASP A 1 168 ? -10.607 -9.367 -1.821 1.00 97.06 ? 168 ASP A N 1 P32322 UNP 168 D +ATOM 1246 C CA . ASP A 1 168 ? -9.265 -9.931 -1.634 1.00 97.06 ? 168 ASP A CA 1 P32322 UNP 168 D +ATOM 1247 C C . ASP A 1 168 ? -8.475 -9.981 -2.950 1.00 97.06 ? 168 ASP A C 1 P32322 UNP 168 D +ATOM 1248 C CB . ASP A 1 168 ? -9.361 -11.341 -1.052 1.00 97.06 ? 168 ASP A CB 1 P32322 UNP 168 D +ATOM 1249 O O . ASP A 1 168 ? -7.278 -9.680 -2.976 1.00 97.06 ? 168 ASP A O 1 P32322 UNP 168 D +ATOM 1250 C CG . ASP A 1 168 ? -9.942 -11.405 0.360 1.00 97.06 ? 168 ASP A CG 1 P32322 UNP 168 D +ATOM 1251 O OD1 . ASP A 1 168 ? -10.098 -10.346 1.019 1.00 97.06 ? 168 ASP A OD1 1 P32322 UNP 168 D +ATOM 1252 O OD2 . ASP A 1 168 ? -10.177 -12.557 0.766 1.00 97.06 ? 168 ASP A OD2 1 P32322 UNP 168 D +ATOM 1253 N N . ALA A 1 169 ? -9.147 -10.300 -4.060 1.00 98.25 ? 169 ALA A N 1 P32322 UNP 169 A +ATOM 1254 C CA . ALA A 1 169 ? -8.542 -10.271 -5.389 1.00 98.25 ? 169 ALA A CA 1 P32322 UNP 169 A +ATOM 1255 C C . ALA A 1 169 ? -8.231 -8.828 -5.820 1.00 98.25 ? 169 ALA A C 1 P32322 UNP 169 A +ATOM 1256 C CB . ALA A 1 169 ? -9.473 -10.987 -6.374 1.00 98.25 ? 169 ALA A CB 1 P32322 UNP 169 A +ATOM 1257 O O . ALA A 1 169 ? -7.144 -8.552 -6.333 1.00 98.25 ? 169 ALA A O 1 P32322 UNP 169 A +ATOM 1258 N N . VAL A 1 170 ? -9.134 -7.883 -5.529 1.00 98.19 ? 170 VAL A N 1 P32322 UNP 170 V +ATOM 1259 C CA . VAL A 1 170 ? -8.906 -6.448 -5.766 1.00 98.19 ? 170 VAL A CA 1 P32322 UNP 170 V +ATOM 1260 C C . VAL A 1 170 ? -7.699 -5.937 -4.973 1.00 98.19 ? 170 VAL A C 1 P32322 UNP 170 V +ATOM 1261 C CB . VAL A 1 170 ? -10.170 -5.624 -5.450 1.00 98.19 ? 170 VAL A CB 1 P32322 UNP 170 V +ATOM 1262 O O . VAL A 1 170 ? -6.886 -5.182 -5.505 1.00 98.19 ? 170 VAL A O 1 P32322 UNP 170 V +ATOM 1263 C CG1 . VAL A 1 170 ? -9.894 -4.127 -5.621 1.00 98.19 ? 170 VAL A CG1 1 P32322 UNP 170 V +ATOM 1264 C CG2 . VAL A 1 170 ? -11.316 -5.987 -6.403 1.00 98.19 ? 170 VAL A CG2 1 P32322 UNP 170 V +ATOM 1265 N N . THR A 1 171 ? -7.507 -6.403 -3.737 1.00 97.56 ? 171 THR A N 1 P32322 UNP 171 T +ATOM 1266 C CA . THR A 1 171 ? -6.332 -6.069 -2.908 1.00 97.56 ? 171 THR A CA 1 P32322 UNP 171 T +ATOM 1267 C C . THR A 1 171 ? -5.024 -6.471 -3.596 1.00 97.56 ? 171 THR A C 1 P32322 UNP 171 T +ATOM 1268 C CB . THR A 1 171 ? -6.401 -6.771 -1.542 1.00 97.56 ? 171 THR A CB 1 P32322 UNP 171 T +ATOM 1269 O O . THR A 1 171 ? -4.055 -5.700 -3.605 1.00 97.56 ? 171 THR A O 1 P32322 UNP 171 T +ATOM 1270 C CG2 . THR A 1 171 ? -5.310 -6.277 -0.590 1.00 97.56 ? 171 THR A CG2 1 P32322 UNP 171 T +ATOM 1271 O OG1 . THR A 1 171 ? -7.632 -6.511 -0.915 1.00 97.56 ? 171 THR A OG1 1 P32322 UNP 171 T +ATOM 1272 N N . GLY A 1 172 ? -5.009 -7.655 -4.217 1.00 98.12 ? 172 GLY A N 1 P32322 UNP 172 G +ATOM 1273 C CA . GLY A 1 172 ? -3.869 -8.148 -4.984 1.00 98.12 ? 172 GLY A CA 1 P32322 UNP 172 G +ATOM 1274 C C . GLY A 1 172 ? -3.593 -7.353 -6.258 1.00 98.12 ? 172 GLY A C 1 P32322 UNP 172 G +ATOM 1275 O O . GLY A 1 172 ? -2.441 -7.235 -6.657 1.00 98.12 ? 172 GLY A O 1 P32322 UNP 172 G +ATOM 1276 N N . LEU A 1 173 ? -4.619 -6.751 -6.862 1.00 98.69 ? 173 LEU A N 1 P32322 UNP 173 L +ATOM 1277 C CA . LEU A 1 173 ? -4.486 -5.971 -8.090 1.00 98.69 ? 173 LEU A CA 1 P32322 UNP 173 L +ATOM 1278 C C . LEU A 1 173 ? -4.268 -4.475 -7.825 1.00 98.69 ? 173 LEU A C 1 P32322 UNP 173 L +ATOM 1279 C CB . LEU A 1 173 ? -5.700 -6.255 -8.989 1.00 98.69 ? 173 LEU A CB 1 P32322 UNP 173 L +ATOM 1280 O O . LEU A 1 173 ? -3.193 -3.950 -8.101 1.00 98.69 ? 173 LEU A O 1 P32322 UNP 173 L +ATOM 1281 C CG . LEU A 1 173 ? -5.645 -5.541 -10.353 1.00 98.69 ? 173 LEU A CG 1 P32322 UNP 173 L +ATOM 1282 C CD1 . LEU A 1 173 ? -4.454 -5.997 -11.201 1.00 98.69 ? 173 LEU A CD1 1 P32322 UNP 173 L +ATOM 1283 C CD2 . LEU A 1 173 ? -6.929 -5.826 -11.128 1.00 98.69 ? 173 LEU A CD2 1 P32322 UNP 173 L +ATOM 1284 N N . SER A 1 174 ? -5.275 -3.767 -7.308 1.00 97.94 ? 174 SER A N 1 P32322 UNP 174 S +ATOM 1285 C CA . SER A 1 174 ? -5.262 -2.306 -7.165 1.00 97.94 ? 174 SER A CA 1 P32322 UNP 174 S +ATOM 1286 C C . SER A 1 174 ? -4.719 -1.837 -5.815 1.00 97.94 ? 174 SER A C 1 P32322 UNP 174 S +ATOM 1287 C CB . SER A 1 174 ? -6.662 -1.735 -7.392 1.00 97.94 ? 174 SER A CB 1 P32322 UNP 174 S +ATOM 1288 O O . SER A 1 174 ? -4.123 -0.761 -5.754 1.00 97.94 ? 174 SER A O 1 P32322 UNP 174 S +ATOM 1289 O OG . SER A 1 174 ? -7.518 -2.136 -6.347 1.00 97.94 ? 174 SER A OG 1 P32322 UNP 174 S +ATOM 1290 N N . GLY A 1 175 ? -4.866 -2.635 -4.752 1.00 97.19 ? 175 GLY A N 1 P32322 UNP 175 G +ATOM 1291 C CA . GLY A 1 175 ? -4.309 -2.330 -3.429 1.00 97.19 ? 175 GLY A CA 1 P32322 UNP 175 G +ATOM 1292 C C . GLY A 1 175 ? -2.779 -2.370 -3.433 1.00 97.19 ? 175 GLY A C 1 P32322 UNP 175 G +ATOM 1293 O O . GLY A 1 175 ? -2.113 -1.408 -3.049 1.00 97.19 ? 175 GLY A O 1 P32322 UNP 175 G +ATOM 1294 N N . SER A 1 176 ? -2.224 -3.472 -3.941 1.00 98.00 ? 176 SER A N 1 P32322 UNP 176 S +ATOM 1295 C CA . SER A 1 176 ? -0.776 -3.700 -4.073 1.00 98.00 ? 176 SER A CA 1 P32322 UNP 176 S +ATOM 1296 C C . SER A 1 176 ? -0.184 -3.127 -5.369 1.00 98.00 ? 176 SER A C 1 P32322 UNP 176 S +ATOM 1297 C CB . SER A 1 176 ? -0.497 -5.199 -3.989 1.00 98.00 ? 176 SER A CB 1 P32322 UNP 176 S +ATOM 1298 O O . SER A 1 176 ? 1.013 -2.841 -5.427 1.00 98.00 ? 176 SER A O 1 P32322 UNP 176 S +ATOM 1299 O OG . SER A 1 176 ? -1.014 -5.720 -2.779 1.00 98.00 ? 176 SER A OG 1 P32322 UNP 176 S +ATOM 1300 N N . GLY A 1 177 ? -1.026 -2.886 -6.379 1.00 98.38 ? 177 GLY A N 1 P32322 UNP 177 G +ATOM 1301 C CA . GLY A 1 177 ? -0.677 -2.356 -7.702 1.00 98.38 ? 177 GLY A CA 1 P32322 UNP 177 G +ATOM 1302 C C . GLY A 1 177 ? 0.299 -1.177 -7.725 1.00 98.38 ? 177 GLY A C 1 P32322 UNP 177 G +ATOM 1303 O O . GLY A 1 177 ? 1.268 -1.219 -8.488 1.00 98.38 ? 177 GLY A O 1 P32322 UNP 177 G +ATOM 1304 N N . PRO A 1 178 ? 0.121 -0.140 -6.882 1.00 98.50 ? 178 PRO A N 1 P32322 UNP 178 P +ATOM 1305 C CA . PRO A 1 178 ? 1.054 0.980 -6.826 1.00 98.50 ? 178 PRO A CA 1 P32322 UNP 178 P +ATOM 1306 C C . PRO A 1 178 ? 2.489 0.555 -6.507 1.00 98.50 ? 178 PRO A C 1 P32322 UNP 178 P +ATOM 1307 C CB . PRO A 1 178 ? 0.498 1.924 -5.758 1.00 98.50 ? 178 PRO A CB 1 P32322 UNP 178 P +ATOM 1308 O O . PRO A 1 178 ? 3.422 1.102 -7.088 1.00 98.50 ? 178 PRO A O 1 P32322 UNP 178 P +ATOM 1309 C CG . PRO A 1 178 ? -1.001 1.648 -5.806 1.00 98.50 ? 178 PRO A CG 1 P32322 UNP 178 P +ATOM 1310 C CD . PRO A 1 178 ? -1.065 0.152 -6.091 1.00 98.50 ? 178 PRO A CD 1 P32322 UNP 178 P +ATOM 1311 N N . ALA A 1 179 ? 2.688 -0.444 -5.639 1.00 98.56 ? 179 ALA A N 1 P32322 UNP 179 A +ATOM 1312 C CA . ALA A 1 179 ? 4.023 -0.951 -5.332 1.00 98.56 ? 179 ALA A CA 1 P32322 UNP 179 A +ATOM 1313 C C . ALA A 1 179 ? 4.665 -1.610 -6.562 1.00 98.56 ? 179 ALA A C 1 P32322 UNP 179 A +ATOM 1314 C CB . ALA A 1 179 ? 3.949 -1.907 -4.137 1.00 98.56 ? 179 ALA A CB 1 P32322 UNP 179 A +ATOM 1315 O O . ALA A 1 179 ? 5.832 -1.347 -6.844 1.00 98.56 ? 179 ALA A O 1 P32322 UNP 179 A +ATOM 1316 N N . TYR A 1 180 ? 3.892 -2.371 -7.346 1.00 98.75 ? 180 TYR A N 1 P32322 UNP 180 Y +ATOM 1317 C CA . TYR A 1 180 ? 4.367 -2.959 -8.604 1.00 98.75 ? 180 TYR A CA 1 P32322 UNP 180 Y +ATOM 1318 C C . TYR A 1 180 ? 4.807 -1.870 -9.590 1.00 98.75 ? 180 TYR A C 1 P32322 UNP 180 Y +ATOM 1319 C CB . TYR A 1 180 ? 3.272 -3.836 -9.238 1.00 98.75 ? 180 TYR A CB 1 P32322 UNP 180 Y +ATOM 1320 O O . TYR A 1 180 ? 5.878 -1.963 -10.190 1.00 98.75 ? 180 TYR A O 1 P32322 UNP 180 Y +ATOM 1321 C CG . TYR A 1 180 ? 2.545 -4.805 -8.320 1.00 98.75 ? 180 TYR A CG 1 P32322 UNP 180 Y +ATOM 1322 C CD1 . TYR A 1 180 ? 3.188 -5.380 -7.203 1.00 98.75 ? 180 TYR A CD1 1 P32322 UNP 180 Y +ATOM 1323 C CD2 . TYR A 1 180 ? 1.212 -5.155 -8.608 1.00 98.75 ? 180 TYR A CD2 1 P32322 UNP 180 Y +ATOM 1324 C CE1 . TYR A 1 180 ? 2.497 -6.283 -6.374 1.00 98.75 ? 180 TYR A CE1 1 P32322 UNP 180 Y +ATOM 1325 C CE2 . TYR A 1 180 ? 0.509 -6.034 -7.765 1.00 98.75 ? 180 TYR A CE2 1 P32322 UNP 180 Y +ATOM 1326 O OH . TYR A 1 180 ? 0.501 -7.514 -5.882 1.00 98.75 ? 180 TYR A OH 1 P32322 UNP 180 Y +ATOM 1327 C CZ . TYR A 1 180 ? 1.156 -6.613 -6.656 1.00 98.75 ? 180 TYR A CZ 1 P32322 UNP 180 Y +ATOM 1328 N N . ALA A 1 181 ? 4.015 -0.798 -9.709 1.00 98.75 ? 181 ALA A N 1 P32322 UNP 181 A +ATOM 1329 C CA . ALA A 1 181 ? 4.340 0.341 -10.561 1.00 98.75 ? 181 ALA A CA 1 P32322 UNP 181 A +ATOM 1330 C C . ALA A 1 181 ? 5.608 1.072 -10.093 1.00 98.75 ? 181 ALA A C 1 P32322 UNP 181 A +ATOM 1331 C CB . ALA A 1 181 ? 3.129 1.279 -10.618 1.00 98.75 ? 181 ALA A CB 1 P32322 UNP 181 A +ATOM 1332 O O . ALA A 1 181 ? 6.454 1.408 -10.920 1.00 98.75 ? 181 ALA A O 1 P32322 UNP 181 A +ATOM 1333 N N . PHE A 1 182 ? 5.788 1.290 -8.786 1.00 98.62 ? 182 PHE A N 1 P32322 UNP 182 F +ATOM 1334 C CA . PHE A 1 182 ? 7.002 1.920 -8.258 1.00 98.62 ? 182 PHE A CA 1 P32322 UNP 182 F +ATOM 1335 C C . PHE A 1 182 ? 8.250 1.062 -8.488 1.00 98.62 ? 182 PHE A C 1 P32322 UNP 182 F +ATOM 1336 C CB . PHE A 1 182 ? 6.832 2.265 -6.771 1.00 98.62 ? 182 PHE A CB 1 P32322 UNP 182 F +ATOM 1337 O O . PHE A 1 182 ? 9.267 1.602 -8.920 1.00 98.62 ? 182 PHE A O 1 P32322 UNP 182 F +ATOM 1338 C CG . PHE A 1 182 ? 5.735 3.268 -6.451 1.00 98.62 ? 182 PHE A CG 1 P32322 UNP 182 F +ATOM 1339 C CD1 . PHE A 1 182 ? 5.536 4.409 -7.256 1.00 98.62 ? 182 PHE A CD1 1 P32322 UNP 182 F +ATOM 1340 C CD2 . PHE A 1 182 ? 4.911 3.066 -5.328 1.00 98.62 ? 182 PHE A CD2 1 P32322 UNP 182 F +ATOM 1341 C CE1 . PHE A 1 182 ? 4.502 5.314 -6.961 1.00 98.62 ? 182 PHE A CE1 1 P32322 UNP 182 F +ATOM 1342 C CE2 . PHE A 1 182 ? 3.875 3.970 -5.033 1.00 98.62 ? 182 PHE A CE2 1 P32322 UNP 182 F +ATOM 1343 C CZ . PHE A 1 182 ? 3.667 5.092 -5.853 1.00 98.62 ? 182 PHE A CZ 1 P32322 UNP 182 F +ATOM 1344 N N . THR A 1 183 ? 8.165 -0.258 -8.290 1.00 98.75 ? 183 THR A N 1 P32322 UNP 183 T +ATOM 1345 C CA . THR A 1 183 ? 9.259 -1.187 -8.618 1.00 98.75 ? 183 THR A CA 1 P32322 UNP 183 T +ATOM 1346 C C . THR A 1 183 ? 9.609 -1.134 -10.107 1.00 98.75 ? 183 THR A C 1 P32322 UNP 183 T +ATOM 1347 C CB . THR A 1 183 ? 8.886 -2.622 -8.209 1.00 98.75 ? 183 THR A CB 1 P32322 UNP 183 T +ATOM 1348 O O . THR A 1 183 ? 10.784 -1.058 -10.461 1.00 98.75 ? 183 THR A O 1 P32322 UNP 183 T +ATOM 1349 C CG2 . THR A 1 183 ? 9.994 -3.635 -8.491 1.00 98.75 ? 183 THR A CG2 1 P32322 UNP 183 T +ATOM 1350 O OG1 . THR A 1 183 ? 8.650 -2.679 -6.822 1.00 98.75 ? 183 THR A OG1 1 P32322 UNP 183 T +ATOM 1351 N N . ALA A 1 184 ? 8.607 -1.106 -10.990 1.00 98.75 ? 184 ALA A N 1 P32322 UNP 184 A +ATOM 1352 C CA . ALA A 1 184 ? 8.831 -0.991 -12.428 1.00 98.75 ? 184 ALA A CA 1 P32322 UNP 184 A +ATOM 1353 C C . ALA A 1 184 ? 9.455 0.360 -12.822 1.00 98.75 ? 184 ALA A C 1 P32322 UNP 184 A +ATOM 1354 C CB . ALA A 1 184 ? 7.502 -1.230 -13.153 1.00 98.75 ? 184 ALA A CB 1 P32322 UNP 184 A +ATOM 1355 O O . ALA A 1 184 ? 10.355 0.397 -13.656 1.00 98.75 ? 184 ALA A O 1 P32322 UNP 184 A +ATOM 1356 N N . LEU A 1 185 ? 9.013 1.471 -12.224 1.00 98.81 ? 185 LEU A N 1 P32322 UNP 185 L +ATOM 1357 C CA . LEU A 1 185 ? 9.552 2.808 -12.499 1.00 98.81 ? 185 LEU A CA 1 P32322 UNP 185 L +ATOM 1358 C C . LEU A 1 185 ? 11.013 2.952 -12.081 1.00 98.81 ? 185 LEU A C 1 P32322 UNP 185 L +ATOM 1359 C CB . LEU A 1 185 ? 8.702 3.866 -11.776 1.00 98.81 ? 185 LEU A CB 1 P32322 UNP 185 L +ATOM 1360 O O . LEU A 1 185 ? 11.787 3.585 -12.800 1.00 98.81 ? 185 LEU A O 1 P32322 UNP 185 L +ATOM 1361 C CG . LEU A 1 185 ? 7.363 4.147 -12.465 1.00 98.81 ? 185 LEU A CG 1 P32322 UNP 185 L +ATOM 1362 C CD1 . LEU A 1 185 ? 6.494 5.039 -11.576 1.00 98.81 ? 185 LEU A CD1 1 P32322 UNP 185 L +ATOM 1363 C CD2 . LEU A 1 185 ? 7.575 4.860 -13.798 1.00 98.81 ? 185 LEU A CD2 1 P32322 UNP 185 L +ATOM 1364 N N . ASP A 1 186 ? 11.382 2.361 -10.946 1.00 98.81 ? 186 ASP A N 1 P32322 UNP 186 D +ATOM 1365 C CA . ASP A 1 186 ? 12.762 2.338 -10.468 1.00 98.81 ? 186 ASP A CA 1 P32322 UNP 186 D +ATOM 1366 C C . ASP A 1 186 ? 13.669 1.581 -11.454 1.00 98.81 ? 186 ASP A C 1 P32322 UNP 186 D +ATOM 1367 C CB . ASP A 1 186 ? 12.774 1.724 -9.057 1.00 98.81 ? 186 ASP A CB 1 P32322 UNP 186 D +ATOM 1368 O O . ASP A 1 186 ? 14.667 2.125 -11.934 1.00 98.81 ? 186 ASP A O 1 P32322 UNP 186 D +ATOM 1369 C CG . ASP A 1 186 ? 14.066 1.999 -8.288 1.00 98.81 ? 186 ASP A CG 1 P32322 UNP 186 D +ATOM 1370 O OD1 . ASP A 1 186 ? 14.704 3.031 -8.592 1.00 98.81 ? 186 ASP A OD1 1 P32322 UNP 186 D +ATOM 1371 O OD2 . ASP A 1 186 ? 14.348 1.254 -7.330 1.00 98.81 ? 186 ASP A OD2 1 P32322 UNP 186 D +ATOM 1372 N N . ALA A 1 187 ? 13.235 0.388 -11.880 1.00 98.81 ? 187 ALA A N 1 P32322 UNP 187 A +ATOM 1373 C CA . ALA A 1 187 ? 13.945 -0.440 -12.855 1.00 98.81 ? 187 ALA A CA 1 P32322 UNP 187 A +ATOM 1374 C C . ALA A 1 187 ? 14.023 0.198 -14.257 1.00 98.81 ? 187 ALA A C 1 P32322 UNP 187 A +ATOM 1375 C CB . ALA A 1 187 ? 13.251 -1.806 -12.906 1.00 98.81 ? 187 ALA A CB 1 P32322 UNP 187 A +ATOM 1376 O O . ALA A 1 187 ? 15.065 0.148 -14.912 1.00 98.81 ? 187 ALA A O 1 P32322 UNP 187 A +ATOM 1377 N N . LEU A 1 188 ? 12.946 0.834 -14.730 1.00 98.75 ? 188 LEU A N 1 P32322 UNP 188 L +ATOM 1378 C CA . LEU A 1 188 ? 12.942 1.575 -15.998 1.00 98.75 ? 188 LEU A CA 1 P32322 UNP 188 L +ATOM 1379 C C . LEU A 1 188 ? 13.911 2.758 -15.952 1.00 98.75 ? 188 LEU A C 1 P32322 UNP 188 L +ATOM 1380 C CB . LEU A 1 188 ? 11.521 2.082 -16.305 1.00 98.75 ? 188 LEU A CB 1 P32322 UNP 188 L +ATOM 1381 O O . LEU A 1 188 ? 14.616 3.023 -16.929 1.00 98.75 ? 188 LEU A O 1 P32322 UNP 188 L +ATOM 1382 C CG . LEU A 1 188 ? 10.556 1.009 -16.838 1.00 98.75 ? 188 LEU A CG 1 P32322 UNP 188 L +ATOM 1383 C CD1 . LEU A 1 188 ? 9.130 1.568 -16.835 1.00 98.75 ? 188 LEU A CD1 1 P32322 UNP 188 L +ATOM 1384 C CD2 . LEU A 1 188 ? 10.902 0.595 -18.271 1.00 98.75 ? 188 LEU A CD2 1 P32322 UNP 188 L +ATOM 1385 N N . ALA A 1 189 ? 13.972 3.461 -14.819 1.00 98.81 ? 189 ALA A N 1 P32322 UNP 189 A +ATOM 1386 C CA . ALA A 1 189 ? 14.913 4.551 -14.634 1.00 98.81 ? 189 ALA A CA 1 P32322 UNP 189 A +ATOM 1387 C C . ALA A 1 189 ? 16.366 4.050 -14.594 1.00 98.81 ? 189 ALA A C 1 P32322 UNP 189 A +ATOM 1388 C CB . ALA A 1 189 ? 14.513 5.338 -13.388 1.00 98.81 ? 189 ALA A CB 1 P32322 UNP 189 A +ATOM 1389 O O . ALA A 1 189 ? 17.229 4.695 -15.189 1.00 98.81 ? 189 ALA A O 1 P32322 UNP 189 A +ATOM 1390 N N . ASP A 1 190 ? 16.640 2.900 -13.973 1.00 98.88 ? 190 ASP A N 1 P32322 UNP 190 D +ATOM 1391 C CA . ASP A 1 190 ? 17.958 2.249 -14.016 1.00 98.88 ? 190 ASP A CA 1 P32322 UNP 190 D +ATOM 1392 C C . ASP A 1 190 ? 18.345 1.853 -15.444 1.00 98.88 ? 190 ASP A C 1 P32322 UNP 190 D +ATOM 1393 C CB . ASP A 1 190 ? 17.981 1.005 -13.112 1.00 98.88 ? 190 ASP A CB 1 P32322 UNP 190 D +ATOM 1394 O O . ASP A 1 190 ? 19.464 2.127 -15.881 1.00 98.88 ? 190 ASP A O 1 P32322 UNP 190 D +ATOM 1395 C CG . ASP A 1 190 ? 18.109 1.322 -11.623 1.00 98.88 ? 190 ASP A CG 1 P32322 UNP 190 D +ATOM 1396 O OD1 . ASP A 1 190 ? 18.389 2.500 -11.293 1.00 98.88 ? 190 ASP A OD1 1 P32322 UNP 190 D +ATOM 1397 O OD2 . ASP A 1 190 ? 17.975 0.371 -10.832 1.00 98.88 ? 190 ASP A OD2 1 P32322 UNP 190 D +ATOM 1398 N N . GLY A 1 191 ? 17.406 1.287 -16.209 1.00 98.81 ? 191 GLY A N 1 P32322 UNP 191 G +ATOM 1399 C CA . GLY A 1 191 ? 17.591 1.000 -17.630 1.00 98.81 ? 191 GLY A CA 1 P32322 UNP 191 G +ATOM 1400 C C . GLY A 1 191 ? 17.928 2.258 -18.436 1.00 98.81 ? 191 GLY A C 1 P32322 UNP 191 G +ATOM 1401 O O . GLY A 1 191 ? 18.896 2.266 -19.192 1.00 98.81 ? 191 GLY A O 1 P32322 UNP 191 G +ATOM 1402 N N . GLY A 1 192 ? 17.192 3.353 -18.225 1.00 98.81 ? 192 GLY A N 1 P32322 UNP 192 G +ATOM 1403 C CA . GLY A 1 192 ? 17.468 4.642 -18.865 1.00 98.81 ? 192 GLY A CA 1 P32322 UNP 192 G +ATOM 1404 C C . GLY A 1 192 ? 18.851 5.201 -18.518 1.00 98.81 ? 192 GLY A C 1 P32322 UNP 192 G +ATOM 1405 O O . GLY A 1 192 ? 19.565 5.662 -19.408 1.00 98.81 ? 192 GLY A O 1 P32322 UNP 192 G +ATOM 1406 N N . VAL A 1 193 ? 19.261 5.115 -17.248 1.00 98.81 ? 193 VAL A N 1 P32322 UNP 193 V +ATOM 1407 C CA . VAL A 1 193 ? 20.597 5.536 -16.789 1.00 98.81 ? 193 VAL A CA 1 P32322 UNP 193 V +ATOM 1408 C C . VAL A 1 193 ? 21.695 4.678 -17.405 1.00 98.81 ? 193 VAL A C 1 P32322 UNP 193 V +ATOM 1409 C CB . VAL A 1 193 ? 20.687 5.525 -15.251 1.00 98.81 ? 193 VAL A CB 1 P32322 UNP 193 V +ATOM 1410 O O . VAL A 1 193 ? 22.693 5.217 -17.880 1.00 98.81 ? 193 VAL A O 1 P32322 UNP 193 V +ATOM 1411 C CG1 . VAL A 1 193 ? 22.115 5.750 -14.733 1.00 98.81 ? 193 VAL A CG1 1 P32322 UNP 193 V +ATOM 1412 C CG2 . VAL A 1 193 ? 19.828 6.643 -14.646 1.00 98.81 ? 193 VAL A CG2 1 P32322 UNP 193 V +ATOM 1413 N N . LYS A 1 194 ? 21.495 3.358 -17.477 1.00 98.75 ? 194 LYS A N 1 P32322 UNP 194 K +ATOM 1414 C CA . LYS A 1 194 ? 22.423 2.435 -18.144 1.00 98.75 ? 194 LYS A CA 1 P32322 UNP 194 K +ATOM 1415 C C . LYS A 1 194 ? 22.636 2.794 -19.620 1.00 98.75 ? 194 LYS A C 1 P32322 UNP 194 K +ATOM 1416 C CB . LYS A 1 194 ? 21.894 1.005 -17.966 1.00 98.75 ? 194 LYS A CB 1 P32322 UNP 194 K +ATOM 1417 O O . LYS A 1 194 ? 23.731 2.593 -20.134 1.00 98.75 ? 194 LYS A O 1 P32322 UNP 194 K +ATOM 1418 C CG . LYS A 1 194 ? 22.874 -0.050 -18.494 1.00 98.75 ? 194 LYS A CG 1 P32322 UNP 194 K +ATOM 1419 C CD . LYS A 1 194 ? 22.316 -1.456 -18.259 1.00 98.75 ? 194 LYS A CD 1 P32322 UNP 194 K +ATOM 1420 C CE . LYS A 1 194 ? 23.297 -2.494 -18.812 1.00 98.75 ? 194 LYS A CE 1 P32322 UNP 194 K +ATOM 1421 N NZ . LYS A 1 194 ? 22.775 -3.872 -18.640 1.00 98.75 ? 194 LYS A NZ 1 P32322 UNP 194 K +ATOM 1422 N N . MET A 1 195 ? 21.623 3.365 -20.275 1.00 98.75 ? 195 MET A N 1 P32322 UNP 195 M +ATOM 1423 C CA . MET A 1 195 ? 21.696 3.855 -21.658 1.00 98.75 ? 195 MET A CA 1 P32322 UNP 195 M +ATOM 1424 C C . MET A 1 195 ? 22.112 5.334 -21.778 1.00 98.75 ? 195 MET A C 1 P32322 UNP 195 M +ATOM 1425 C CB . MET A 1 195 ? 20.379 3.558 -22.395 1.00 98.75 ? 195 MET A CB 1 P32322 UNP 195 M +ATOM 1426 O O . MET A 1 195 ? 22.038 5.904 -22.864 1.00 98.75 ? 195 MET A O 1 P32322 UNP 195 M +ATOM 1427 C CG . MET A 1 195 ? 19.985 2.072 -22.381 1.00 98.75 ? 195 MET A CG 1 P32322 UNP 195 M +ATOM 1428 S SD . MET A 1 195 ? 21.273 0.865 -22.810 1.00 98.75 ? 195 MET A SD 1 P32322 UNP 195 M +ATOM 1429 C CE . MET A 1 195 ? 21.616 1.357 -24.519 1.00 98.75 ? 195 MET A CE 1 P32322 UNP 195 M +ATOM 1430 N N . GLY A 1 196 ? 22.565 5.962 -20.687 1.00 98.56 ? 196 GLY A N 1 P32322 UNP 196 G +ATOM 1431 C CA . GLY A 1 196 ? 23.158 7.303 -20.687 1.00 98.56 ? 196 GLY A CA 1 P32322 UNP 196 G +ATOM 1432 C C . GLY A 1 196 ? 22.217 8.455 -20.324 1.00 98.56 ? 196 GLY A C 1 P32322 UNP 196 G +ATOM 1433 O O . GLY A 1 196 ? 22.640 9.610 -20.366 1.00 98.56 ? 196 GLY A O 1 P32322 UNP 196 G +ATOM 1434 N N . LEU A 1 197 ? 20.959 8.197 -19.945 1.00 98.62 ? 197 LEU A N 1 P32322 UNP 197 L +ATOM 1435 C CA . LEU A 1 197 ? 20.058 9.264 -19.496 1.00 98.62 ? 197 LEU A CA 1 P32322 UNP 197 L +ATOM 1436 C C . LEU A 1 197 ? 20.389 9.715 -18.062 1.00 98.62 ? 197 LEU A C 1 P32322 UNP 197 L +ATOM 1437 C CB . LEU A 1 197 ? 18.581 8.844 -19.585 1.00 98.62 ? 197 LEU A CB 1 P32322 UNP 197 L +ATOM 1438 O O . LEU A 1 197 ? 20.581 8.882 -17.177 1.00 98.62 ? 197 LEU A O 1 P32322 UNP 197 L +ATOM 1439 C CG . LEU A 1 197 ? 18.080 8.497 -20.997 1.00 98.62 ? 197 LEU A CG 1 P32322 UNP 197 L +ATOM 1440 C CD1 . LEU A 1 197 ? 16.594 8.140 -20.915 1.00 98.62 ? 197 LEU A CD1 1 P32322 UNP 197 L +ATOM 1441 C CD2 . LEU A 1 197 ? 18.233 9.667 -21.973 1.00 98.62 ? 197 LEU A CD2 1 P32322 UNP 197 L +ATOM 1442 N N . PRO A 1 198 ? 20.350 11.024 -17.756 1.00 98.62 ? 198 PRO A N 1 P32322 UNP 198 P +ATOM 1443 C CA . PRO A 1 198 ? 20.407 11.486 -16.375 1.00 98.62 ? 198 PRO A CA 1 P32322 UNP 198 P +ATOM 1444 C C . PRO A 1 198 ? 19.241 10.927 -15.553 1.00 98.62 ? 198 PRO A C 1 P32322 UNP 198 P +ATOM 1445 C CB . PRO A 1 198 ? 20.368 13.016 -16.448 1.00 98.62 ? 198 PRO A CB 1 P32322 UNP 198 P +ATOM 1446 O O . PRO A 1 198 ? 18.087 10.968 -15.990 1.00 98.62 ? 198 PRO A O 1 P32322 UNP 198 P +ATOM 1447 C CG . PRO A 1 198 ? 20.889 13.319 -17.852 1.00 98.62 ? 198 PRO A CG 1 P32322 UNP 198 P +ATOM 1448 C CD . PRO A 1 198 ? 20.366 12.147 -18.677 1.00 98.62 ? 198 PRO A CD 1 P32322 UNP 198 P +ATOM 1449 N N . ARG A 1 199 ? 19.514 10.484 -14.319 1.00 98.62 ? 199 ARG A N 1 P32322 UNP 199 R +ATOM 1450 C CA . ARG A 1 199 ? 18.525 9.819 -13.449 1.00 98.62 ? 199 ARG A CA 1 P32322 UNP 199 R +ATOM 1451 C C . ARG A 1 199 ? 17.203 10.581 -13.323 1.00 98.62 ? 199 ARG A C 1 P32322 UNP 199 R +ATOM 1452 C CB . ARG A 1 199 ? 19.163 9.569 -12.069 1.00 98.62 ? 199 ARG A CB 1 P32322 UNP 199 R +ATOM 1453 O O . ARG A 1 199 ? 16.138 9.989 -13.465 1.00 98.62 ? 199 ARG A O 1 P32322 UNP 199 R +ATOM 1454 C CG . ARG A 1 199 ? 18.234 8.876 -11.060 1.00 98.62 ? 199 ARG A CG 1 P32322 UNP 199 R +ATOM 1455 C CD . ARG A 1 199 ? 17.805 7.483 -11.529 1.00 98.62 ? 199 ARG A CD 1 P32322 UNP 199 R +ATOM 1456 N NE . ARG A 1 199 ? 16.888 6.862 -10.567 1.00 98.62 ? 199 ARG A NE 1 P32322 UNP 199 R +ATOM 1457 N NH1 . ARG A 1 199 ? 16.986 4.732 -11.398 1.00 98.62 ? 199 ARG A NH1 1 P32322 UNP 199 R +ATOM 1458 N NH2 . ARG A 1 199 ? 15.757 5.180 -9.607 1.00 98.62 ? 199 ARG A NH2 1 P32322 UNP 199 R +ATOM 1459 C CZ . ARG A 1 199 ? 16.550 5.589 -10.536 1.00 98.62 ? 199 ARG A CZ 1 P32322 UNP 199 R +ATOM 1460 N N . ARG A 1 200 ? 17.257 11.899 -13.095 1.00 98.69 ? 200 ARG A N 1 P32322 UNP 200 R +ATOM 1461 C CA . ARG A 1 200 ? 16.056 12.748 -12.962 1.00 98.69 ? 200 ARG A CA 1 P32322 UNP 200 R +ATOM 1462 C C . ARG A 1 200 ? 15.181 12.717 -14.219 1.00 98.69 ? 200 ARG A C 1 P32322 UNP 200 R +ATOM 1463 C CB . ARG A 1 200 ? 16.479 14.185 -12.610 1.00 98.69 ? 200 ARG A CB 1 P32322 UNP 200 R +ATOM 1464 O O . ARG A 1 200 ? 13.958 12.683 -14.102 1.00 98.69 ? 200 ARG A O 1 P32322 UNP 200 R +ATOM 1465 C CG . ARG A 1 200 ? 15.274 15.109 -12.361 1.00 98.69 ? 200 ARG A CG 1 P32322 UNP 200 R +ATOM 1466 C CD . ARG A 1 200 ? 15.735 16.525 -11.999 1.00 98.69 ? 200 ARG A CD 1 P32322 UNP 200 R +ATOM 1467 N NE . ARG A 1 200 ? 14.587 17.430 -11.792 1.00 98.69 ? 200 ARG A NE 1 P32322 UNP 200 R +ATOM 1468 N NH1 . ARG A 1 200 ? 15.775 19.392 -11.625 1.00 98.69 ? 200 ARG A NH1 1 P32322 UNP 200 R +ATOM 1469 N NH2 . ARG A 1 200 ? 13.554 19.435 -11.451 1.00 98.69 ? 200 ARG A NH2 1 P32322 UNP 200 R +ATOM 1470 C CZ . ARG A 1 200 ? 14.644 18.742 -11.625 1.00 98.69 ? 200 ARG A CZ 1 P32322 UNP 200 R +ATOM 1471 N N . LEU A 1 201 ? 15.800 12.733 -15.400 1.00 98.75 ? 201 LEU A N 1 P32322 UNP 201 L +ATOM 1472 C CA . LEU A 1 201 ? 15.092 12.660 -16.675 1.00 98.75 ? 201 LEU A CA 1 P32322 UNP 201 L +ATOM 1473 C C . LEU A 1 201 ? 14.506 11.258 -16.885 1.00 98.75 ? 201 LEU A C 1 P32322 UNP 201 L +ATOM 1474 C CB . LEU A 1 201 ? 16.045 13.082 -17.810 1.00 98.75 ? 201 LEU A CB 1 P32322 UNP 201 L +ATOM 1475 O O . LEU A 1 201 ? 13.326 11.149 -17.201 1.00 98.75 ? 201 LEU A O 1 P32322 UNP 201 L +ATOM 1476 C CG . LEU A 1 201 ? 15.408 13.052 -19.212 1.00 98.75 ? 201 LEU A CG 1 P32322 UNP 201 L +ATOM 1477 C CD1 . LEU A 1 201 ? 14.219 14.008 -19.332 1.00 98.75 ? 201 LEU A CD1 1 P32322 UNP 201 L +ATOM 1478 C CD2 . LEU A 1 201 ? 16.451 13.442 -20.256 1.00 98.75 ? 201 LEU A CD2 1 P32322 UNP 201 L +ATOM 1479 N N . ALA A 1 202 ? 15.289 10.205 -16.631 1.00 98.75 ? 202 ALA A N 1 P32322 UNP 202 A +ATOM 1480 C CA . ALA A 1 202 ? 14.851 8.816 -16.778 1.00 98.75 ? 202 ALA A CA 1 P32322 UNP 202 A +ATOM 1481 C C . ALA A 1 202 ? 13.615 8.498 -15.914 1.00 98.75 ? 202 ALA A C 1 P32322 UNP 202 A +ATOM 1482 C CB . ALA A 1 202 ? 16.036 7.898 -16.448 1.00 98.75 ? 202 ALA A CB 1 P32322 UNP 202 A +ATOM 1483 O O . ALA A 1 202 ? 12.614 8.005 -16.431 1.00 98.75 ? 202 ALA A O 1 P32322 UNP 202 A +ATOM 1484 N N . VAL A 1 203 ? 13.637 8.880 -14.628 1.00 98.81 ? 203 VAL A N 1 P32322 UNP 203 V +ATOM 1485 C CA . VAL A 1 203 ? 12.486 8.724 -13.717 1.00 98.81 ? 203 VAL A CA 1 P32322 UNP 203 V +ATOM 1486 C C . VAL A 1 203 ? 11.258 9.467 -14.247 1.00 98.81 ? 203 VAL A C 1 P32322 UNP 203 V +ATOM 1487 C CB . VAL A 1 203 ? 12.835 9.217 -12.296 1.00 98.81 ? 203 VAL A CB 1 P32322 UNP 203 V +ATOM 1488 O O . VAL A 1 203 ? 10.158 8.914 -14.272 1.00 98.81 ? 203 VAL A O 1 P32322 UNP 203 V +ATOM 1489 C CG1 . VAL A 1 203 ? 11.616 9.252 -11.363 1.00 98.81 ? 203 VAL A CG1 1 P32322 UNP 203 V +ATOM 1490 C CG2 . VAL A 1 203 ? 13.881 8.318 -11.627 1.00 98.81 ? 203 VAL A CG2 1 P32322 UNP 203 V +ATOM 1491 N N . ARG A 1 204 ? 11.422 10.722 -14.691 1.00 98.69 ? 204 ARG A N 1 P32322 UNP 204 R +ATOM 1492 C CA . ARG A 1 204 ? 10.297 11.539 -15.167 1.00 98.69 ? 204 ARG A CA 1 P32322 UNP 204 R +ATOM 1493 C C . ARG A 1 204 ? 9.682 10.982 -16.451 1.00 98.69 ? 204 ARG A C 1 P32322 UNP 204 R +ATOM 1494 C CB . ARG A 1 204 ? 10.747 13.001 -15.335 1.00 98.69 ? 204 ARG A CB 1 P32322 UNP 204 R +ATOM 1495 O O . ARG A 1 204 ? 8.459 10.963 -16.556 1.00 98.69 ? 204 ARG A O 1 P32322 UNP 204 R +ATOM 1496 C CG . ARG A 1 204 ? 9.606 13.970 -15.695 1.00 98.69 ? 204 ARG A CG 1 P32322 UNP 204 R +ATOM 1497 C CD . ARG A 1 204 ? 8.536 14.046 -14.596 1.00 98.69 ? 204 ARG A CD 1 P32322 UNP 204 R +ATOM 1498 N NE . ARG A 1 204 ? 7.489 15.031 -14.920 1.00 98.69 ? 204 ARG A NE 1 P32322 UNP 204 R +ATOM 1499 N NH1 . ARG A 1 204 ? 6.456 15.063 -12.866 1.00 98.69 ? 204 ARG A NH1 1 P32322 UNP 204 R +ATOM 1500 N NH2 . ARG A 1 204 ? 5.626 16.285 -14.538 1.00 98.69 ? 204 ARG A NH2 1 P32322 UNP 204 R +ATOM 1501 C CZ . ARG A 1 204 ? 6.535 15.456 -14.109 1.00 98.69 ? 204 ARG A CZ 1 P32322 UNP 204 R +ATOM 1502 N N . LEU A 1 205 ? 10.506 10.533 -17.398 1.00 98.81 ? 205 LEU A N 1 P32322 UNP 205 L +ATOM 1503 C CA . LEU A 1 205 ? 10.047 9.934 -18.652 1.00 98.81 ? 205 LEU A CA 1 P32322 UNP 205 L +ATOM 1504 C C . LEU A 1 205 ? 9.315 8.612 -18.405 1.00 98.81 ? 205 LEU A C 1 P32322 UNP 205 L +ATOM 1505 C CB . LEU A 1 205 ? 11.241 9.730 -19.603 1.00 98.81 ? 205 LEU A CB 1 P32322 UNP 205 L +ATOM 1506 O O . LEU A 1 205 ? 8.216 8.436 -18.924 1.00 98.81 ? 205 LEU A O 1 P32322 UNP 205 L +ATOM 1507 C CG . LEU A 1 205 ? 11.838 11.023 -20.187 1.00 98.81 ? 205 LEU A CG 1 P32322 UNP 205 L +ATOM 1508 C CD1 . LEU A 1 205 ? 13.087 10.676 -20.996 1.00 98.81 ? 205 LEU A CD1 1 P32322 UNP 205 L +ATOM 1509 C CD2 . LEU A 1 205 ? 10.862 11.763 -21.104 1.00 98.81 ? 205 LEU A CD2 1 P32322 UNP 205 L +ATOM 1510 N N . GLY A 1 206 ? 9.865 7.729 -17.562 1.00 98.69 ? 206 GLY A N 1 P32322 UNP 206 G +ATOM 1511 C CA . GLY A 1 206 ? 9.208 6.472 -17.190 1.00 98.69 ? 206 GLY A CA 1 P32322 UNP 206 G +ATOM 1512 C C . GLY A 1 206 ? 7.845 6.699 -16.529 1.00 98.69 ? 206 GLY A C 1 P32322 UNP 206 G +ATOM 1513 O O . GLY A 1 206 ? 6.852 6.093 -16.927 1.00 98.69 ? 206 GLY A O 1 P32322 UNP 206 G +ATOM 1514 N N . ALA A 1 207 ? 7.769 7.640 -15.580 1.00 98.81 ? 207 ALA A N 1 P32322 UNP 207 A +ATOM 1515 C CA . ALA A 1 207 ? 6.515 7.992 -14.910 1.00 98.81 ? 207 ALA A CA 1 P32322 UNP 207 A +ATOM 1516 C C . ALA A 1 207 ? 5.470 8.549 -15.889 1.00 98.81 ? 207 ALA A C 1 P32322 UNP 207 A +ATOM 1517 C CB . ALA A 1 207 ? 6.826 8.975 -13.776 1.00 98.81 ? 207 ALA A CB 1 P32322 UNP 207 A +ATOM 1518 O O . ALA A 1 207 ? 4.304 8.157 -15.840 1.00 98.81 ? 207 ALA A O 1 P32322 UNP 207 A +ATOM 1519 N N . GLN A 1 208 ? 5.885 9.429 -16.806 1.00 98.81 ? 208 GLN A N 1 P32322 UNP 208 Q +ATOM 1520 C CA . GLN A 1 208 ? 4.997 10.000 -17.818 1.00 98.81 ? 208 GLN A CA 1 P32322 UNP 208 Q +ATOM 1521 C C . GLN A 1 208 ? 4.504 8.945 -18.821 1.00 98.81 ? 208 GLN A C 1 P32322 UNP 208 Q +ATOM 1522 C CB . GLN A 1 208 ? 5.730 11.151 -18.526 1.00 98.81 ? 208 GLN A CB 1 P32322 UNP 208 Q +ATOM 1523 O O . GLN A 1 208 ? 3.348 9.009 -19.239 1.00 98.81 ? 208 GLN A O 1 P32322 UNP 208 Q +ATOM 1524 C CG . GLN A 1 208 ? 4.812 11.983 -19.435 1.00 98.81 ? 208 GLN A CG 1 P32322 UNP 208 Q +ATOM 1525 C CD . GLN A 1 208 ? 3.717 12.704 -18.655 1.00 98.81 ? 208 GLN A CD 1 P32322 UNP 208 Q +ATOM 1526 N NE2 . GLN A 1 208 ? 2.466 12.528 -19.018 1.00 98.81 ? 208 GLN A NE2 1 P32322 UNP 208 Q +ATOM 1527 O OE1 . GLN A 1 208 ? 3.971 13.428 -17.703 1.00 98.81 ? 208 GLN A OE1 1 P32322 UNP 208 Q +ATOM 1528 N N . ALA A 1 209 ? 5.351 7.973 -19.180 1.00 98.75 ? 209 ALA A N 1 P32322 UNP 209 A +ATOM 1529 C CA . ALA A 1 209 ? 4.990 6.873 -20.069 1.00 98.75 ? 209 ALA A CA 1 P32322 UNP 209 A +ATOM 1530 C C . ALA A 1 209 ? 3.917 5.967 -19.445 1.00 98.75 ? 209 ALA A C 1 P32322 UNP 209 A +ATOM 1531 C CB . ALA A 1 209 ? 6.257 6.092 -20.438 1.00 98.75 ? 209 ALA A CB 1 P32322 UNP 209 A +ATOM 1532 O O . ALA A 1 209 ? 2.909 5.695 -20.096 1.00 98.75 ? 209 ALA A O 1 P32322 UNP 209 A +ATOM 1533 N N . LEU A 1 210 ? 4.082 5.562 -18.177 1.00 98.75 ? 210 LEU A N 1 P32322 UNP 210 L +ATOM 1534 C CA . LEU A 1 210 ? 3.071 4.751 -17.485 1.00 98.75 ? 210 LEU A CA 1 P32322 UNP 210 L +ATOM 1535 C C . LEU A 1 210 ? 1.751 5.508 -17.299 1.00 98.75 ? 210 LEU A C 1 P32322 UNP 210 L +ATOM 1536 C CB . LEU A 1 210 ? 3.592 4.249 -16.127 1.00 98.75 ? 210 LEU A CB 1 P32322 UNP 210 L +ATOM 1537 O O . LEU A 1 210 ? 0.693 4.947 -17.576 1.00 98.75 ? 210 LEU A O 1 P32322 UNP 210 L +ATOM 1538 C CG . LEU A 1 210 ? 4.711 3.193 -16.180 1.00 98.75 ? 210 LEU A CG 1 P32322 UNP 210 L +ATOM 1539 C CD1 . LEU A 1 210 ? 4.930 2.635 -14.773 1.00 98.75 ? 210 LEU A CD1 1 P32322 UNP 210 L +ATOM 1540 C CD2 . LEU A 1 210 ? 4.385 2.007 -17.091 1.00 98.75 ? 210 LEU A CD2 1 P32322 UNP 210 L +ATOM 1541 N N . LEU A 1 211 ? 1.802 6.783 -16.895 1.00 98.75 ? 211 LEU A N 1 P32322 UNP 211 L +ATOM 1542 C CA . LEU A 1 211 ? 0.602 7.615 -16.757 1.00 98.75 ? 211 LEU A CA 1 P32322 UNP 211 L +ATOM 1543 C C . LEU A 1 211 ? -0.146 7.738 -18.090 1.00 98.75 ? 211 LEU A C 1 P32322 UNP 211 L +ATOM 1544 C CB . LEU A 1 211 ? 1.015 8.981 -16.176 1.00 98.75 ? 211 LEU A CB 1 P32322 UNP 211 L +ATOM 1545 O O . LEU A 1 211 ? -1.361 7.558 -18.137 1.00 98.75 ? 211 LEU A O 1 P32322 UNP 211 L +ATOM 1546 C CG . LEU A 1 211 ? -0.158 9.949 -15.901 1.00 98.75 ? 211 LEU A CG 1 P32322 UNP 211 L +ATOM 1547 C CD1 . LEU A 1 211 ? 0.257 10.948 -14.819 1.00 98.75 ? 211 LEU A CD1 1 P32322 UNP 211 L +ATOM 1548 C CD2 . LEU A 1 211 ? -0.567 10.781 -17.125 1.00 98.75 ? 211 LEU A CD2 1 P32322 UNP 211 L +ATOM 1549 N N . GLY A 1 212 ? 0.577 8.025 -19.177 1.00 98.62 ? 212 GLY A N 1 P32322 UNP 212 G +ATOM 1550 C CA . GLY A 1 212 ? -0.002 8.147 -20.513 1.00 98.62 ? 212 GLY A CA 1 P32322 UNP 212 G +ATOM 1551 C C . GLY A 1 212 ? -0.642 6.844 -20.993 1.00 98.62 ? 212 GLY A C 1 P32322 UNP 212 G +ATOM 1552 O O . GLY A 1 212 ? -1.793 6.860 -21.422 1.00 98.62 ? 212 GLY A O 1 P32322 UNP 212 G +ATOM 1553 N N . ALA A 1 213 ? 0.065 5.718 -20.859 1.00 98.75 ? 213 ALA A N 1 P32322 UNP 213 A +ATOM 1554 C CA . ALA A 1 213 ? -0.433 4.404 -21.265 1.00 98.75 ? 213 ALA A CA 1 P32322 UNP 213 A +ATOM 1555 C C . ALA A 1 213 ? -1.686 3.985 -20.479 1.00 98.75 ? 213 ALA A C 1 P32322 UNP 213 A +ATOM 1556 C CB . ALA A 1 213 ? 0.700 3.385 -21.099 1.00 98.75 ? 213 ALA A CB 1 P32322 UNP 213 A +ATOM 1557 O O . ALA A 1 213 ? -2.667 3.544 -21.079 1.00 98.75 ? 213 ALA A O 1 P32322 UNP 213 A +ATOM 1558 N N . ALA A 1 214 ? -1.689 4.177 -19.155 1.00 98.62 ? 214 ALA A N 1 P32322 UNP 214 A +ATOM 1559 C CA . ALA A 1 214 ? -2.854 3.897 -18.319 1.00 98.62 ? 214 ALA A CA 1 P32322 UNP 214 A +ATOM 1560 C C . ALA A 1 214 ? -4.050 4.773 -18.718 1.00 98.62 ? 214 ALA A C 1 P32322 UNP 214 A +ATOM 1561 C CB . ALA A 1 214 ? -2.468 4.099 -16.849 1.00 98.62 ? 214 ALA A CB 1 P32322 UNP 214 A +ATOM 1562 O O . ALA A 1 214 ? -5.152 4.265 -18.917 1.00 98.62 ? 214 ALA A O 1 P32322 UNP 214 A +ATOM 1563 N N . LYS A 1 215 ? -3.830 6.080 -18.922 1.00 98.62 ? 215 LYS A N 1 P32322 UNP 215 K +ATOM 1564 C CA . LYS A 1 215 ? -4.892 7.002 -19.338 1.00 98.62 ? 215 LYS A CA 1 P32322 UNP 215 K +ATOM 1565 C C . LYS A 1 215 ? -5.468 6.647 -20.710 1.00 98.62 ? 215 LYS A C 1 P32322 UNP 215 K +ATOM 1566 C CB . LYS A 1 215 ? -4.372 8.445 -19.281 1.00 98.62 ? 215 LYS A CB 1 P32322 UNP 215 K +ATOM 1567 O O . LYS A 1 215 ? -6.683 6.719 -20.871 1.00 98.62 ? 215 LYS A O 1 P32322 UNP 215 K +ATOM 1568 C CG . LYS A 1 215 ? -5.522 9.440 -19.485 1.00 98.62 ? 215 LYS A CG 1 P32322 UNP 215 K +ATOM 1569 C CD . LYS A 1 215 ? -5.079 10.884 -19.247 1.00 98.62 ? 215 LYS A CD 1 P32322 UNP 215 K +ATOM 1570 C CE . LYS A 1 215 ? -6.310 11.785 -19.390 1.00 98.62 ? 215 LYS A CE 1 P32322 UNP 215 K +ATOM 1571 N NZ . LYS A 1 215 ? -6.025 13.185 -19.000 1.00 98.62 ? 215 LYS A NZ 1 P32322 UNP 215 K +ATOM 1572 N N . MET A 1 216 ? -4.628 6.251 -21.671 1.00 98.50 ? 216 MET A N 1 P32322 UNP 216 M +ATOM 1573 C CA . MET A 1 216 ? -5.080 5.790 -22.990 1.00 98.50 ? 216 MET A CA 1 P32322 UNP 216 M +ATOM 1574 C C . MET A 1 216 ? -6.000 4.576 -22.877 1.00 98.50 ? 216 MET A C 1 P32322 UNP 216 M +ATOM 1575 C CB . MET A 1 216 ? -3.889 5.417 -23.884 1.00 98.50 ? 216 MET A CB 1 P32322 UNP 216 M +ATOM 1576 O O . MET A 1 216 ? -7.048 4.563 -23.511 1.00 98.50 ? 216 MET A O 1 P32322 UNP 216 M +ATOM 1577 C CG . MET A 1 216 ? -3.164 6.638 -24.453 1.00 98.50 ? 216 MET A CG 1 P32322 UNP 216 M +ATOM 1578 S SD . MET A 1 216 ? -1.701 6.230 -25.447 1.00 98.50 ? 216 MET A SD 1 P32322 UNP 216 M +ATOM 1579 C CE . MET A 1 216 ? -2.476 5.389 -26.857 1.00 98.50 ? 216 MET A CE 1 P32322 UNP 216 M +ATOM 1580 N N . LEU A 1 217 ? -5.629 3.586 -22.059 1.00 98.56 ? 217 LEU A N 1 P32322 UNP 217 L +ATOM 1581 C CA . LEU A 1 217 ? -6.448 2.392 -21.862 1.00 98.56 ? 217 LEU A CA 1 P32322 UNP 217 L +ATOM 1582 C C . LEU A 1 217 ? -7.783 2.719 -21.177 1.00 98.56 ? 217 LEU A C 1 P32322 UNP 217 L +ATOM 1583 C CB . LEU A 1 217 ? -5.626 1.347 -21.088 1.00 98.56 ? 217 LEU A CB 1 P32322 UNP 217 L +ATOM 1584 O O . LEU A 1 217 ? -8.811 2.221 -21.608 1.00 98.56 ? 217 LEU A O 1 P32322 UNP 217 L +ATOM 1585 C CG . LEU A 1 217 ? -6.353 0.004 -20.885 1.00 98.56 ? 217 LEU A CG 1 P32322 UNP 217 L +ATOM 1586 C CD1 . LEU A 1 217 ? -6.670 -0.708 -22.201 1.00 98.56 ? 217 LEU A CD1 1 P32322 UNP 217 L +ATOM 1587 C CD2 . LEU A 1 217 ? -5.466 -0.924 -20.053 1.00 98.56 ? 217 LEU A CD2 1 P32322 UNP 217 L +ATOM 1588 N N . LEU A 1 218 ? -7.788 3.597 -20.168 1.00 98.19 ? 218 LEU A N 1 P32322 UNP 218 L +ATOM 1589 C CA . LEU A 1 218 ? -9.013 3.996 -19.458 1.00 98.19 ? 218 LEU A CA 1 P32322 UNP 218 L +ATOM 1590 C C . LEU A 1 218 ? -10.029 4.751 -20.336 1.00 98.19 ? 218 LEU A C 1 P32322 UNP 218 L +ATOM 1591 C CB . LEU A 1 218 ? -8.633 4.868 -18.246 1.00 98.19 ? 218 LEU A CB 1 P32322 UNP 218 L +ATOM 1592 O O . LEU A 1 218 ? -11.211 4.755 -20.019 1.00 98.19 ? 218 LEU A O 1 P32322 UNP 218 L +ATOM 1593 C CG . LEU A 1 218 ? -7.958 4.113 -17.087 1.00 98.19 ? 218 LEU A CG 1 P32322 UNP 218 L +ATOM 1594 C CD1 . LEU A 1 218 ? -7.445 5.126 -16.061 1.00 98.19 ? 218 LEU A CD1 1 P32322 UNP 218 L +ATOM 1595 C CD2 . LEU A 1 218 ? -8.915 3.152 -16.381 1.00 98.19 ? 218 LEU A CD2 1 P32322 UNP 218 L +ATOM 1596 N N . HIS A 1 219 ? -9.579 5.405 -21.412 1.00 98.19 ? 219 HIS A N 1 P32322 UNP 219 H +ATOM 1597 C CA . HIS A 1 219 ? -10.434 6.181 -22.326 1.00 98.19 ? 219 HIS A CA 1 P32322 UNP 219 H +ATOM 1598 C C . HIS A 1 219 ? -10.653 5.477 -23.674 1.00 98.19 ? 219 HIS A C 1 P32322 UNP 219 H +ATOM 1599 C CB . HIS A 1 219 ? -9.855 7.592 -22.524 1.00 98.19 ? 219 HIS A CB 1 P32322 UNP 219 H +ATOM 1600 O O . HIS A 1 219 ? -11.123 6.102 -24.624 1.00 98.19 ? 219 HIS A O 1 P32322 UNP 219 H +ATOM 1601 C CG . HIS A 1 219 ? -9.829 8.430 -21.274 1.00 98.19 ? 219 HIS A CG 1 P32322 UNP 219 H +ATOM 1602 C CD2 . HIS A 1 219 ? -10.643 9.487 -20.968 1.00 98.19 ? 219 HIS A CD2 1 P32322 UNP 219 H +ATOM 1603 N ND1 . HIS A 1 219 ? -8.970 8.261 -20.219 1.00 98.19 ? 219 HIS A ND1 1 P32322 UNP 219 H +ATOM 1604 C CE1 . HIS A 1 219 ? -9.277 9.168 -19.280 1.00 98.19 ? 219 HIS A CE1 1 P32322 UNP 219 H +ATOM 1605 N NE2 . HIS A 1 219 ? -10.253 9.979 -19.714 1.00 98.19 ? 219 HIS A NE2 1 P32322 UNP 219 H +ATOM 1606 N N . SER A 1 220 ? -10.271 4.205 -23.784 1.00 97.06 ? 220 SER A N 1 P32322 UNP 220 S +ATOM 1607 C CA . SER A 1 220 ? -10.395 3.417 -25.005 1.00 97.06 ? 220 SER A CA 1 P32322 UNP 220 S +ATOM 1608 C C . SER A 1 220 ? -11.203 2.155 -24.739 1.00 97.06 ? 220 SER A C 1 P32322 UNP 220 S +ATOM 1609 C CB . SER A 1 220 ? -9.007 3.068 -25.545 1.00 97.06 ? 220 SER A CB 1 P32322 UNP 220 S +ATOM 1610 O O . SER A 1 220 ? -11.066 1.528 -23.696 1.00 97.06 ? 220 SER A O 1 P32322 UNP 220 S +ATOM 1611 O OG . SER A 1 220 ? -9.117 2.436 -26.808 1.00 97.06 ? 220 SER A OG 1 P32322 UNP 220 S +ATOM 1612 N N . GLU A 1 221 ? -12.004 1.742 -25.718 1.00 97.56 ? 221 GLU A N 1 P32322 UNP 221 E +ATOM 1613 C CA . GLU A 1 221 ? -12.666 0.430 -25.716 1.00 97.56 ? 221 GLU A CA 1 P32322 UNP 221 E +ATOM 1614 C C . GLU A 1 221 ? -11.756 -0.677 -26.282 1.00 97.56 ? 221 GLU A C 1 P32322 UNP 221 E +ATOM 1615 C CB . GLU A 1 221 ? -13.980 0.517 -26.502 1.00 97.56 ? 221 GLU A CB 1 P32322 UNP 221 E +ATOM 1616 O O . GLU A 1 221 ? -12.128 -1.849 -26.333 1.00 97.56 ? 221 GLU A O 1 P32322 UNP 221 E +ATOM 1617 C CG . GLU A 1 221 ? -14.981 1.499 -25.872 1.00 97.56 ? 221 GLU A CG 1 P32322 UNP 221 E +ATOM 1618 C CD . GLU A 1 221 ? -16.347 1.492 -26.575 1.00 97.56 ? 221 GLU A CD 1 P32322 UNP 221 E +ATOM 1619 O OE1 . GLU A 1 221 ? -17.274 2.123 -26.022 1.00 97.56 ? 221 GLU A OE1 1 P32322 UNP 221 E +ATOM 1620 O OE2 . GLU A 1 221 ? -16.452 0.889 -27.669 1.00 97.56 ? 221 GLU A OE2 1 P32322 UNP 221 E +ATOM 1621 N N . GLN A 1 222 ? -10.548 -0.328 -26.741 1.00 98.00 ? 222 GLN A N 1 P32322 UNP 222 Q +ATOM 1622 C CA . GLN A 1 222 ? -9.616 -1.294 -27.314 1.00 98.00 ? 222 GLN A CA 1 P32322 UNP 222 Q +ATOM 1623 C C . GLN A 1 222 ? -8.959 -2.153 -26.229 1.00 98.00 ? 222 GLN A C 1 P32322 UNP 222 Q +ATOM 1624 C CB . GLN A 1 222 ? -8.550 -0.596 -28.171 1.00 98.00 ? 222 GLN A CB 1 P32322 UNP 222 Q +ATOM 1625 O O . GLN A 1 222 ? -8.505 -1.662 -25.196 1.00 98.00 ? 222 GLN A O 1 P32322 UNP 222 Q +ATOM 1626 C CG . GLN A 1 222 ? -9.157 0.133 -29.377 1.00 98.00 ? 222 GLN A CG 1 P32322 UNP 222 Q +ATOM 1627 C CD . GLN A 1 222 ? -8.087 0.771 -30.256 1.00 98.00 ? 222 GLN A CD 1 P32322 UNP 222 Q +ATOM 1628 N NE2 . GLN A 1 222 ? -7.994 0.395 -31.513 1.00 98.00 ? 222 GLN A NE2 1 P32322 UNP 222 Q +ATOM 1629 O OE1 . GLN A 1 222 ? -7.309 1.613 -29.838 1.00 98.00 ? 222 GLN A OE1 1 P32322 UNP 222 Q +ATOM 1630 N N . HIS A 1 223 ? -8.800 -3.445 -26.521 1.00 98.31 ? 223 HIS A N 1 P32322 UNP 223 H +ATOM 1631 C CA . HIS A 1 223 ? -8.032 -4.359 -25.679 1.00 98.31 ? 223 HIS A CA 1 P32322 UNP 223 H +ATOM 1632 C C . HIS A 1 223 ? -6.572 -3.865 -25.518 1.00 98.31 ? 223 HIS A C 1 P32322 UNP 223 H +ATOM 1633 C CB . HIS A 1 223 ? -8.108 -5.762 -26.307 1.00 98.31 ? 223 HIS A CB 1 P32322 UNP 223 H +ATOM 1634 O O . HIS A 1 223 ? -5.974 -3.412 -26.500 1.00 98.31 ? 223 HIS A O 1 P32322 UNP 223 H +ATOM 1635 C CG . HIS A 1 223 ? -7.469 -6.840 -25.471 1.00 98.31 ? 223 HIS A CG 1 P32322 UNP 223 H +ATOM 1636 C CD2 . HIS A 1 223 ? -8.025 -7.474 -24.391 1.00 98.31 ? 223 HIS A CD2 1 P32322 UNP 223 H +ATOM 1637 N ND1 . HIS A 1 223 ? -6.208 -7.362 -25.645 1.00 98.31 ? 223 HIS A ND1 1 P32322 UNP 223 H +ATOM 1638 C CE1 . HIS A 1 223 ? -5.994 -8.260 -24.669 1.00 98.31 ? 223 HIS A CE1 1 P32322 UNP 223 H +ATOM 1639 N NE2 . HIS A 1 223 ? -7.065 -8.347 -23.874 1.00 98.31 ? 223 HIS A NE2 1 P32322 UNP 223 H +ATOM 1640 N N . PRO A 1 224 ? -5.921 -4.008 -24.343 1.00 98.25 ? 224 PRO A N 1 P32322 UNP 224 P +ATOM 1641 C CA . PRO A 1 224 ? -4.530 -3.576 -24.139 1.00 98.25 ? 224 PRO A CA 1 P32322 UNP 224 P +ATOM 1642 C C . PRO A 1 224 ? -3.536 -4.218 -25.120 1.00 98.25 ? 224 PRO A C 1 P32322 UNP 224 P +ATOM 1643 C CB . PRO A 1 224 ? -4.201 -3.943 -22.685 1.00 98.25 ? 224 PRO A CB 1 P32322 UNP 224 P +ATOM 1644 O O . PRO A 1 224 ? -2.533 -3.606 -25.483 1.00 98.25 ? 224 PRO A O 1 P32322 UNP 224 P +ATOM 1645 C CG . PRO A 1 224 ? -5.227 -5.017 -22.322 1.00 98.25 ? 224 PRO A CG 1 P32322 UNP 224 P +ATOM 1646 C CD . PRO A 1 224 ? -6.452 -4.566 -23.108 1.00 98.25 ? 224 PRO A CD 1 P32322 UNP 224 P +ATOM 1647 N N . GLY A 1 225 ? -3.828 -5.433 -25.600 1.00 98.50 ? 225 GLY A N 1 P32322 UNP 225 G +ATOM 1648 C CA . GLY A 1 225 ? -3.065 -6.078 -26.675 1.00 98.50 ? 225 GLY A CA 1 P32322 UNP 225 G +ATOM 1649 C C . GLY A 1 225 ? -3.100 -5.298 -27.995 1.00 98.50 ? 225 GLY A C 1 P32322 UNP 225 G +ATOM 1650 O O . GLY A 1 225 ? -2.065 -5.163 -28.637 1.00 98.50 ? 225 GLY A O 1 P32322 UNP 225 G +ATOM 1651 N N . GLN A 1 226 ? -4.245 -4.704 -28.343 1.00 98.38 ? 226 GLN A N 1 P32322 UNP 226 Q +ATOM 1652 C CA . GLN A 1 226 ? -4.382 -3.875 -29.541 1.00 98.38 ? 226 GLN A CA 1 P32322 UNP 226 Q +ATOM 1653 C C . GLN A 1 226 ? -3.609 -2.559 -29.399 1.00 98.38 ? 226 GLN A C 1 P32322 UNP 226 Q +ATOM 1654 C CB . GLN A 1 226 ? -5.874 -3.605 -29.803 1.00 98.38 ? 226 GLN A CB 1 P32322 UNP 226 Q +ATOM 1655 O O . GLN A 1 226 ? -2.903 -2.155 -30.318 1.00 98.38 ? 226 GLN A O 1 P32322 UNP 226 Q +ATOM 1656 C CG . GLN A 1 226 ? -6.119 -2.828 -31.104 1.00 98.38 ? 226 GLN A CG 1 P32322 UNP 226 Q +ATOM 1657 C CD . GLN A 1 226 ? -5.633 -3.607 -32.319 1.00 98.38 ? 226 GLN A CD 1 P32322 UNP 226 Q +ATOM 1658 N NE2 . GLN A 1 226 ? -4.659 -3.122 -33.056 1.00 98.38 ? 226 GLN A NE2 1 P32322 UNP 226 Q +ATOM 1659 O OE1 . GLN A 1 226 ? -6.117 -4.687 -32.602 1.00 98.38 ? 226 GLN A OE1 1 P32322 UNP 226 Q +ATOM 1660 N N . LEU A 1 227 ? -3.685 -1.903 -28.235 1.00 98.19 ? 227 LEU A N 1 P32322 UNP 227 L +ATOM 1661 C CA . LEU A 1 227 ? -2.900 -0.689 -27.977 1.00 98.19 ? 227 LEU A CA 1 P32322 UNP 227 L +ATOM 1662 C C . LEU A 1 227 ? -1.391 -0.967 -28.048 1.00 98.19 ? 227 LEU A C 1 P32322 UNP 227 L +ATOM 1663 C CB . LEU A 1 227 ? -3.275 -0.085 -26.613 1.00 98.19 ? 227 LEU A CB 1 P32322 UNP 227 L +ATOM 1664 O O . LEU A 1 227 ? -0.645 -0.164 -28.603 1.00 98.19 ? 227 LEU A O 1 P32322 UNP 227 L +ATOM 1665 C CG . LEU A 1 227 ? -4.722 0.428 -26.498 1.00 98.19 ? 227 LEU A CG 1 P32322 UNP 227 L +ATOM 1666 C CD1 . LEU A 1 227 ? -4.924 1.054 -25.120 1.00 98.19 ? 227 LEU A CD1 1 P32322 UNP 227 L +ATOM 1667 C CD2 . LEU A 1 227 ? -5.046 1.493 -27.546 1.00 98.19 ? 227 LEU A CD2 1 P32322 UNP 227 L +ATOM 1668 N N . LYS A 1 228 ? -0.946 -2.125 -27.545 1.00 98.44 ? 228 LYS A N 1 P32322 UNP 228 K +ATOM 1669 C CA . LYS A 1 228 ? 0.440 -2.597 -27.684 1.00 98.44 ? 228 LYS A CA 1 P32322 UNP 228 K +ATOM 1670 C C . LYS A 1 228 ? 0.845 -2.745 -29.156 1.00 98.44 ? 228 LYS A C 1 P32322 UNP 228 K +ATOM 1671 C CB . LYS A 1 228 ? 0.583 -3.920 -26.915 1.00 98.44 ? 228 LYS A CB 1 P32322 UNP 228 K +ATOM 1672 O O . LYS A 1 228 ? 1.944 -2.326 -29.523 1.00 98.44 ? 228 LYS A O 1 P32322 UNP 228 K +ATOM 1673 C CG . LYS A 1 228 ? 1.970 -4.576 -27.038 1.00 98.44 ? 228 LYS A CG 1 P32322 UNP 228 K +ATOM 1674 C CD . LYS A 1 228 ? 1.963 -6.028 -26.536 1.00 98.44 ? 228 LYS A CD 1 P32322 UNP 228 K +ATOM 1675 C CE . LYS A 1 228 ? 1.109 -6.994 -27.384 1.00 98.44 ? 228 LYS A CE 1 P32322 UNP 228 K +ATOM 1676 N NZ . LYS A 1 228 ? 1.569 -7.117 -28.788 1.00 98.44 ? 228 LYS A NZ 1 P32322 UNP 228 K +ATOM 1677 N N . ASP A 1 229 ? -0.014 -3.326 -29.989 1.00 98.12 ? 229 ASP A N 1 P32322 UNP 229 D +ATOM 1678 C CA . ASP A 1 229 ? 0.264 -3.522 -31.418 1.00 98.12 ? 229 ASP A CA 1 P32322 UNP 229 D +ATOM 1679 C C . ASP A 1 229 ? 0.355 -2.188 -32.164 1.00 98.12 ? 229 ASP A C 1 P32322 UNP 229 D +ATOM 1680 C CB . ASP A 1 229 ? -0.785 -4.456 -32.042 1.00 98.12 ? 229 ASP A CB 1 P32322 UNP 229 D +ATOM 1681 O O . ASP A 1 229 ? 1.279 -1.992 -32.951 1.00 98.12 ? 229 ASP A O 1 P32322 UNP 229 D +ATOM 1682 C CG . ASP A 1 229 ? -0.684 -5.889 -31.509 1.00 98.12 ? 229 ASP A CG 1 P32322 UNP 229 D +ATOM 1683 O OD1 . ASP A 1 229 ? 0.354 -6.220 -30.879 1.00 98.12 ? 229 ASP A OD1 1 P32322 UNP 229 D +ATOM 1684 O OD2 . ASP A 1 229 ? -1.638 -6.665 -31.704 1.00 98.12 ? 229 ASP A OD2 1 P32322 UNP 229 D +ATOM 1685 N N . ASN A 1 230 ? -0.499 -1.219 -31.822 1.00 97.75 ? 230 ASN A N 1 P32322 UNP 230 N +ATOM 1686 C CA . ASN A 1 230 ? -0.471 0.125 -32.409 1.00 97.75 ? 230 ASN A CA 1 P32322 UNP 230 N +ATOM 1687 C C . ASN A 1 230 ? 0.858 0.875 -32.156 1.00 97.75 ? 230 ASN A C 1 P32322 UNP 230 N +ATOM 1688 C CB . ASN A 1 230 ? -1.663 0.934 -31.862 1.00 97.75 ? 230 ASN A CB 1 P32322 UNP 230 N +ATOM 1689 O O . ASN A 1 230 ? 1.210 1.771 -32.919 1.00 97.75 ? 230 ASN A O 1 P32322 UNP 230 N +ATOM 1690 C CG . ASN A 1 230 ? -3.036 0.375 -32.209 1.00 97.75 ? 230 ASN A CG 1 P32322 UNP 230 N +ATOM 1691 N ND2 . ASN A 1 230 ? -4.072 0.889 -31.586 1.00 97.75 ? 230 ASN A ND2 1 P32322 UNP 230 N +ATOM 1692 O OD1 . ASN A 1 230 ? -3.220 -0.511 -33.029 1.00 97.75 ? 230 ASN A OD1 1 P32322 UNP 230 N +ATOM 1693 N N . VAL A 1 231 ? 1.607 0.520 -31.103 1.00 97.94 ? 231 VAL A N 1 P32322 UNP 231 V +ATOM 1694 C CA . VAL A 1 231 ? 2.935 1.089 -30.781 1.00 97.94 ? 231 VAL A CA 1 P32322 UNP 231 V +ATOM 1695 C C . VAL A 1 231 ? 4.085 0.264 -31.389 1.00 97.94 ? 231 VAL A C 1 P32322 UNP 231 V +ATOM 1696 C CB . VAL A 1 231 ? 3.081 1.235 -29.246 1.00 97.94 ? 231 VAL A CB 1 P32322 UNP 231 V +ATOM 1697 O O . VAL A 1 231 ? 5.222 0.734 -31.486 1.00 97.94 ? 231 VAL A O 1 P32322 UNP 231 V +ATOM 1698 C CG1 . VAL A 1 231 ? 4.410 1.867 -28.806 1.00 97.94 ? 231 VAL A CG1 1 P32322 UNP 231 V +ATOM 1699 C CG2 . VAL A 1 231 ? 1.982 2.138 -28.663 1.00 97.94 ? 231 VAL A CG2 1 P32322 UNP 231 V +ATOM 1700 N N . SER A 1 232 ? 3.818 -0.975 -31.806 1.00 97.00 ? 232 SER A N 1 P32322 UNP 232 S +ATOM 1701 C CA . SER A 1 232 ? 4.829 -1.946 -32.239 1.00 97.00 ? 232 SER A CA 1 P32322 UNP 232 S +ATOM 1702 C C . SER A 1 232 ? 4.954 -1.979 -33.762 1.00 97.00 ? 232 SER A C 1 P32322 UNP 232 S +ATOM 1703 C CB . SER A 1 232 ? 4.506 -3.334 -31.677 1.00 97.00 ? 232 SER A CB 1 P32322 UNP 232 S +ATOM 1704 O O . SER A 1 232 ? 4.403 -2.855 -34.423 1.00 97.00 ? 232 SER A O 1 P32322 UNP 232 S +ATOM 1705 O OG . SER A 1 232 ? 4.452 -3.288 -30.263 1.00 97.00 ? 232 SER A OG 1 P32322 UNP 232 S +ATOM 1706 N N . SER A 1 233 ? 5.708 -1.037 -34.334 1.00 95.56 ? 233 SER A N 1 P32322 UNP 233 S +ATOM 1707 C CA . SER A 1 233 ? 5.969 -1.037 -35.778 1.00 95.56 ? 233 SER A CA 1 P32322 UNP 233 S +ATOM 1708 C C . SER A 1 233 ? 6.726 -2.304 -36.228 1.00 95.56 ? 233 SER A C 1 P32322 UNP 233 S +ATOM 1709 C CB . SER A 1 233 ? 6.707 0.232 -36.216 1.00 95.56 ? 233 SER A CB 1 P32322 UNP 233 S +ATOM 1710 O O . SER A 1 233 ? 7.611 -2.781 -35.503 1.00 95.56 ? 233 SER A O 1 P32322 UNP 233 S +ATOM 1711 O OG . SER A 1 233 ? 7.909 0.430 -35.493 1.00 95.56 ? 233 SER A OG 1 P32322 UNP 233 S +ATOM 1712 N N . PRO A 1 234 ? 6.424 -2.860 -37.421 1.00 95.19 ? 234 PRO A N 1 P32322 UNP 234 P +ATOM 1713 C CA . PRO A 1 234 ? 7.139 -4.019 -37.953 1.00 95.19 ? 234 PRO A CA 1 P32322 UNP 234 P +ATOM 1714 C C . PRO A 1 234 ? 8.656 -3.785 -38.006 1.00 95.19 ? 234 PRO A C 1 P32322 UNP 234 P +ATOM 1715 C CB . PRO A 1 234 ? 6.547 -4.267 -39.345 1.00 95.19 ? 234 PRO A CB 1 P32322 UNP 234 P +ATOM 1716 O O . PRO A 1 234 ? 9.116 -2.782 -38.547 1.00 95.19 ? 234 PRO A O 1 P32322 UNP 234 P +ATOM 1717 C CG . PRO A 1 234 ? 5.130 -3.710 -39.225 1.00 95.19 ? 234 PRO A CG 1 P32322 UNP 234 P +ATOM 1718 C CD . PRO A 1 234 ? 5.313 -2.510 -38.300 1.00 95.19 ? 234 PRO A CD 1 P32322 UNP 234 P +ATOM 1719 N N . GLY A 1 235 ? 9.435 -4.693 -37.409 1.00 95.69 ? 235 GLY A N 1 P32322 UNP 235 G +ATOM 1720 C CA . GLY A 1 235 ? 10.899 -4.577 -37.305 1.00 95.69 ? 235 GLY A CA 1 P32322 UNP 235 G +ATOM 1721 C C . GLY A 1 235 ? 11.406 -3.489 -36.344 1.00 95.69 ? 235 GLY A C 1 P32322 UNP 235 G +ATOM 1722 O O . GLY A 1 235 ? 12.613 -3.285 -36.240 1.00 95.69 ? 235 GLY A O 1 P32322 UNP 235 G +ATOM 1723 N N . GLY A 1 236 ? 10.512 -2.791 -35.637 1.00 97.62 ? 236 GLY A N 1 P32322 UNP 236 G +ATOM 1724 C CA . GLY A 1 236 ? 10.847 -1.649 -34.792 1.00 97.62 ? 236 GLY A CA 1 P32322 UNP 236 G +ATOM 1725 C C . GLY A 1 236 ? 11.541 -1.998 -33.471 1.00 97.62 ? 236 GLY A C 1 P32322 UNP 236 G +ATOM 1726 O O . GLY A 1 236 ? 11.625 -3.152 -33.045 1.00 97.62 ? 236 GLY A O 1 P32322 UNP 236 G +ATOM 1727 N N . ALA A 1 237 ? 12.003 -0.961 -32.769 1.00 98.12 ? 237 ALA A N 1 P32322 UNP 237 A +ATOM 1728 C CA . ALA A 1 237 ? 12.649 -1.098 -31.462 1.00 98.12 ? 237 ALA A CA 1 P32322 UNP 237 A +ATOM 1729 C C . ALA A 1 237 ? 11.706 -1.683 -30.391 1.00 98.12 ? 237 ALA A C 1 P32322 UNP 237 A +ATOM 1730 C CB . ALA A 1 237 ? 13.179 0.280 -31.050 1.00 98.12 ? 237 ALA A CB 1 P32322 UNP 237 A +ATOM 1731 O O . ALA A 1 237 ? 12.121 -2.522 -29.592 1.00 98.12 ? 237 ALA A O 1 P32322 UNP 237 A +ATOM 1732 N N . THR A 1 238 ? 10.426 -1.291 -30.403 1.00 98.31 ? 238 THR A N 1 P32322 UNP 238 T +ATOM 1733 C CA . THR A 1 238 ? 9.427 -1.740 -29.419 1.00 98.31 ? 238 THR A CA 1 P32322 UNP 238 T +ATOM 1734 C C . THR A 1 238 ? 9.250 -3.254 -29.435 1.00 98.31 ? 238 THR A C 1 P32322 UNP 238 T +ATOM 1735 C CB . THR A 1 238 ? 8.062 -1.085 -29.678 1.00 98.31 ? 238 THR A CB 1 P32322 UNP 238 T +ATOM 1736 O O . THR A 1 238 ? 9.268 -3.876 -28.378 1.00 98.31 ? 238 THR A O 1 P32322 UNP 238 T +ATOM 1737 C CG2 . THR A 1 238 ? 7.042 -1.386 -28.581 1.00 98.31 ? 238 THR A CG2 1 P32322 UNP 238 T +ATOM 1738 O OG1 . THR A 1 238 ? 8.209 0.313 -29.754 1.00 98.31 ? 238 THR A OG1 1 P32322 UNP 238 T +ATOM 1739 N N . ILE A 1 239 ? 9.122 -3.873 -30.614 1.00 98.19 ? 239 ILE A N 1 P32322 UNP 239 I +ATOM 1740 C CA . ILE A 1 239 ? 8.875 -5.318 -30.694 1.00 98.19 ? 239 ILE A CA 1 P32322 UNP 239 I +ATOM 1741 C C . ILE A 1 239 ? 10.093 -6.137 -30.234 1.00 98.19 ? 239 ILE A C 1 P32322 UNP 239 I +ATOM 1742 C CB . ILE A 1 239 ? 8.336 -5.714 -32.088 1.00 98.19 ? 239 ILE A CB 1 P32322 UNP 239 I +ATOM 1743 O O . ILE A 1 239 ? 9.925 -7.175 -29.597 1.00 98.19 ? 239 ILE A O 1 P32322 UNP 239 I +ATOM 1744 C CG1 . ILE A 1 239 ? 7.793 -7.156 -32.136 1.00 98.19 ? 239 ILE A CG1 1 P32322 UNP 239 I +ATOM 1745 C CG2 . ILE A 1 239 ? 9.369 -5.524 -33.209 1.00 98.19 ? 239 ILE A CG2 1 P32322 UNP 239 I +ATOM 1746 C CD1 . ILE A 1 239 ? 6.610 -7.398 -31.188 1.00 98.19 ? 239 ILE A CD1 1 P32322 UNP 239 I +ATOM 1747 N N . HIS A 1 240 ? 11.314 -5.632 -30.444 1.00 98.38 ? 240 HIS A N 1 P32322 UNP 240 H +ATOM 1748 C CA . HIS A 1 240 ? 12.534 -6.236 -29.895 1.00 98.38 ? 240 HIS A CA 1 P32322 UNP 240 H +ATOM 1749 C C . HIS A 1 240 ? 12.588 -6.131 -28.363 1.00 98.38 ? 240 HIS A C 1 P32322 UNP 240 H +ATOM 1750 C CB . HIS A 1 240 ? 13.770 -5.577 -30.520 1.00 98.38 ? 240 HIS A CB 1 P32322 UNP 240 H +ATOM 1751 O O . HIS A 1 240 ? 12.957 -7.094 -27.692 1.00 98.38 ? 240 HIS A O 1 P32322 UNP 240 H +ATOM 1752 C CG . HIS A 1 240 ? 13.995 -5.962 -31.958 1.00 98.38 ? 240 HIS A CG 1 P32322 UNP 240 H +ATOM 1753 C CD2 . HIS A 1 240 ? 14.875 -6.908 -32.412 1.00 98.38 ? 240 HIS A CD2 1 P32322 UNP 240 H +ATOM 1754 N ND1 . HIS A 1 240 ? 13.380 -5.417 -33.064 1.00 98.38 ? 240 HIS A ND1 1 P32322 UNP 240 H +ATOM 1755 C CE1 . HIS A 1 240 ? 13.880 -6.018 -34.155 1.00 98.38 ? 240 HIS A CE1 1 P32322 UNP 240 H +ATOM 1756 N NE2 . HIS A 1 240 ? 14.791 -6.940 -33.806 1.00 98.38 ? 240 HIS A NE2 1 P32322 UNP 240 H +ATOM 1757 N N . ALA A 1 241 ? 12.181 -4.989 -27.799 1.00 98.69 ? 241 ALA A N 1 P32322 UNP 241 A +ATOM 1758 C CA . ALA A 1 241 ? 12.083 -4.815 -26.351 1.00 98.69 ? 241 ALA A CA 1 P32322 UNP 241 A +ATOM 1759 C C . ALA A 1 241 ? 10.993 -5.712 -25.733 1.00 98.69 ? 241 ALA A C 1 P32322 UNP 241 A +ATOM 1760 C CB . ALA A 1 241 ? 11.842 -3.332 -26.046 1.00 98.69 ? 241 ALA A CB 1 P32322 UNP 241 A +ATOM 1761 O O . ALA A 1 241 ? 11.202 -6.304 -24.678 1.00 98.69 ? 241 ALA A O 1 P32322 UNP 241 A +ATOM 1762 N N . LEU A 1 242 ? 9.847 -5.866 -26.401 1.00 98.62 ? 242 LEU A N 1 P32322 UNP 242 L +ATOM 1763 C CA . LEU A 1 242 ? 8.795 -6.784 -25.960 1.00 98.62 ? 242 LEU A CA 1 P32322 UNP 242 L +ATOM 1764 C C . LEU A 1 242 ? 9.278 -8.237 -25.972 1.00 98.62 ? 242 LEU A C 1 P32322 UNP 242 L +ATOM 1765 C CB . LEU A 1 242 ? 7.543 -6.614 -26.834 1.00 98.62 ? 242 LEU A CB 1 P32322 UNP 242 L +ATOM 1766 O O . LEU A 1 242 ? 9.043 -8.943 -24.999 1.00 98.62 ? 242 LEU A O 1 P32322 UNP 242 L +ATOM 1767 C CG . LEU A 1 242 ? 6.775 -5.299 -26.611 1.00 98.62 ? 242 LEU A CG 1 P32322 UNP 242 L +ATOM 1768 C CD1 . LEU A 1 242 ? 5.649 -5.209 -27.641 1.00 98.62 ? 242 LEU A CD1 1 P32322 UNP 242 L +ATOM 1769 C CD2 . LEU A 1 242 ? 6.158 -5.211 -25.213 1.00 98.62 ? 242 LEU A CD2 1 P32322 UNP 242 L +ATOM 1770 N N . HIS A 1 243 ? 10.005 -8.668 -27.008 1.00 98.56 ? 243 HIS A N 1 P32322 UNP 243 H +ATOM 1771 C CA . HIS A 1 243 ? 10.552 -10.026 -27.074 1.00 98.56 ? 243 HIS A CA 1 P32322 UNP 243 H +ATOM 1772 C C . HIS A 1 243 ? 11.396 -10.360 -25.833 1.00 98.56 ? 243 HIS A C 1 P32322 UNP 243 H +ATOM 1773 C CB . HIS A 1 243 ? 11.343 -10.188 -28.381 1.00 98.56 ? 243 HIS A CB 1 P32322 UNP 243 H +ATOM 1774 O O . HIS A 1 243 ? 11.165 -11.392 -25.211 1.00 98.56 ? 243 HIS A O 1 P32322 UNP 243 H +ATOM 1775 C CG . HIS A 1 243 ? 12.016 -11.526 -28.600 1.00 98.56 ? 243 HIS A CG 1 P32322 UNP 243 H +ATOM 1776 C CD2 . HIS A 1 243 ? 11.843 -12.703 -27.912 1.00 98.56 ? 243 HIS A CD2 1 P32322 UNP 243 H +ATOM 1777 N ND1 . HIS A 1 243 ? 12.940 -11.782 -29.589 1.00 98.56 ? 243 HIS A ND1 1 P32322 UNP 243 H +ATOM 1778 C CE1 . HIS A 1 243 ? 13.325 -13.064 -29.488 1.00 98.56 ? 243 HIS A CE1 1 P32322 UNP 243 H +ATOM 1779 N NE2 . HIS A 1 243 ? 12.696 -13.660 -28.469 1.00 98.56 ? 243 HIS A NE2 1 P32322 UNP 243 H +ATOM 1780 N N . VAL A 1 244 ? 12.309 -9.482 -25.398 1.00 98.62 ? 244 VAL A N 1 P32322 UNP 244 V +ATOM 1781 C CA . VAL A 1 244 ? 13.121 -9.769 -24.198 1.00 98.62 ? 244 VAL A CA 1 P32322 UNP 244 V +ATOM 1782 C C . VAL A 1 244 ? 12.298 -9.807 -22.904 1.00 98.62 ? 244 VAL A C 1 P32322 UNP 244 V +ATOM 1783 C CB . VAL A 1 244 ? 14.334 -8.833 -24.049 1.00 98.62 ? 244 VAL A CB 1 P32322 UNP 244 V +ATOM 1784 O O . VAL A 1 244 ? 12.634 -10.577 -22.005 1.00 98.62 ? 244 VAL A O 1 P32322 UNP 244 V +ATOM 1785 C CG1 . VAL A 1 244 ? 15.283 -8.972 -25.246 1.00 98.62 ? 244 VAL A CG1 1 P32322 UNP 244 V +ATOM 1786 C CG2 . VAL A 1 244 ? 13.980 -7.352 -23.905 1.00 98.62 ? 244 VAL A CG2 1 P32322 UNP 244 V +ATOM 1787 N N . LEU A 1 245 ? 11.207 -9.035 -22.807 1.00 98.62 ? 245 LEU A N 1 P32322 UNP 245 L +ATOM 1788 C CA . LEU A 1 245 ? 10.284 -9.104 -21.667 1.00 98.62 ? 245 LEU A CA 1 P32322 UNP 245 L +ATOM 1789 C C . LEU A 1 245 ? 9.521 -10.434 -21.637 1.00 98.62 ? 245 LEU A C 1 P32322 UNP 245 L +ATOM 1790 C CB . LEU A 1 245 ? 9.291 -7.925 -21.703 1.00 98.62 ? 245 LEU A CB 1 P32322 UNP 245 L +ATOM 1791 O O . LEU A 1 245 ? 9.408 -11.053 -20.578 1.00 98.62 ? 245 LEU A O 1 P32322 UNP 245 L +ATOM 1792 C CG . LEU A 1 245 ? 9.905 -6.538 -21.457 1.00 98.62 ? 245 LEU A CG 1 P32322 UNP 245 L +ATOM 1793 C CD1 . LEU A 1 245 ? 8.824 -5.469 -21.633 1.00 98.62 ? 245 LEU A CD1 1 P32322 UNP 245 L +ATOM 1794 C CD2 . LEU A 1 245 ? 10.483 -6.400 -20.048 1.00 98.62 ? 245 LEU A CD2 1 P32322 UNP 245 L +ATOM 1795 N N . GLU A 1 246 ? 9.025 -10.893 -22.788 1.00 98.69 ? 246 GLU A N 1 P32322 UNP 246 E +ATOM 1796 C CA . GLU A 1 246 ? 8.323 -12.178 -22.885 1.00 98.69 ? 246 GLU A CA 1 P32322 UNP 246 E +ATOM 1797 C C . GLU A 1 246 ? 9.270 -13.354 -22.599 1.00 98.69 ? 246 GLU A C 1 P32322 UNP 246 E +ATOM 1798 C CB . GLU A 1 246 ? 7.650 -12.343 -24.259 1.00 98.69 ? 246 GLU A CB 1 P32322 UNP 246 E +ATOM 1799 O O . GLU A 1 246 ? 8.908 -14.257 -21.846 1.00 98.69 ? 246 GLU A O 1 P32322 UNP 246 E +ATOM 1800 C CG . GLU A 1 246 ? 6.606 -11.275 -24.640 1.00 98.69 ? 246 GLU A CG 1 P32322 UNP 246 E +ATOM 1801 C CD . GLU A 1 246 ? 5.373 -11.148 -23.731 1.00 98.69 ? 246 GLU A CD 1 P32322 UNP 246 E +ATOM 1802 O OE1 . GLU A 1 246 ? 4.554 -10.226 -23.986 1.00 98.69 ? 246 GLU A OE1 1 P32322 UNP 246 E +ATOM 1803 O OE2 . GLU A 1 246 ? 5.179 -11.932 -22.779 1.00 98.69 ? 246 GLU A OE2 1 P32322 UNP 246 E +ATOM 1804 N N . SER A 1 247 ? 10.514 -13.308 -23.093 1.00 98.44 ? 247 SER A N 1 P32322 UNP 247 S +ATOM 1805 C CA . SER A 1 247 ? 11.541 -14.328 -22.816 1.00 98.44 ? 247 SER A CA 1 P32322 UNP 247 S +ATOM 1806 C C . SER A 1 247 ? 11.890 -14.454 -21.329 1.00 98.44 ? 247 SER A C 1 P32322 UNP 247 S +ATOM 1807 C CB . SER A 1 247 ? 12.819 -14.015 -23.598 1.00 98.44 ? 247 SER A CB 1 P32322 UNP 247 S +ATOM 1808 O O . SER A 1 247 ? 12.339 -15.509 -20.891 1.00 98.44 ? 247 SER A O 1 P32322 UNP 247 S +ATOM 1809 O OG . SER A 1 247 ? 12.554 -14.116 -24.983 1.00 98.44 ? 247 SER A OG 1 P32322 UNP 247 S +ATOM 1810 N N . GLY A 1 248 ? 11.683 -13.391 -20.544 1.00 98.00 ? 248 GLY A N 1 P32322 UNP 248 G +ATOM 1811 C CA . GLY A 1 248 ? 11.870 -13.392 -19.091 1.00 98.00 ? 248 GLY A CA 1 P32322 UNP 248 G +ATOM 1812 C C . GLY A 1 248 ? 10.624 -13.773 -18.285 1.00 98.00 ? 248 GLY A C 1 P32322 UNP 248 G +ATOM 1813 O O . GLY A 1 248 ? 10.674 -13.725 -17.058 1.00 98.00 ? 248 GLY A O 1 P32322 UNP 248 G +ATOM 1814 N N . GLY A 1 249 ? 9.497 -14.100 -18.928 1.00 98.38 ? 249 GLY A N 1 P32322 UNP 249 G +ATOM 1815 C CA . GLY A 1 249 ? 8.249 -14.406 -18.225 1.00 98.38 ? 249 GLY A CA 1 P32322 UNP 249 G +ATOM 1816 C C . GLY A 1 249 ? 7.639 -13.195 -17.509 1.00 98.38 ? 249 GLY A C 1 P32322 UNP 249 G +ATOM 1817 O O . GLY A 1 249 ? 7.020 -13.342 -16.453 1.00 98.38 ? 249 GLY A O 1 P32322 UNP 249 G +ATOM 1818 N N . PHE A 1 250 ? 7.795 -11.985 -18.060 1.00 98.69 ? 250 PHE A N 1 P32322 UNP 250 F +ATOM 1819 C CA . PHE A 1 250 ? 7.320 -10.746 -17.429 1.00 98.69 ? 250 PHE A CA 1 P32322 UNP 250 F +ATOM 1820 C C . PHE A 1 250 ? 5.841 -10.814 -17.005 1.00 98.69 ? 250 PHE A C 1 P32322 UNP 250 F +ATOM 1821 C CB . PHE A 1 250 ? 7.553 -9.581 -18.401 1.00 98.69 ? 250 PHE A CB 1 P32322 UNP 250 F +ATOM 1822 O O . PHE A 1 250 ? 5.489 -10.432 -15.890 1.00 98.69 ? 250 PHE A O 1 P32322 UNP 250 F +ATOM 1823 C CG . PHE A 1 250 ? 7.050 -8.246 -17.891 1.00 98.69 ? 250 PHE A CG 1 P32322 UNP 250 F +ATOM 1824 C CD1 . PHE A 1 250 ? 5.840 -7.709 -18.371 1.00 98.69 ? 250 PHE A CD1 1 P32322 UNP 250 F +ATOM 1825 C CD2 . PHE A 1 250 ? 7.783 -7.552 -16.912 1.00 98.69 ? 250 PHE A CD2 1 P32322 UNP 250 F +ATOM 1826 C CE1 . PHE A 1 250 ? 5.369 -6.480 -17.873 1.00 98.69 ? 250 PHE A CE1 1 P32322 UNP 250 F +ATOM 1827 C CE2 . PHE A 1 250 ? 7.312 -6.326 -16.414 1.00 98.69 ? 250 PHE A CE2 1 P32322 UNP 250 F +ATOM 1828 C CZ . PHE A 1 250 ? 6.104 -5.790 -16.894 1.00 98.69 ? 250 PHE A CZ 1 P32322 UNP 250 F +ATOM 1829 N N . ARG A 1 251 ? 4.973 -11.364 -17.866 1.00 98.62 ? 251 ARG A N 1 P32322 UNP 251 R +ATOM 1830 C CA . ARG A 1 251 ? 3.533 -11.504 -17.587 1.00 98.62 ? 251 ARG A CA 1 P32322 UNP 251 R +ATOM 1831 C C . ARG A 1 251 ? 3.250 -12.449 -16.425 1.00 98.62 ? 251 ARG A C 1 P32322 UNP 251 R +ATOM 1832 C CB . ARG A 1 251 ? 2.792 -12.001 -18.833 1.00 98.62 ? 251 ARG A CB 1 P32322 UNP 251 R +ATOM 1833 O O . ARG A 1 251 ? 2.434 -12.120 -15.570 1.00 98.62 ? 251 ARG A O 1 P32322 UNP 251 R +ATOM 1834 C CG . ARG A 1 251 ? 2.899 -11.014 -19.994 1.00 98.62 ? 251 ARG A CG 1 P32322 UNP 251 R +ATOM 1835 C CD . ARG A 1 251 ? 2.161 -11.570 -21.210 1.00 98.62 ? 251 ARG A CD 1 P32322 UNP 251 R +ATOM 1836 N NE . ARG A 1 251 ? 2.375 -10.690 -22.356 1.00 98.62 ? 251 ARG A NE 1 P32322 UNP 251 R +ATOM 1837 N NH1 . ARG A 1 251 ? 0.660 -9.197 -22.035 1.00 98.62 ? 251 ARG A NH1 1 P32322 UNP 251 R +ATOM 1838 N NH2 . ARG A 1 251 ? 2.223 -8.842 -23.609 1.00 98.62 ? 251 ARG A NH2 1 P32322 UNP 251 R +ATOM 1839 C CZ . ARG A 1 251 ? 1.738 -9.585 -22.663 1.00 98.62 ? 251 ARG A CZ 1 P32322 UNP 251 R +ATOM 1840 N N . SER A 1 252 ? 3.936 -13.592 -16.372 1.00 98.69 ? 252 SER A N 1 P32322 UNP 252 S +ATOM 1841 C CA . SER A 1 252 ? 3.764 -14.549 -15.277 1.00 98.69 ? 252 SER A CA 1 P32322 UNP 252 S +ATOM 1842 C C . SER A 1 252 ? 4.188 -13.963 -13.934 1.00 98.69 ? 252 SER A C 1 P32322 UNP 252 S +ATOM 1843 C CB . SER A 1 252 ? 4.493 -15.871 -15.543 1.00 98.69 ? 252 SER A CB 1 P32322 UNP 252 S +ATOM 1844 O O . SER A 1 252 ? 3.522 -14.216 -12.940 1.00 98.69 ? 252 SER A O 1 P32322 UNP 252 S +ATOM 1845 O OG . SER A 1 252 ? 5.793 -15.705 -16.074 1.00 98.69 ? 252 SER A OG 1 P32322 UNP 252 S +ATOM 1846 N N . LEU A 1 253 ? 5.220 -13.111 -13.888 1.00 98.75 ? 253 LEU A N 1 P32322 UNP 253 L +ATOM 1847 C CA . LEU A 1 253 ? 5.625 -12.458 -12.637 1.00 98.75 ? 253 LEU A CA 1 P32322 UNP 253 L +ATOM 1848 C C . LEU A 1 253 ? 4.532 -11.534 -12.082 1.00 98.75 ? 253 LEU A C 1 P32322 UNP 253 L +ATOM 1849 C CB . LEU A 1 253 ? 6.933 -11.677 -12.844 1.00 98.75 ? 253 LEU A CB 1 P32322 UNP 253 L +ATOM 1850 O O . LEU A 1 253 ? 4.315 -11.504 -10.874 1.00 98.75 ? 253 LEU A O 1 P32322 UNP 253 L +ATOM 1851 C CG . LEU A 1 253 ? 8.155 -12.534 -13.220 1.00 98.75 ? 253 LEU A CG 1 P32322 UNP 253 L +ATOM 1852 C CD1 . LEU A 1 253 ? 9.373 -11.625 -13.389 1.00 98.75 ? 253 LEU A CD1 1 P32322 UNP 253 L +ATOM 1853 C CD2 . LEU A 1 253 ? 8.477 -13.596 -12.168 1.00 98.75 ? 253 LEU A CD2 1 P32322 UNP 253 L +ATOM 1854 N N . LEU A 1 254 ? 3.817 -10.815 -12.953 1.00 98.75 ? 254 LEU A N 1 P32322 UNP 254 L +ATOM 1855 C CA . LEU A 1 254 ? 2.689 -9.973 -12.543 1.00 98.75 ? 254 LEU A CA 1 P32322 UNP 254 L +ATOM 1856 C C . LEU A 1 254 ? 1.500 -10.809 -12.053 1.00 98.75 ? 254 LEU A C 1 P32322 UNP 254 L +ATOM 1857 C CB . LEU A 1 254 ? 2.271 -9.059 -13.706 1.00 98.75 ? 254 LEU A CB 1 P32322 UNP 254 L +ATOM 1858 O O . LEU A 1 254 ? 0.907 -10.468 -11.033 1.00 98.75 ? 254 LEU A O 1 P32322 UNP 254 L +ATOM 1859 C CG . LEU A 1 254 ? 3.313 -7.994 -14.091 1.00 98.75 ? 254 LEU A CG 1 P32322 UNP 254 L +ATOM 1860 C CD1 . LEU A 1 254 ? 2.858 -7.292 -15.371 1.00 98.75 ? 254 LEU A CD1 1 P32322 UNP 254 L +ATOM 1861 C CD2 . LEU A 1 254 ? 3.486 -6.931 -13.001 1.00 98.75 ? 254 LEU A CD2 1 P32322 UNP 254 L +ATOM 1862 N N . ILE A 1 255 ? 1.181 -11.915 -12.736 1.00 98.81 ? 255 ILE A N 1 P32322 UNP 255 I +ATOM 1863 C CA . ILE A 1 255 ? 0.127 -12.850 -12.306 1.00 98.81 ? 255 ILE A CA 1 P32322 UNP 255 I +ATOM 1864 C C . ILE A 1 255 ? 0.462 -13.413 -10.919 1.00 98.81 ? 255 ILE A C 1 P32322 UNP 255 I +ATOM 1865 C CB . ILE A 1 255 ? -0.077 -13.966 -13.357 1.00 98.81 ? 255 ILE A CB 1 P32322 UNP 255 I +ATOM 1866 O O . ILE A 1 255 ? -0.358 -13.314 -10.007 1.00 98.81 ? 255 ILE A O 1 P32322 UNP 255 I +ATOM 1867 C CG1 . ILE A 1 255 ? -0.637 -13.366 -14.669 1.00 98.81 ? 255 ILE A CG1 1 P32322 UNP 255 I +ATOM 1868 C CG2 . ILE A 1 255 ? -1.026 -15.060 -12.830 1.00 98.81 ? 255 ILE A CG2 1 P32322 UNP 255 I +ATOM 1869 C CD1 . ILE A 1 255 ? -0.568 -14.318 -15.871 1.00 98.81 ? 255 ILE A CD1 1 P32322 UNP 255 I +ATOM 1870 N N . ASN A 1 256 ? 1.692 -13.898 -10.732 1.00 98.75 ? 256 ASN A N 1 P32322 UNP 256 N +ATOM 1871 C CA . ASN A 1 256 ? 2.163 -14.439 -9.458 1.00 98.75 ? 256 ASN A CA 1 P32322 UNP 256 N +ATOM 1872 C C . ASN A 1 256 ? 2.131 -13.385 -8.339 1.00 98.75 ? 256 ASN A C 1 P32322 UNP 256 N +ATOM 1873 C CB . ASN A 1 256 ? 3.594 -14.976 -9.635 1.00 98.75 ? 256 ASN A CB 1 P32322 UNP 256 N +ATOM 1874 O O . ASN A 1 256 ? 1.832 -13.708 -7.194 1.00 98.75 ? 256 ASN A O 1 P32322 UNP 256 N +ATOM 1875 C CG . ASN A 1 256 ? 3.713 -16.174 -10.563 1.00 98.75 ? 256 ASN A CG 1 P32322 UNP 256 N +ATOM 1876 N ND2 . ASN A 1 256 ? 4.916 -16.652 -10.783 1.00 98.75 ? 256 ASN A ND2 1 P32322 UNP 256 N +ATOM 1877 O OD1 . ASN A 1 256 ? 2.766 -16.698 -11.118 1.00 98.75 ? 256 ASN A OD1 1 P32322 UNP 256 N +ATOM 1878 N N . ALA A 1 257 ? 2.424 -12.115 -8.644 1.00 98.75 ? 257 ALA A N 1 P32322 UNP 257 A +ATOM 1879 C CA . ALA A 1 257 ? 2.368 -11.035 -7.659 1.00 98.75 ? 257 ALA A CA 1 P32322 UNP 257 A +ATOM 1880 C C . ALA A 1 257 ? 0.933 -10.756 -7.177 1.00 98.75 ? 257 ALA A C 1 P32322 UNP 257 A +ATOM 1881 C CB . ALA A 1 257 ? 3.017 -9.781 -8.257 1.00 98.75 ? 257 ALA A CB 1 P32322 UNP 257 A +ATOM 1882 O O . ALA A 1 257 ? 0.715 -10.603 -5.970 1.00 98.75 ? 257 ALA A O 1 P32322 UNP 257 A +ATOM 1883 N N . VAL A 1 258 ? -0.035 -10.718 -8.103 1.00 98.75 ? 258 VAL A N 1 P32322 UNP 258 V +ATOM 1884 C CA . VAL A 1 258 ? -1.463 -10.550 -7.782 1.00 98.75 ? 258 VAL A CA 1 P32322 UNP 258 V +ATOM 1885 C C . VAL A 1 258 ? -1.969 -11.749 -6.978 1.00 98.75 ? 258 VAL A C 1 P32322 UNP 258 V +ATOM 1886 C CB . VAL A 1 258 ? -2.301 -10.349 -9.063 1.00 98.75 ? 258 VAL A CB 1 P32322 UNP 258 V +ATOM 1887 O O . VAL A 1 258 ? -2.612 -11.565 -5.943 1.00 98.75 ? 258 VAL A O 1 P32322 UNP 258 V +ATOM 1888 C CG1 . VAL A 1 258 ? -3.811 -10.314 -8.781 1.00 98.75 ? 258 VAL A CG1 1 P32322 UNP 258 V +ATOM 1889 C CG2 . VAL A 1 258 ? -1.943 -9.028 -9.760 1.00 98.75 ? 258 VAL A CG2 1 P32322 UNP 258 V +ATOM 1890 N N . GLU A 1 259 ? -1.628 -12.967 -7.406 1.00 98.75 ? 259 GLU A N 1 P32322 UNP 259 E +ATOM 1891 C CA . GLU A 1 259 ? -1.973 -14.210 -6.711 1.00 98.75 ? 259 GLU A CA 1 P32322 UNP 259 E +ATOM 1892 C C . GLU A 1 259 ? -1.417 -14.229 -5.282 1.00 98.75 ? 259 GLU A C 1 P32322 UNP 259 E +ATOM 1893 C CB . GLU A 1 259 ? -1.466 -15.407 -7.531 1.00 98.75 ? 259 GLU A CB 1 P32322 UNP 259 E +ATOM 1894 O O . GLU A 1 259 ? -2.180 -14.381 -4.328 1.00 98.75 ? 259 GLU A O 1 P32322 UNP 259 E +ATOM 1895 C CG . GLU A 1 259 ? -1.748 -16.739 -6.823 1.00 98.75 ? 259 GLU A CG 1 P32322 UNP 259 E +ATOM 1896 C CD . GLU A 1 259 ? -1.320 -17.942 -7.667 1.00 98.75 ? 259 GLU A CD 1 P32322 UNP 259 E +ATOM 1897 O OE1 . GLU A 1 259 ? -2.182 -18.821 -7.888 1.00 98.75 ? 259 GLU A OE1 1 P32322 UNP 259 E +ATOM 1898 O OE2 . GLU A 1 259 ? -0.133 -17.974 -8.060 1.00 98.75 ? 259 GLU A OE2 1 P32322 UNP 259 E +ATOM 1899 N N . ALA A 1 260 ? -0.112 -14.002 -5.109 1.00 98.69 ? 260 ALA A N 1 P32322 UNP 260 A +ATOM 1900 C CA . ALA A 1 260 ? 0.536 -14.031 -3.800 1.00 98.69 ? 260 ALA A CA 1 P32322 UNP 260 A +ATOM 1901 C C . ALA A 1 260 ? -0.063 -13.000 -2.831 1.00 98.69 ? 260 ALA A C 1 P32322 UNP 260 A +ATOM 1902 C CB . ALA A 1 260 ? 2.039 -13.802 -3.996 1.00 98.69 ? 260 ALA A CB 1 P32322 UNP 260 A +ATOM 1903 O O . ALA A 1 260 ? -0.262 -13.296 -1.651 1.00 98.69 ? 260 ALA A O 1 P32322 UNP 260 A +ATOM 1904 N N . SER A 1 261 ? -0.391 -11.798 -3.317 1.00 98.25 ? 261 SER A N 1 P32322 UNP 261 S +ATOM 1905 C CA . SER A 1 261 ? -1.021 -10.760 -2.495 1.00 98.25 ? 261 SER A CA 1 P32322 UNP 261 S +ATOM 1906 C C . SER A 1 261 ? -2.465 -11.116 -2.105 1.00 98.25 ? 261 SER A C 1 P32322 UNP 261 S +ATOM 1907 C CB . SER A 1 261 ? -0.939 -9.423 -3.227 1.00 98.25 ? 261 SER A CB 1 P32322 UNP 261 S +ATOM 1908 O O . SER A 1 261 ? -2.848 -10.972 -0.938 1.00 98.25 ? 261 SER A O 1 P32322 UNP 261 S +ATOM 1909 O OG . SER A 1 261 ? -1.478 -8.415 -2.397 1.00 98.25 ? 261 SER A OG 1 P32322 UNP 261 S +ATOM 1910 N N . CYS A 1 262 ? -3.251 -11.671 -3.035 1.00 98.12 ? 262 CYS A N 1 P32322 UNP 262 C +ATOM 1911 C CA . CYS A 1 262 ? -4.602 -12.165 -2.754 1.00 98.12 ? 262 CYS A CA 1 P32322 UNP 262 C +ATOM 1912 C C . CYS A 1 262 ? -4.586 -13.319 -1.737 1.00 98.12 ? 262 CYS A C 1 P32322 UNP 262 C +ATOM 1913 C CB . CYS A 1 262 ? -5.258 -12.588 -4.073 1.00 98.12 ? 262 CYS A CB 1 P32322 UNP 262 C +ATOM 1914 O O . CYS A 1 262 ? -5.308 -13.269 -0.739 1.00 98.12 ? 262 CYS A O 1 P32322 UNP 262 C +ATOM 1915 S SG . CYS A 1 262 ? -6.903 -13.293 -3.749 1.00 98.12 ? 262 CYS A SG 1 P32322 UNP 262 C +ATOM 1916 N N . ILE A 1 263 ? -3.732 -14.329 -1.943 1.00 97.88 ? 263 ILE A N 1 P32322 UNP 263 I +ATOM 1917 C CA . ILE A 1 263 ? -3.572 -15.464 -1.021 1.00 97.88 ? 263 ILE A CA 1 P32322 UNP 263 I +ATOM 1918 C C . ILE A 1 263 ? -3.168 -14.959 0.361 1.00 97.88 ? 263 ILE A C 1 P32322 UNP 263 I +ATOM 1919 C CB . ILE A 1 263 ? -2.549 -16.488 -1.570 1.00 97.88 ? 263 ILE A CB 1 P32322 UNP 263 I +ATOM 1920 O O . ILE A 1 263 ? -3.773 -15.345 1.360 1.00 97.88 ? 263 ILE A O 1 P32322 UNP 263 I +ATOM 1921 C CG1 . ILE A 1 263 ? -3.139 -17.202 -2.807 1.00 97.88 ? 263 ILE A CG1 1 P32322 UNP 263 I +ATOM 1922 C CG2 . ILE A 1 263 ? -2.159 -17.525 -0.494 1.00 97.88 ? 263 ILE A CG2 1 P32322 UNP 263 I +ATOM 1923 C CD1 . ILE A 1 263 ? -2.148 -18.132 -3.518 1.00 97.88 ? 263 ILE A CD1 1 P32322 UNP 263 I +ATOM 1924 N N . ARG A 1 264 ? -2.200 -14.038 0.438 1.00 95.88 ? 264 ARG A N 1 P32322 UNP 264 R +ATOM 1925 C CA . ARG A 1 264 ? -1.770 -13.479 1.721 1.00 95.88 ? 264 ARG A CA 1 P32322 UNP 264 R +ATOM 1926 C C . ARG A 1 264 ? -2.891 -12.722 2.430 1.00 95.88 ? 264 ARG A C 1 P32322 UNP 264 R +ATOM 1927 C CB . ARG A 1 264 ? -0.531 -12.596 1.510 1.00 95.88 ? 264 ARG A CB 1 P32322 UNP 264 R +ATOM 1928 O O . ARG A 1 264 ? -2.975 -12.784 3.653 1.00 95.88 ? 264 ARG A O 1 P32322 UNP 264 R +ATOM 1929 C CG . ARG A 1 264 ? 0.041 -12.029 2.818 1.00 95.88 ? 264 ARG A CG 1 P32322 UNP 264 R +ATOM 1930 C CD . ARG A 1 264 ? 0.368 -13.151 3.811 1.00 95.88 ? 264 ARG A CD 1 P32322 UNP 264 R +ATOM 1931 N NE . ARG A 1 264 ? 0.929 -12.633 5.066 1.00 95.88 ? 264 ARG A NE 1 P32322 UNP 264 R +ATOM 1932 N NH1 . ARG A 1 264 ? 0.773 -14.629 6.200 1.00 95.88 ? 264 ARG A NH1 1 P32322 UNP 264 R +ATOM 1933 N NH2 . ARG A 1 264 ? 1.472 -12.800 7.267 1.00 95.88 ? 264 ARG A NH2 1 P32322 UNP 264 R +ATOM 1934 C CZ . ARG A 1 264 ? 1.054 -13.356 6.163 1.00 95.88 ? 264 ARG A CZ 1 P32322 UNP 264 R +ATOM 1935 N N . THR A 1 265 ? -3.753 -12.030 1.692 1.00 94.88 ? 265 THR A N 1 P32322 UNP 265 T +ATOM 1936 C CA . THR A 1 265 ? -4.914 -11.327 2.260 1.00 94.88 ? 265 THR A CA 1 P32322 UNP 265 T +ATOM 1937 C C . THR A 1 265 ? -5.899 -12.313 2.897 1.00 94.88 ? 265 THR A C 1 P32322 UNP 265 T +ATOM 1938 C CB . THR A 1 265 ? -5.581 -10.444 1.195 1.00 94.88 ? 265 THR A CB 1 P32322 UNP 265 T +ATOM 1939 O O . THR A 1 265 ? -6.301 -12.110 4.042 1.00 94.88 ? 265 THR A O 1 P32322 UNP 265 T +ATOM 1940 C CG2 . THR A 1 265 ? -6.735 -9.622 1.763 1.00 94.88 ? 265 THR A CG2 1 P32322 UNP 265 T +ATOM 1941 O OG1 . THR A 1 265 ? -4.622 -9.519 0.719 1.00 94.88 ? 265 THR A OG1 1 P32322 UNP 265 T +ATOM 1942 N N . ARG A 1 266 ? -6.173 -13.443 2.233 1.00 94.81 ? 266 ARG A N 1 P32322 UNP 266 R +ATOM 1943 C CA . ARG A 1 266 ? -6.996 -14.544 2.773 1.00 94.81 ? 266 ARG A CA 1 P32322 UNP 266 R +ATOM 1944 C C . ARG A 1 266 ? -6.356 -15.239 3.980 1.00 94.81 ? 266 ARG A C 1 P32322 UNP 266 R +ATOM 1945 C CB . ARG A 1 266 ? -7.253 -15.570 1.663 1.00 94.81 ? 266 ARG A CB 1 P32322 UNP 266 R +ATOM 1946 O O . ARG A 1 266 ? -7.042 -15.605 4.935 1.00 94.81 ? 266 ARG A O 1 P32322 UNP 266 R +ATOM 1947 C CG . ARG A 1 266 ? -8.169 -15.024 0.562 1.00 94.81 ? 266 ARG A CG 1 P32322 UNP 266 R +ATOM 1948 C CD . ARG A 1 266 ? -8.212 -16.001 -0.612 1.00 94.81 ? 266 ARG A CD 1 P32322 UNP 266 R +ATOM 1949 N NE . ARG A 1 266 ? -9.120 -15.515 -1.662 1.00 94.81 ? 266 ARG A NE 1 P32322 UNP 266 R +ATOM 1950 N NH1 . ARG A 1 266 ? -8.413 -16.909 -3.345 1.00 94.81 ? 266 ARG A NH1 1 P32322 UNP 266 R +ATOM 1951 N NH2 . ARG A 1 266 ? -10.057 -15.444 -3.733 1.00 94.81 ? 266 ARG A NH2 1 P32322 UNP 266 R +ATOM 1952 C CZ . ARG A 1 266 ? -9.190 -15.955 -2.906 1.00 94.81 ? 266 ARG A CZ 1 P32322 UNP 266 R +ATOM 1953 N N . GLU A 1 267 ? -5.031 -15.404 3.978 1.00 93.38 ? 267 GLU A N 1 P32322 UNP 267 E +ATOM 1954 C CA . GLU A 1 267 ? -4.306 -15.905 5.153 1.00 93.38 ? 267 GLU A CA 1 P32322 UNP 267 E +ATOM 1955 C C . GLU A 1 267 ? -4.451 -14.942 6.345 1.00 93.38 ? 267 GLU A C 1 P32322 UNP 267 E +ATOM 1956 C CB . GLU A 1 267 ? -2.805 -16.083 4.870 1.00 93.38 ? 267 GLU A CB 1 P32322 UNP 267 E +ATOM 1957 O O . GLU A 1 267 ? -4.671 -15.388 7.469 1.00 93.38 ? 267 GLU A O 1 P32322 UNP 267 E +ATOM 1958 C CG . GLU A 1 267 ? -2.378 -17.237 3.943 1.00 93.38 ? 267 GLU A CG 1 P32322 UNP 267 E +ATOM 1959 C CD . GLU A 1 267 ? -0.835 -17.346 3.875 1.00 93.38 ? 267 GLU A CD 1 P32322 UNP 267 E +ATOM 1960 O OE1 . GLU A 1 267 ? -0.298 -18.436 3.565 1.00 93.38 ? 267 GLU A OE1 1 P32322 UNP 267 E +ATOM 1961 O OE2 . GLU A 1 267 ? -0.136 -16.367 4.254 1.00 93.38 ? 267 GLU A OE2 1 P32322 UNP 267 E +ATOM 1962 N N . LEU A 1 268 ? -4.338 -13.626 6.115 1.00 88.56 ? 268 LEU A N 1 P32322 UNP 268 L +ATOM 1963 C CA . LEU A 1 268 ? -4.492 -12.607 7.161 1.00 88.56 ? 268 LEU A CA 1 P32322 UNP 268 L +ATOM 1964 C C . LEU A 1 268 ? -5.910 -12.579 7.737 1.00 88.56 ? 268 LEU A C 1 P32322 UNP 268 L +ATOM 1965 C CB . LEU A 1 268 ? -4.122 -11.217 6.614 1.00 88.56 ? 268 LEU A CB 1 P32322 UNP 268 L +ATOM 1966 O O . LEU A 1 268 ? -6.049 -12.422 8.949 1.00 88.56 ? 268 LEU A O 1 P32322 UNP 268 L +ATOM 1967 C CG . LEU A 1 268 ? -2.621 -10.986 6.381 1.00 88.56 ? 268 LEU A CG 1 P32322 UNP 268 L +ATOM 1968 C CD1 . LEU A 1 268 ? -2.423 -9.651 5.659 1.00 88.56 ? 268 LEU A CD1 1 P32322 UNP 268 L +ATOM 1969 C CD2 . LEU A 1 268 ? -1.824 -10.940 7.690 1.00 88.56 ? 268 LEU A CD2 1 P32322 UNP 268 L +ATOM 1970 N N . GLN A 1 269 ? -6.928 -12.776 6.897 1.00 86.88 ? 269 GLN A N 1 P32322 UNP 269 Q +ATOM 1971 C CA . GLN A 1 269 ? -8.314 -12.963 7.326 1.00 86.88 ? 269 GLN A CA 1 P32322 UNP 269 Q +ATOM 1972 C C . GLN A 1 269 ? -8.440 -14.152 8.279 1.00 86.88 ? 269 GLN A C 1 P32322 UNP 269 Q +ATOM 1973 C CB . GLN A 1 269 ? -9.182 -13.175 6.080 1.00 86.88 ? 269 GLN A CB 1 P32322 UNP 269 Q +ATOM 1974 O O . GLN A 1 269 ? -8.867 -13.999 9.420 1.00 86.88 ? 269 GLN A O 1 P32322 UNP 269 Q +ATOM 1975 C CG . GLN A 1 269 ? -10.657 -13.397 6.437 1.00 86.88 ? 269 GLN A CG 1 P32322 UNP 269 Q +ATOM 1976 C CD . GLN A 1 269 ? -11.536 -13.445 5.200 1.00 86.88 ? 269 GLN A CD 1 P32322 UNP 269 Q +ATOM 1977 N NE2 . GLN A 1 269 ? -12.689 -14.057 5.297 1.00 86.88 ? 269 GLN A NE2 1 P32322 UNP 269 Q +ATOM 1978 O OE1 . GLN A 1 269 ? -11.209 -12.967 4.130 1.00 86.88 ? 269 GLN A OE1 1 P32322 UNP 269 Q +ATOM 1979 N N . SER A 1 270 ? -7.952 -15.317 7.846 1.00 81.81 ? 270 SER A N 1 P32322 UNP 270 S +ATOM 1980 C CA . SER A 1 270 ? -7.998 -16.552 8.638 1.00 81.81 ? 270 SER A CA 1 P32322 UNP 270 S +ATOM 1981 C C . SER A 1 270 ? -7.270 -16.403 9.981 1.00 81.81 ? 270 SER A C 1 P32322 UNP 270 S +ATOM 1982 C CB . SER A 1 270 ? -7.356 -17.700 7.852 1.00 81.81 ? 270 SER A CB 1 P32322 UNP 270 S +ATOM 1983 O O . SER A 1 270 ? -7.710 -16.933 10.997 1.00 81.81 ? 270 SER A O 1 P32322 UNP 270 S +ATOM 1984 O OG . SER A 1 270 ? -7.937 -17.868 6.571 1.00 81.81 ? 270 SER A OG 1 P32322 UNP 270 S +ATOM 1985 N N . MET A 1 271 ? -6.158 -15.657 10.004 1.00 76.81 ? 271 MET A N 1 P32322 UNP 271 M +ATOM 1986 C CA . MET A 1 271 ? -5.418 -15.335 11.230 1.00 76.81 ? 271 MET A CA 1 P32322 UNP 271 M +ATOM 1987 C C . MET A 1 271 ? -6.191 -14.390 12.161 1.00 76.81 ? 271 MET A C 1 P32322 UNP 271 M +ATOM 1988 C CB . MET A 1 271 ? -4.069 -14.691 10.871 1.00 76.81 ? 271 MET A CB 1 P32322 UNP 271 M +ATOM 1989 O O . MET A 1 271 ? -6.069 -14.520 13.378 1.00 76.81 ? 271 MET A O 1 P32322 UNP 271 M +ATOM 1990 C CG . MET A 1 271 ? -3.058 -15.695 10.313 1.00 76.81 ? 271 MET A CG 1 P32322 UNP 271 M +ATOM 1991 S SD . MET A 1 271 ? -1.470 -14.957 9.812 1.00 76.81 ? 271 MET A SD 1 P32322 UNP 271 M +ATOM 1992 C CE . MET A 1 271 ? -0.702 -16.452 9.143 1.00 76.81 ? 271 MET A CE 1 P32322 UNP 271 M +ATOM 1993 N N . ALA A 1 272 ? -6.947 -13.434 11.614 1.00 71.06 ? 272 ALA A N 1 P32322 UNP 272 A +ATOM 1994 C CA . ALA A 1 272 ? -7.767 -12.511 12.397 1.00 71.06 ? 272 ALA A CA 1 P32322 UNP 272 A +ATOM 1995 C C . ALA A 1 272 ? -8.982 -13.220 13.017 1.00 71.06 ? 272 ALA A C 1 P32322 UNP 272 A +ATOM 1996 C CB . ALA A 1 272 ? -8.178 -11.332 11.504 1.00 71.06 ? 272 ALA A CB 1 P32322 UNP 272 A +ATOM 1997 O O . ALA A 1 272 ? -9.290 -12.983 14.184 1.00 71.06 ? 272 ALA A O 1 P32322 UNP 272 A +ATOM 1998 N N . ASP A 1 273 ? -9.604 -14.139 12.275 1.00 71.69 ? 273 ASP A N 1 P32322 UNP 273 D +ATOM 1999 C CA . ASP A 1 273 ? -10.760 -14.917 12.734 1.00 71.69 ? 273 ASP A CA 1 P32322 UNP 273 D +ATOM 2000 C C . ASP A 1 273 ? -10.412 -15.892 13.877 1.00 71.69 ? 273 ASP A C 1 P32322 UNP 273 D +ATOM 2001 C CB . ASP A 1 273 ? -11.354 -15.690 11.542 1.00 71.69 ? 273 ASP A CB 1 P32322 UNP 273 D +ATOM 2002 O O . ASP A 1 273 ? -11.275 -16.250 14.676 1.00 71.69 ? 273 ASP A O 1 P32322 UNP 273 D +ATOM 2003 C CG . ASP A 1 273 ? -11.990 -14.801 10.461 1.00 71.69 ? 273 ASP A CG 1 P32322 UNP 273 D +ATOM 2004 O OD1 . ASP A 1 273 ? -12.435 -13.677 10.791 1.00 71.69 ? 273 ASP A OD1 1 P32322 UNP 273 D +ATOM 2005 O OD2 . ASP A 1 273 ? -12.071 -15.275 9.304 1.00 71.69 ? 273 ASP A OD2 1 P32322 UNP 273 D +ATOM 2006 N N . GLN A 1 274 ? -9.147 -16.317 13.986 1.00 65.25 ? 274 GLN A N 1 P32322 UNP 274 Q +ATOM 2007 C CA . GLN A 1 274 ? -8.700 -17.293 14.986 1.00 65.25 ? 274 GLN A CA 1 P32322 UNP 274 Q +ATOM 2008 C C . GLN A 1 274 ? -8.424 -16.713 16.389 1.00 65.25 ? 274 GLN A C 1 P32322 UNP 274 Q +ATOM 2009 C CB . GLN A 1 274 ? -7.511 -18.102 14.424 1.00 65.25 ? 274 GLN A CB 1 P32322 UNP 274 Q +ATOM 2010 O O . GLN A 1 274 ? -8.008 -17.474 17.259 1.00 65.25 ? 274 GLN A O 1 P32322 UNP 274 Q +ATOM 2011 C CG . GLN A 1 274 ? -7.998 -19.157 13.417 1.00 65.25 ? 274 GLN A CG 1 P32322 UNP 274 Q +ATOM 2012 C CD . GLN A 1 274 ? -6.881 -19.995 12.798 1.00 65.25 ? 274 GLN A CD 1 P32322 UNP 274 Q +ATOM 2013 N NE2 . GLN A 1 274 ? -7.222 -20.911 11.917 1.00 65.25 ? 274 GLN A NE2 1 P32322 UNP 274 Q +ATOM 2014 O OE1 . GLN A 1 274 ? -5.699 -19.878 13.086 1.00 65.25 ? 274 GLN A OE1 1 P32322 UNP 274 Q +ATOM 2015 N N . GLU A 1 275 ? -8.628 -15.409 16.636 1.00 56.06 ? 275 GLU A N 1 P32322 UNP 275 E +ATOM 2016 C CA . GLU A 1 275 ? -8.455 -14.692 17.930 1.00 56.06 ? 275 GLU A CA 1 P32322 UNP 275 E +ATOM 2017 C C . GLU A 1 275 ? -7.141 -14.968 18.727 1.00 56.06 ? 275 GLU A C 1 P32322 UNP 275 E +ATOM 2018 C CB . GLU A 1 275 ? -9.731 -14.779 18.814 1.00 56.06 ? 275 GLU A CB 1 P32322 UNP 275 E +ATOM 2019 O O . GLU A 1 275 ? -6.948 -14.431 19.815 1.00 56.06 ? 275 GLU A O 1 P32322 UNP 275 E +ATOM 2020 C CG . GLU A 1 275 ? -10.896 -13.898 18.305 1.00 56.06 ? 275 GLU A CG 1 P32322 UNP 275 E +ATOM 2021 C CD . GLU A 1 275 ? -12.072 -13.754 19.302 1.00 56.06 ? 275 GLU A CD 1 P32322 UNP 275 E +ATOM 2022 O OE1 . GLU A 1 275 ? -12.776 -12.709 19.243 1.00 56.06 ? 275 GLU A OE1 1 P32322 UNP 275 E +ATOM 2023 O OE2 . GLU A 1 275 ? -12.274 -14.672 20.129 1.00 56.06 ? 275 GLU A OE2 1 P32322 UNP 275 E +ATOM 2024 N N . GLN A 1 276 ? -6.174 -15.728 18.192 1.00 49.78 ? 276 GLN A N 1 P32322 UNP 276 Q +ATOM 2025 C CA . GLN A 1 276 ? -4.964 -16.188 18.895 1.00 49.78 ? 276 GLN A CA 1 P32322 UNP 276 Q +ATOM 2026 C C . GLN A 1 276 ? -3.648 -15.811 18.202 1.00 49.78 ? 276 GLN A C 1 P32322 UNP 276 Q +ATOM 2027 C CB . GLN A 1 276 ? -5.017 -17.702 19.165 1.00 49.78 ? 276 GLN A CB 1 P32322 UNP 276 Q +ATOM 2028 O O . GLN A 1 276 ? -2.682 -16.579 18.206 1.00 49.78 ? 276 GLN A O 1 P32322 UNP 276 Q +ATOM 2029 C CG . GLN A 1 276 ? -6.014 -18.100 20.256 1.00 49.78 ? 276 GLN A CG 1 P32322 UNP 276 Q +ATOM 2030 C CD . GLN A 1 276 ? -5.624 -19.403 20.958 1.00 49.78 ? 276 GLN A CD 1 P32322 UNP 276 Q +ATOM 2031 N NE2 . GLN A 1 276 ? -6.398 -19.829 21.929 1.00 49.78 ? 276 GLN A NE2 1 P32322 UNP 276 Q +ATOM 2032 O OE1 . GLN A 1 276 ? -4.620 -20.050 20.698 1.00 49.78 ? 276 GLN A OE1 1 P32322 UNP 276 Q +ATOM 2033 N N . VAL A 1 277 ? -3.544 -14.620 17.614 1.00 51.44 ? 277 VAL A N 1 P32322 UNP 277 V +ATOM 2034 C CA . VAL A 1 277 ? -2.282 -14.211 16.979 1.00 51.44 ? 277 VAL A CA 1 P32322 UNP 277 V +ATOM 2035 C C . VAL A 1 277 ? -1.680 -13.004 17.683 1.00 51.44 ? 277 VAL A C 1 P32322 UNP 277 V +ATOM 2036 C CB . VAL A 1 277 ? -2.417 -14.073 15.455 1.00 51.44 ? 277 VAL A CB 1 P32322 UNP 277 V +ATOM 2037 O O . VAL A 1 277 ? -2.127 -11.870 17.529 1.00 51.44 ? 277 VAL A O 1 P32322 UNP 277 V +ATOM 2038 C CG1 . VAL A 1 277 ? -1.022 -13.965 14.828 1.00 51.44 ? 277 VAL A CG1 1 P32322 UNP 277 V +ATOM 2039 C CG2 . VAL A 1 277 ? -3.078 -15.316 14.839 1.00 51.44 ? 277 VAL A CG2 1 P32322 UNP 277 V +ATOM 2040 N N . SER A 1 278 ? -0.605 -13.247 18.441 1.00 48.00 ? 278 SER A N 1 P32322 UNP 278 S +ATOM 2041 C CA . SER A 1 278 ? 0.226 -12.163 18.968 1.00 48.00 ? 278 SER A CA 1 P32322 UNP 278 S +ATOM 2042 C C . SER A 1 278 ? 0.863 -11.370 17.809 1.00 48.00 ? 278 SER A C 1 P32322 UNP 278 S +ATOM 2043 C CB . SER A 1 278 ? 1.295 -12.678 19.943 1.00 48.00 ? 278 SER A CB 1 P32322 UNP 278 S +ATOM 2044 O O . SER A 1 278 ? 1.283 -11.970 16.812 1.00 48.00 ? 278 SER A O 1 P32322 UNP 278 S +ATOM 2045 O OG . SER A 1 278 ? 2.315 -13.410 19.284 1.00 48.00 ? 278 SER A OG 1 P32322 UNP 278 S +ATOM 2046 N N . PRO A 1 279 ? 1.027 -10.036 17.918 1.00 49.28 ? 279 PRO A N 1 P32322 UNP 279 P +ATOM 2047 C CA . PRO A 1 279 ? 1.647 -9.214 16.869 1.00 49.28 ? 279 PRO A CA 1 P32322 UNP 279 P +ATOM 2048 C C . PRO A 1 279 ? 3.045 -9.696 16.434 1.00 49.28 ? 279 PRO A C 1 P32322 UNP 279 P +ATOM 2049 C CB . PRO A 1 279 ? 1.718 -7.803 17.466 1.00 49.28 ? 279 PRO A CB 1 P32322 UNP 279 P +ATOM 2050 O O . PRO A 1 279 ? 3.468 -9.477 15.296 1.00 49.28 ? 279 PRO A O 1 P32322 UNP 279 P +ATOM 2051 C CG . PRO A 1 279 ? 0.565 -7.770 18.467 1.00 49.28 ? 279 PRO A CG 1 P32322 UNP 279 P +ATOM 2052 C CD . PRO A 1 279 ? 0.513 -9.200 18.994 1.00 49.28 ? 279 PRO A CD 1 P32322 UNP 279 P +ATOM 2053 N N . ALA A 1 280 ? 3.763 -10.381 17.332 1.00 51.88 ? 280 ALA A N 1 P32322 UNP 280 A +ATOM 2054 C CA . ALA A 1 280 ? 5.081 -10.954 17.075 1.00 51.88 ? 280 ALA A CA 1 P32322 UNP 280 A +ATOM 2055 C C . ALA A 1 280 ? 5.045 -12.148 16.103 1.00 51.88 ? 280 ALA A C 1 P32322 UNP 280 A +ATOM 2056 C CB . ALA A 1 280 ? 5.690 -11.352 18.425 1.00 51.88 ? 280 ALA A CB 1 P32322 UNP 280 A +ATOM 2057 O O . ALA A 1 280 ? 5.970 -12.307 15.302 1.00 51.88 ? 280 ALA A O 1 P32322 UNP 280 A +ATOM 2058 N N . ALA A 1 281 ? 3.978 -12.954 16.122 1.00 52.72 ? 281 ALA A N 1 P32322 UNP 281 A +ATOM 2059 C CA . ALA A 1 281 ? 3.850 -14.127 15.260 1.00 52.72 ? 281 ALA A CA 1 P32322 UNP 281 A +ATOM 2060 C C . ALA A 1 281 ? 3.757 -13.738 13.773 1.00 52.72 ? 281 ALA A C 1 P32322 UNP 281 A +ATOM 2061 C CB . ALA A 1 281 ? 2.646 -14.947 15.734 1.00 52.72 ? 281 ALA A CB 1 P32322 UNP 281 A +ATOM 2062 O O . ALA A 1 281 ? 4.418 -14.349 12.938 1.00 52.72 ? 281 ALA A O 1 P32322 UNP 281 A +ATOM 2063 N N . ILE A 1 282 ? 3.054 -12.644 13.449 1.00 51.69 ? 282 ILE A N 1 P32322 UNP 282 I +ATOM 2064 C CA . ILE A 1 282 ? 2.878 -12.170 12.064 1.00 51.69 ? 282 ILE A CA 1 P32322 UNP 282 I +ATOM 2065 C C . ILE A 1 282 ? 4.207 -11.695 11.457 1.00 51.69 ? 282 ILE A C 1 P32322 UNP 282 I +ATOM 2066 C CB . ILE A 1 282 ? 1.793 -11.065 12.003 1.00 51.69 ? 282 ILE A CB 1 P32322 UNP 282 I +ATOM 2067 O O . ILE A 1 282 ? 4.462 -11.924 10.277 1.00 51.69 ? 282 ILE A O 1 P32322 UNP 282 I +ATOM 2068 C CG1 . ILE A 1 282 ? 0.449 -11.604 12.546 1.00 51.69 ? 282 ILE A CG1 1 P32322 UNP 282 I +ATOM 2069 C CG2 . ILE A 1 282 ? 1.608 -10.533 10.566 1.00 51.69 ? 282 ILE A CG2 1 P32322 UNP 282 I +ATOM 2070 C CD1 . ILE A 1 282 ? -0.667 -10.560 12.666 1.00 51.69 ? 282 ILE A CD1 1 P32322 UNP 282 I +ATOM 2071 N N . LYS A 1 283 ? 5.082 -11.054 12.247 1.00 48.84 ? 283 LYS A N 1 P32322 UNP 283 K +ATOM 2072 C CA . LYS A 1 283 ? 6.361 -10.516 11.748 1.00 48.84 ? 283 LYS A CA 1 P32322 UNP 283 K +ATOM 2073 C C . LYS A 1 283 ? 7.386 -11.618 11.447 1.00 48.84 ? 283 LYS A C 1 P32322 UNP 283 K +ATOM 2074 C CB . LYS A 1 283 ? 6.897 -9.459 12.733 1.00 48.84 ? 283 LYS A CB 1 P32322 UNP 283 K +ATOM 2075 O O . LYS A 1 283 ? 8.205 -11.444 10.549 1.00 48.84 ? 283 LYS A O 1 P32322 UNP 283 K +ATOM 2076 C CG . LYS A 1 283 ? 7.794 -8.415 12.043 1.00 48.84 ? 283 LYS A CG 1 P32322 UNP 283 K +ATOM 2077 C CD . LYS A 1 283 ? 8.275 -7.353 13.044 1.00 48.84 ? 283 LYS A CD 1 P32322 UNP 283 K +ATOM 2078 C CE . LYS A 1 283 ? 9.086 -6.257 12.338 1.00 48.84 ? 283 LYS A CE 1 P32322 UNP 283 K +ATOM 2079 N NZ . LYS A 1 283 ? 9.627 -5.262 13.302 1.00 48.84 ? 283 LYS A NZ 1 P32322 UNP 283 K +ATOM 2080 N N . LYS A 1 284 ? 7.330 -12.747 12.167 1.00 48.03 ? 284 LYS A N 1 P32322 UNP 284 K +ATOM 2081 C CA . LYS A 1 284 ? 8.274 -13.865 12.010 1.00 48.03 ? 284 LYS A CA 1 P32322 UNP 284 K +ATOM 2082 C C . LYS A 1 284 ? 7.969 -14.719 10.773 1.00 48.03 ? 284 LYS A C 1 P32322 UNP 284 K +ATOM 2083 C CB . LYS A 1 284 ? 8.321 -14.674 13.318 1.00 48.03 ? 284 LYS A CB 1 P32322 UNP 284 K +ATOM 2084 O O . LYS A 1 284 ? 8.887 -15.055 10.035 1.00 48.03 ? 284 LYS A O 1 P32322 UNP 284 K +ATOM 2085 C CG . LYS A 1 284 ? 9.571 -15.564 13.387 1.00 48.03 ? 284 LYS A CG 1 P32322 UNP 284 K +ATOM 2086 C CD . LYS A 1 284 ? 9.682 -16.266 14.747 1.00 48.03 ? 284 LYS A CD 1 P32322 UNP 284 K +ATOM 2087 C CE . LYS A 1 284 ? 10.939 -17.142 14.761 1.00 48.03 ? 284 LYS A CE 1 P32322 UNP 284 K +ATOM 2088 N NZ . LYS A 1 284 ? 11.081 -17.891 16.035 1.00 48.03 ? 284 LYS A NZ 1 P32322 UNP 284 K +ATOM 2089 N N . THR A 1 285 ? 6.693 -14.957 10.458 1.00 55.62 ? 285 THR A N 1 P32322 UNP 285 T +ATOM 2090 C CA . THR A 1 285 ? 6.297 -15.742 9.269 1.00 55.62 ? 285 THR A CA 1 P32322 UNP 285 T +ATOM 2091 C C . THR A 1 285 ? 6.731 -15.093 7.944 1.00 55.62 ? 285 THR A C 1 P32322 UNP 285 T +ATOM 2092 C CB . THR A 1 285 ? 4.773 -15.959 9.246 1.00 55.62 ? 285 THR A CB 1 P32322 UNP 285 T +ATOM 2093 O O . THR A 1 285 ? 6.958 -15.794 6.962 1.00 55.62 ? 285 THR A O 1 P32322 UNP 285 T +ATOM 2094 C CG2 . THR A 1 285 ? 4.353 -17.177 8.426 1.00 55.62 ? 285 THR A CG2 1 P32322 UNP 285 T +ATOM 2095 O OG1 . THR A 1 285 ? 4.266 -16.163 10.541 1.00 55.62 ? 285 THR A OG1 1 P32322 UNP 285 T +ATOM 2096 N N . ILE A 1 286 ? 6.878 -13.762 7.918 1.00 50.72 ? 286 ILE A N 1 P32322 UNP 286 I +ATOM 2097 C CA . ILE A 1 286 ? 7.193 -12.973 6.713 1.00 50.72 ? 286 ILE A CA 1 P32322 UNP 286 I +ATOM 2098 C C . ILE A 1 286 ? 8.631 -13.194 6.226 1.00 50.72 ? 286 ILE A C 1 P32322 UNP 286 I +ATOM 2099 C CB . ILE A 1 286 ? 6.906 -11.475 6.992 1.00 50.72 ? 286 ILE A CB 1 P32322 UNP 286 I +ATOM 2100 O O . ILE A 1 286 ? 8.865 -13.255 5.024 1.00 50.72 ? 286 ILE A O 1 P32322 UNP 286 I +ATOM 2101 C CG1 . ILE A 1 286 ? 5.385 -11.259 7.176 1.00 50.72 ? 286 ILE A CG1 1 P32322 UNP 286 I +ATOM 2102 C CG2 . ILE A 1 286 ? 7.422 -10.555 5.868 1.00 50.72 ? 286 ILE A CG2 1 P32322 UNP 286 I +ATOM 2103 C CD1 . ILE A 1 286 ? 5.010 -9.886 7.751 1.00 50.72 ? 286 ILE A CD1 1 P32322 UNP 286 I +ATOM 2104 N N . LEU A 1 287 ? 9.599 -13.317 7.136 1.00 49.00 ? 287 LEU A N 1 P32322 UNP 287 L +ATOM 2105 C CA . LEU A 1 287 ? 11.007 -13.492 6.761 1.00 49.00 ? 287 LEU A CA 1 P32322 UNP 287 L +ATOM 2106 C C . LEU A 1 287 ? 11.339 -14.940 6.406 1.00 49.00 ? 287 LEU A C 1 P32322 UNP 287 L +ATOM 2107 C CB . LEU A 1 287 ? 11.902 -12.954 7.893 1.00 49.00 ? 287 LEU A CB 1 P32322 UNP 287 L +ATOM 2108 O O . LEU A 1 287 ? 12.165 -15.166 5.525 1.00 49.00 ? 287 LEU A O 1 P32322 UNP 287 L +ATOM 2109 C CG . LEU A 1 287 ? 12.495 -11.572 7.552 1.00 49.00 ? 287 LEU A CG 1 P32322 UNP 287 L +ATOM 2110 C CD1 . LEU A 1 287 ? 12.383 -10.617 8.738 1.00 49.00 ? 287 LEU A CD1 1 P32322 UNP 287 L +ATOM 2111 C CD2 . LEU A 1 287 ? 13.970 -11.702 7.163 1.00 49.00 ? 287 LEU A CD2 1 P32322 UNP 287 L +ATOM 2112 N N . ASP A 1 288 ? 10.687 -15.898 7.061 1.00 48.84 ? 288 ASP A N 1 P32322 UNP 288 D +ATOM 2113 C CA . ASP A 1 288 ? 11.007 -17.310 6.880 1.00 48.84 ? 288 ASP A CA 1 P32322 UNP 288 D +ATOM 2114 C C . ASP A 1 288 ? 10.398 -17.859 5.577 1.00 48.84 ? 288 ASP A C 1 P32322 UNP 288 D +ATOM 2115 C CB . ASP A 1 288 ? 10.622 -18.095 8.149 1.00 48.84 ? 288 ASP A CB 1 P32322 UNP 288 D +ATOM 2116 O O . ASP A 1 288 ? 11.114 -18.497 4.811 1.00 48.84 ? 288 ASP A O 1 P32322 UNP 288 D +ATOM 2117 C CG . ASP A 1 288 ? 11.464 -17.710 9.386 1.00 48.84 ? 288 ASP A CG 1 P32322 UNP 288 D +ATOM 2118 O OD1 . ASP A 1 288 ? 12.582 -17.166 9.211 1.00 48.84 ? 288 ASP A OD1 1 P32322 UNP 288 D +ATOM 2119 O OD2 . ASP A 1 288 ? 10.981 -17.945 10.520 1.00 48.84 ? 288 ASP A OD2 1 P32322 UNP 288 D +ATOM 2120 N N . LYS A 1 289 ? 9.137 -17.531 5.235 1.00 53.53 ? 289 LYS A N 1 P32322 UNP 289 K +ATOM 2121 C CA . LYS A 1 289 ? 8.517 -17.996 3.973 1.00 53.53 ? 289 LYS A CA 1 P32322 UNP 289 K +ATOM 2122 C C . LYS A 1 289 ? 9.135 -17.358 2.720 1.00 53.53 ? 289 LYS A C 1 P32322 UNP 289 K +ATOM 2123 C CB . LYS A 1 289 ? 6.990 -17.808 3.983 1.00 53.53 ? 289 LYS A CB 1 P32322 UNP 289 K +ATOM 2124 O O . LYS A 1 289 ? 9.428 -18.064 1.764 1.00 53.53 ? 289 LYS A O 1 P32322 UNP 289 K +ATOM 2125 C CG . LYS A 1 289 ? 6.224 -18.875 4.793 1.00 53.53 ? 289 LYS A CG 1 P32322 UNP 289 K +ATOM 2126 C CD . LYS A 1 289 ? 4.716 -18.753 4.497 1.00 53.53 ? 289 LYS A CD 1 P32322 UNP 289 K +ATOM 2127 C CE . LYS A 1 289 ? 3.837 -19.830 5.153 1.00 53.53 ? 289 LYS A CE 1 P32322 UNP 289 K +ATOM 2128 N NZ . LYS A 1 289 ? 2.426 -19.756 4.654 1.00 53.53 ? 289 LYS A NZ 1 P32322 UNP 289 K +ATOM 2129 N N . VAL A 1 290 ? 9.429 -16.053 2.734 1.00 56.38 ? 290 VAL A N 1 P32322 UNP 290 V +ATOM 2130 C CA . VAL A 1 290 ? 10.065 -15.375 1.580 1.00 56.38 ? 290 VAL A CA 1 P32322 UNP 290 V +ATOM 2131 C C . VAL A 1 290 ? 11.485 -15.904 1.324 1.00 56.38 ? 290 VAL A C 1 P32322 UNP 290 V +ATOM 2132 C CB . VAL A 1 290 ? 10.053 -13.844 1.772 1.00 56.38 ? 290 VAL A CB 1 P32322 UNP 290 V +ATOM 2133 O O . VAL A 1 290 ? 11.930 -15.964 0.177 1.00 56.38 ? 290 VAL A O 1 P32322 UNP 290 V +ATOM 2134 C CG1 . VAL A 1 290 ? 10.775 -13.087 0.650 1.00 56.38 ? 290 VAL A CG1 1 P32322 UNP 290 V +ATOM 2135 C CG2 . VAL A 1 290 ? 8.610 -13.316 1.810 1.00 56.38 ? 290 VAL A CG2 1 P32322 UNP 290 V +ATOM 2136 N N . LYS A 1 291 ? 12.194 -16.337 2.376 1.00 49.91 ? 291 LYS A N 1 P32322 UNP 291 K +ATOM 2137 C CA . LYS A 1 291 ? 13.497 -17.006 2.244 1.00 49.91 ? 291 LYS A CA 1 P32322 UNP 291 K +ATOM 2138 C C . LYS A 1 291 ? 13.391 -18.460 1.780 1.00 49.91 ? 291 LYS A C 1 P32322 UNP 291 K +ATOM 2139 C CB . LYS A 1 291 ? 14.258 -16.941 3.572 1.00 49.91 ? 291 LYS A CB 1 P32322 UNP 291 K +ATOM 2140 O O . LYS A 1 291 ? 14.312 -18.918 1.115 1.00 49.91 ? 291 LYS A O 1 P32322 UNP 291 K +ATOM 2141 C CG . LYS A 1 291 ? 14.890 -15.564 3.798 1.00 49.91 ? 291 LYS A CG 1 P32322 UNP 291 K +ATOM 2142 C CD . LYS A 1 291 ? 15.629 -15.572 5.137 1.00 49.91 ? 291 LYS A CD 1 P32322 UNP 291 K +ATOM 2143 C CE . LYS A 1 291 ? 16.350 -14.244 5.354 1.00 49.91 ? 291 LYS A CE 1 P32322 UNP 291 K +ATOM 2144 N NZ . LYS A 1 291 ? 17.077 -14.262 6.645 1.00 49.91 ? 291 LYS A NZ 1 P32322 UNP 291 K +ATOM 2145 N N . LEU A 1 292 ? 12.320 -19.170 2.134 1.00 50.88 ? 292 LEU A N 1 P32322 UNP 292 L +ATOM 2146 C CA . LEU A 1 292 ? 12.122 -20.580 1.777 1.00 50.88 ? 292 LEU A CA 1 P32322 UNP 292 L +ATOM 2147 C C . LEU A 1 292 ? 11.654 -20.774 0.324 1.00 50.88 ? 292 LEU A C 1 P32322 UNP 292 L +ATOM 2148 C CB . LEU A 1 292 ? 11.163 -21.226 2.797 1.00 50.88 ? 292 LEU A CB 1 P32322 UNP 292 L +ATOM 2149 O O . LEU A 1 292 ? 12.056 -21.756 -0.291 1.00 50.88 ? 292 LEU A O 1 P32322 UNP 292 L +ATOM 2150 C CG . LEU A 1 292 ? 11.842 -21.561 4.141 1.00 50.88 ? 292 LEU A CG 1 P32322 UNP 292 L +ATOM 2151 C CD1 . LEU A 1 292 ? 10.808 -21.746 5.255 1.00 50.88 ? 292 LEU A CD1 1 P32322 UNP 292 L +ATOM 2152 C CD2 . LEU A 1 292 ? 12.652 -22.859 4.055 1.00 50.88 ? 292 LEU A CD2 1 P32322 UNP 292 L +ATOM 2153 N N . ASP A 1 293 ? 10.904 -19.822 -0.244 1.00 48.50 ? 293 ASP A N 1 P32322 UNP 293 D +ATOM 2154 C CA . ASP A 1 293 ? 10.360 -19.920 -1.613 1.00 48.50 ? 293 ASP A CA 1 P32322 UNP 293 D +ATOM 2155 C C . ASP A 1 293 ? 11.192 -19.177 -2.683 1.00 48.50 ? 293 ASP A C 1 P32322 UNP 293 D +ATOM 2156 C CB . ASP A 1 293 ? 8.886 -19.477 -1.615 1.00 48.50 ? 293 ASP A CB 1 P32322 UNP 293 D +ATOM 2157 O O . ASP A 1 293 ? 10.833 -19.146 -3.861 1.00 48.50 ? 293 ASP A O 1 P32322 UNP 293 D +ATOM 2158 C CG . ASP A 1 293 ? 7.960 -20.425 -0.839 1.00 48.50 ? 293 ASP A CG 1 P32322 UNP 293 D +ATOM 2159 O OD1 . ASP A 1 293 ? 8.267 -21.636 -0.764 1.00 48.50 ? 293 ASP A OD1 1 P32322 UNP 293 D +ATOM 2160 O OD2 . ASP A 1 293 ? 6.939 -19.925 -0.311 1.00 48.50 ? 293 ASP A OD2 1 P32322 UNP 293 D +ATOM 2161 N N . SER A 1 294 ? 12.333 -18.587 -2.307 1.00 38.75 ? 294 SER A N 1 P32322 UNP 294 S +ATOM 2162 C CA . SER A 1 294 ? 13.294 -18.045 -3.277 1.00 38.75 ? 294 SER A CA 1 P32322 UNP 294 S +ATOM 2163 C C . SER A 1 294 ? 14.150 -19.188 -3.844 1.00 38.75 ? 294 SER A C 1 P32322 UNP 294 S +ATOM 2164 C CB . SER A 1 294 ? 14.191 -16.990 -2.628 1.00 38.75 ? 294 SER A CB 1 P32322 UNP 294 S +ATOM 2165 O O . SER A 1 294 ? 14.829 -19.860 -3.063 1.00 38.75 ? 294 SER A O 1 P32322 UNP 294 S +ATOM 2166 O OG . SER A 1 294 ? 13.445 -15.842 -2.263 1.00 38.75 ? 294 SER A OG 1 P32322 UNP 294 S +ATOM 2167 N N . PRO A 1 295 ? 14.203 -19.420 -5.172 1.00 40.56 ? 295 PRO A N 1 P32322 UNP 295 P +ATOM 2168 C CA . PRO A 1 295 ? 15.097 -20.425 -5.729 1.00 40.56 ? 295 PRO A CA 1 P32322 UNP 295 P +ATOM 2169 C C . PRO A 1 295 ? 16.536 -20.028 -5.396 1.00 40.56 ? 295 PRO A C 1 P32322 UNP 295 P +ATOM 2170 C CB . PRO A 1 295 ? 14.842 -20.465 -7.243 1.00 40.56 ? 295 PRO A CB 1 P32322 UNP 295 P +ATOM 2171 O O . PRO A 1 295 ? 16.977 -18.931 -5.746 1.00 40.56 ? 295 PRO A O 1 P32322 UNP 295 P +ATOM 2172 C CG . PRO A 1 295 ? 13.593 -19.610 -7.457 1.00 40.56 ? 295 PRO A CG 1 P32322 UNP 295 P +ATOM 2173 C CD . PRO A 1 295 ? 13.521 -18.702 -6.232 1.00 40.56 ? 295 PRO A CD 1 P32322 UNP 295 P +ATOM 2174 N N . ALA A 1 296 ? 17.278 -20.914 -4.731 1.00 36.69 ? 296 ALA A N 1 P32322 UNP 296 A +ATOM 2175 C CA . ALA A 1 296 ? 18.721 -20.792 -4.570 1.00 36.69 ? 296 ALA A CA 1 P32322 UNP 296 A +ATOM 2176 C C . ALA A 1 296 ? 19.386 -20.898 -5.957 1.00 36.69 ? 296 ALA A C 1 P32322 UNP 296 A +ATOM 2177 C CB . ALA A 1 296 ? 19.202 -21.852 -3.569 1.00 36.69 ? 296 ALA A CB 1 P32322 UNP 296 A +ATOM 2178 O O . ALA A 1 296 ? 19.799 -21.967 -6.402 1.00 36.69 ? 296 ALA A O 1 P32322 UNP 296 A +ATOM 2179 N N . GLY A 1 297 ? 19.426 -19.777 -6.677 1.00 35.78 ? 297 GLY A N 1 P32322 UNP 297 G +ATOM 2180 C CA . GLY A 1 297 ? 20.044 -19.647 -7.987 1.00 35.78 ? 297 GLY A CA 1 P32322 UNP 297 G +ATOM 2181 C C . GLY A 1 297 ? 21.563 -19.729 -7.887 1.00 35.78 ? 297 GLY A C 1 P32322 UNP 297 G +ATOM 2182 O O . GLY A 1 297 ? 22.229 -18.734 -7.625 1.00 35.78 ? 297 GLY A O 1 P32322 UNP 297 G +ATOM 2183 N N . THR A 1 298 ? 22.082 -20.937 -8.113 1.00 33.91 ? 298 THR A N 1 P32322 UNP 298 T +ATOM 2184 C CA . THR A 1 298 ? 23.386 -21.248 -8.726 1.00 33.91 ? 298 THR A CA 1 P32322 UNP 298 T +ATOM 2185 C C . THR A 1 298 ? 24.600 -20.460 -8.220 1.00 33.91 ? 298 THR A C 1 P32322 UNP 298 T +ATOM 2186 C CB . THR A 1 298 ? 23.294 -21.178 -10.262 1.00 33.91 ? 298 THR A CB 1 P32322 UNP 298 T +ATOM 2187 O O . THR A 1 298 ? 25.051 -19.496 -8.838 1.00 33.91 ? 298 THR A O 1 P32322 UNP 298 T +ATOM 2188 C CG2 . THR A 1 298 ? 22.419 -22.299 -10.825 1.00 33.91 ? 298 THR A CG2 1 P32322 UNP 298 T +ATOM 2189 O OG1 . THR A 1 298 ? 22.733 -19.955 -10.676 1.00 33.91 ? 298 THR A OG1 1 P32322 UNP 298 T +ATOM 2190 N N . ALA A 1 299 ? 25.225 -20.974 -7.159 1.00 31.55 ? 299 ALA A N 1 P32322 UNP 299 A +ATOM 2191 C CA . ALA A 1 299 ? 26.641 -20.749 -6.897 1.00 31.55 ? 299 ALA A CA 1 P32322 UNP 299 A +ATOM 2192 C C . ALA A 1 299 ? 27.476 -21.520 -7.939 1.00 31.55 ? 299 ALA A C 1 P32322 UNP 299 A +ATOM 2193 C CB . ALA A 1 299 ? 26.948 -21.182 -5.456 1.00 31.55 ? 299 ALA A CB 1 P32322 UNP 299 A +ATOM 2194 O O . ALA A 1 299 ? 27.686 -22.724 -7.813 1.00 31.55 ? 299 ALA A O 1 P32322 UNP 299 A +ATOM 2195 N N . LEU A 1 300 ? 27.934 -20.830 -8.986 1.00 36.62 ? 300 LEU A N 1 P32322 UNP 300 L +ATOM 2196 C CA . LEU A 1 300 ? 28.976 -21.322 -9.889 1.00 36.62 ? 300 LEU A CA 1 P32322 UNP 300 L +ATOM 2197 C C . LEU A 1 300 ? 30.328 -20.762 -9.432 1.00 36.62 ? 300 LEU A C 1 P32322 UNP 300 L +ATOM 2198 C CB . LEU A 1 300 ? 28.634 -20.970 -11.349 1.00 36.62 ? 300 LEU A CB 1 P32322 UNP 300 L +ATOM 2199 O O . LEU A 1 300 ? 30.630 -19.582 -9.592 1.00 36.62 ? 300 LEU A O 1 P32322 UNP 300 L +ATOM 2200 C CG . LEU A 1 300 ? 27.696 -21.999 -12.010 1.00 36.62 ? 300 LEU A CG 1 P32322 UNP 300 L +ATOM 2201 C CD1 . LEU A 1 300 ? 27.012 -21.385 -13.230 1.00 36.62 ? 300 LEU A CD1 1 P32322 UNP 300 L +ATOM 2202 C CD2 . LEU A 1 300 ? 28.462 -23.243 -12.476 1.00 36.62 ? 300 LEU A CD2 1 P32322 UNP 300 L +ATOM 2203 N N . SER A 1 301 ? 31.132 -21.638 -8.839 1.00 33.16 ? 301 SER A N 1 P32322 UNP 301 S +ATOM 2204 C CA . SER A 1 301 ? 32.550 -21.443 -8.541 1.00 33.16 ? 301 SER A CA 1 P32322 UNP 301 S +ATOM 2205 C C . SER A 1 301 ? 33.394 -21.438 -9.823 1.00 33.16 ? 301 SER A C 1 P32322 UNP 301 S +ATOM 2206 C CB . SER A 1 301 ? 33.010 -22.634 -7.688 1.00 33.16 ? 301 SER A CB 1 P32322 UNP 301 S +ATOM 2207 O O . SER A 1 301 ? 33.240 -22.365 -10.620 1.00 33.16 ? 301 SER A O 1 P32322 UNP 301 S +ATOM 2208 O OG . SER A 1 301 ? 32.670 -23.855 -8.331 1.00 33.16 ? 301 SER A OG 1 P32322 UNP 301 S +ATOM 2209 N N . PRO A 1 302 ? 34.375 -20.536 -9.994 1.00 42.66 ? 302 PRO A N 1 P32322 UNP 302 P +ATOM 2210 C CA . PRO A 1 302 ? 35.470 -20.767 -10.921 1.00 42.66 ? 302 PRO A CA 1 P32322 UNP 302 P +ATOM 2211 C C . PRO A 1 302 ? 36.733 -21.162 -10.145 1.00 42.66 ? 302 PRO A C 1 P32322 UNP 302 P +ATOM 2212 C CB . PRO A 1 302 ? 35.591 -19.471 -11.719 1.00 42.66 ? 302 PRO A CB 1 P32322 UNP 302 P +ATOM 2213 O O . PRO A 1 302 ? 37.460 -20.324 -9.614 1.00 42.66 ? 302 PRO A O 1 P32322 UNP 302 P +ATOM 2214 C CG . PRO A 1 302 ? 35.045 -18.388 -10.781 1.00 42.66 ? 302 PRO A CG 1 P32322 UNP 302 P +ATOM 2215 C CD . PRO A 1 302 ? 34.348 -19.129 -9.630 1.00 42.66 ? 302 PRO A CD 1 P32322 UNP 302 P +ATOM 2216 N N . SER A 1 303 ? 37.006 -22.465 -10.092 1.00 37.41 ? 303 SER A N 1 P32322 UNP 303 S +ATOM 2217 C CA . SER A 1 303 ? 38.349 -23.004 -9.872 1.00 37.41 ? 303 SER A CA 1 P32322 UNP 303 S +ATOM 2218 C C . SER A 1 303 ? 39.119 -22.953 -11.195 1.00 37.41 ? 303 SER A C 1 P32322 UNP 303 S +ATOM 2219 C CB . SER A 1 303 ? 38.256 -24.456 -9.383 1.00 37.41 ? 303 SER A CB 1 P32322 UNP 303 S +ATOM 2220 O O . SER A 1 303 ? 38.674 -23.552 -12.172 1.00 37.41 ? 303 SER A O 1 P32322 UNP 303 S +ATOM 2221 O OG . SER A 1 303 ? 37.488 -25.233 -10.283 1.00 37.41 ? 303 SER A OG 1 P32322 UNP 303 S +ATOM 2222 N N . GLY A 1 304 ? 40.272 -22.284 -11.246 1.00 38.22 ? 304 GLY A N 1 P32322 UNP 304 G +ATOM 2223 C CA . GLY A 1 304 ? 41.120 -22.318 -12.441 1.00 38.22 ? 304 GLY A CA 1 P32322 UNP 304 G +ATOM 2224 C C . GLY A 1 304 ? 42.268 -21.318 -12.417 1.00 38.22 ? 304 GLY A C 1 P32322 UNP 304 G +ATOM 2225 O O . GLY A 1 304 ? 42.130 -20.185 -12.858 1.00 38.22 ? 304 GLY A O 1 P32322 UNP 304 G +ATOM 2226 N N . HIS A 1 305 ? 43.410 -21.758 -11.896 1.00 39.84 ? 305 HIS A N 1 P32322 UNP 305 H +ATOM 2227 C CA . HIS A 1 305 ? 44.694 -21.064 -11.907 1.00 39.84 ? 305 HIS A CA 1 P32322 UNP 305 H +ATOM 2228 C C . HIS A 1 305 ? 45.129 -20.585 -13.302 1.00 39.84 ? 305 HIS A C 1 P32322 UNP 305 H +ATOM 2229 C CB . HIS A 1 305 ? 45.753 -22.083 -11.446 1.00 39.84 ? 305 HIS A CB 1 P32322 UNP 305 H +ATOM 2230 O O . HIS A 1 305 ? 45.257 -21.405 -14.206 1.00 39.84 ? 305 HIS A O 1 P32322 UNP 305 H +ATOM 2231 C CG . HIS A 1 305 ? 45.810 -22.329 -9.967 1.00 39.84 ? 305 HIS A CG 1 P32322 UNP 305 H +ATOM 2232 C CD2 . HIS A 1 305 ? 45.435 -23.461 -9.294 1.00 39.84 ? 305 HIS A CD2 1 P32322 UNP 305 H +ATOM 2233 N ND1 . HIS A 1 305 ? 46.381 -21.477 -9.052 1.00 39.84 ? 305 HIS A ND1 1 P32322 UNP 305 H +ATOM 2234 C CE1 . HIS A 1 305 ? 46.349 -22.077 -7.852 1.00 39.84 ? 305 HIS A CE1 1 P32322 UNP 305 H +ATOM 2235 N NE2 . HIS A 1 305 ? 45.785 -23.286 -7.952 1.00 39.84 ? 305 HIS A NE2 1 P32322 UNP 305 H +ATOM 2236 N N . THR A 1 306 ? 45.579 -19.331 -13.429 1.00 38.53 ? 306 THR A N 1 P32322 UNP 306 T +ATOM 2237 C CA . THR A 1 306 ? 46.820 -19.016 -14.168 1.00 38.53 ? 306 THR A CA 1 P32322 UNP 306 T +ATOM 2238 C C . THR A 1 306 ? 47.472 -17.739 -13.624 1.00 38.53 ? 306 THR A C 1 P32322 UNP 306 T +ATOM 2239 C CB . THR A 1 306 ? 46.686 -18.944 -15.703 1.00 38.53 ? 306 THR A CB 1 P32322 UNP 306 T +ATOM 2240 O O . THR A 1 306 ? 46.812 -16.824 -13.144 1.00 38.53 ? 306 THR A O 1 P32322 UNP 306 T +ATOM 2241 C CG2 . THR A 1 306 ? 47.971 -19.439 -16.378 1.00 38.53 ? 306 THR A CG2 1 P32322 UNP 306 T +ATOM 2242 O OG1 . THR A 1 306 ? 45.664 -19.758 -16.214 1.00 38.53 ? 306 THR A OG1 1 P32322 UNP 306 T +ATOM 2243 N N . LYS A 1 307 ? 48.802 -17.764 -13.603 1.00 39.25 ? 307 LYS A N 1 P32322 UNP 307 K +ATOM 2244 C CA . LYS A 1 307 ? 49.749 -16.960 -12.825 1.00 39.25 ? 307 LYS A CA 1 P32322 UNP 307 K +ATOM 2245 C C . LYS A 1 307 ? 50.278 -15.733 -13.596 1.00 39.25 ? 307 LYS A C 1 P32322 UNP 307 K +ATOM 2246 C CB . LYS A 1 307 ? 50.927 -17.915 -12.512 1.00 39.25 ? 307 LYS A CB 1 P32322 UNP 307 K +ATOM 2247 O O . LYS A 1 307 ? 50.435 -15.811 -14.806 1.00 39.25 ? 307 LYS A O 1 P32322 UNP 307 K +ATOM 2248 C CG . LYS A 1 307 ? 50.965 -18.551 -11.115 1.00 39.25 ? 307 LYS A CG 1 P32322 UNP 307 K +ATOM 2249 C CD . LYS A 1 307 ? 52.180 -19.496 -11.021 1.00 39.25 ? 307 LYS A CD 1 P32322 UNP 307 K +ATOM 2250 C CE . LYS A 1 307 ? 52.334 -20.115 -9.625 1.00 39.25 ? 307 LYS A CE 1 P32322 UNP 307 K +ATOM 2251 N NZ . LYS A 1 307 ? 53.484 -21.057 -9.565 1.00 39.25 ? 307 LYS A NZ 1 P32322 UNP 307 K +ATOM 2252 N N . LEU A 1 308 ? 50.759 -14.755 -12.807 1.00 38.62 ? 308 LEU A N 1 P32322 UNP 308 L +ATOM 2253 C CA . LEU A 1 308 ? 51.968 -13.916 -13.000 1.00 38.62 ? 308 LEU A CA 1 P32322 UNP 308 L +ATOM 2254 C C . LEU A 1 308 ? 51.912 -12.726 -13.991 1.00 38.62 ? 308 LEU A C 1 P32322 UNP 308 L +ATOM 2255 C CB . LEU A 1 308 ? 53.169 -14.856 -13.289 1.00 38.62 ? 308 LEU A CB 1 P32322 UNP 308 L +ATOM 2256 O O . LEU A 1 308 ? 52.022 -12.915 -15.193 1.00 38.62 ? 308 LEU A O 1 P32322 UNP 308 L +ATOM 2257 C CG . LEU A 1 308 ? 53.747 -15.599 -12.074 1.00 38.62 ? 308 LEU A CG 1 P32322 UNP 308 L +ATOM 2258 C CD1 . LEU A 1 308 ? 54.588 -16.792 -12.539 1.00 38.62 ? 308 LEU A CD1 1 P32322 UNP 308 L +ATOM 2259 C CD2 . LEU A 1 308 ? 54.650 -14.694 -11.237 1.00 38.62 ? 308 LEU A CD2 1 P32322 UNP 308 L +ATOM 2260 N N . LEU A 1 309 ? 51.953 -11.479 -13.484 1.00 40.81 ? 309 LEU A N 1 P32322 UNP 309 L +ATOM 2261 C CA . LEU A 1 309 ? 53.189 -10.705 -13.203 1.00 40.81 ? 309 LEU A CA 1 P32322 UNP 309 L +ATOM 2262 C C . LEU A 1 309 ? 52.887 -9.323 -12.543 1.00 40.81 ? 309 LEU A C 1 P32322 UNP 309 L +ATOM 2263 C CB . LEU A 1 309 ? 54.004 -10.486 -14.497 1.00 40.81 ? 309 LEU A CB 1 P32322 UNP 309 L +ATOM 2264 O O . LEU A 1 309 ? 51.843 -8.748 -12.841 1.00 40.81 ? 309 LEU A O 1 P32322 UNP 309 L +ATOM 2265 C CG . LEU A 1 309 ? 55.085 -11.565 -14.703 1.00 40.81 ? 309 LEU A CG 1 P32322 UNP 309 L +ATOM 2266 C CD1 . LEU A 1 309 ? 55.388 -11.783 -16.179 1.00 40.81 ? 309 LEU A CD1 1 P32322 UNP 309 L +ATOM 2267 C CD2 . LEU A 1 309 ? 56.384 -11.237 -13.963 1.00 40.81 ? 309 LEU A CD2 1 P32322 UNP 309 L +ATOM 2268 N N . PRO A 1 310 ? 53.757 -8.781 -11.652 1.00 41.81 ? 310 PRO A N 1 P32322 UNP 310 P +ATOM 2269 C CA . PRO A 1 310 ? 53.476 -7.587 -10.833 1.00 41.81 ? 310 PRO A CA 1 P32322 UNP 310 P +ATOM 2270 C C . PRO A 1 310 ? 54.402 -6.365 -11.089 1.00 41.81 ? 310 PRO A C 1 P32322 UNP 310 P +ATOM 2271 C CB . PRO A 1 310 ? 53.691 -8.130 -9.414 1.00 41.81 ? 310 PRO A CB 1 P32322 UNP 310 P +ATOM 2272 O O . PRO A 1 310 ? 55.409 -6.482 -11.782 1.00 41.81 ? 310 PRO A O 1 P32322 UNP 310 P +ATOM 2273 C CG . PRO A 1 310 ? 54.927 -9.019 -9.575 1.00 41.81 ? 310 PRO A CG 1 P32322 UNP 310 P +ATOM 2274 C CD . PRO A 1 310 ? 54.890 -9.469 -11.036 1.00 41.81 ? 310 PRO A CD 1 P32322 UNP 310 P +ATOM 2275 N N . ARG A 1 311 ? 54.120 -5.267 -10.347 1.00 41.94 ? 311 ARG A N 1 P32322 UNP 311 R +ATOM 2276 C CA . ARG A 1 311 ? 54.872 -3.989 -10.127 1.00 41.94 ? 311 ARG A CA 1 P32322 UNP 311 R +ATOM 2277 C C . ARG A 1 311 ? 54.499 -2.861 -11.114 1.00 41.94 ? 311 ARG A C 1 P32322 UNP 311 R +ATOM 2278 C CB . ARG A 1 311 ? 56.396 -4.223 -10.029 1.00 41.94 ? 311 ARG A CB 1 P32322 UNP 311 R +ATOM 2279 O O . ARG A 1 311 ? 54.362 -3.123 -12.293 1.00 41.94 ? 311 ARG A O 1 P32322 UNP 311 R +ATOM 2280 C CG . ARG A 1 311 ? 56.811 -5.154 -8.879 1.00 41.94 ? 311 ARG A CG 1 P32322 UNP 311 R +ATOM 2281 C CD . ARG A 1 311 ? 58.332 -5.356 -8.879 1.00 41.94 ? 311 ARG A CD 1 P32322 UNP 311 R +ATOM 2282 N NE . ARG A 1 311 ? 58.807 -5.948 -7.611 1.00 41.94 ? 311 ARG A NE 1 P32322 UNP 311 R +ATOM 2283 N NH1 . ARG A 1 311 ? 61.036 -6.063 -8.157 1.00 41.94 ? 311 ARG A NH1 1 P32322 UNP 311 R +ATOM 2284 N NH2 . ARG A 1 311 ? 60.373 -6.654 -6.111 1.00 41.94 ? 311 ARG A NH2 1 P32322 UNP 311 R +ATOM 2285 C CZ . ARG A 1 311 ? 60.064 -6.219 -7.301 1.00 41.94 ? 311 ARG A CZ 1 P32322 UNP 311 R +ATOM 2286 N N . SER A 1 312 ? 54.297 -1.593 -10.728 1.00 44.66 ? 312 SER A N 1 P32322 UNP 312 S +ATOM 2287 C CA . SER A 1 312 ? 54.937 -0.781 -9.678 1.00 44.66 ? 312 SER A CA 1 P32322 UNP 312 S +ATOM 2288 C C . SER A 1 312 ? 54.132 0.501 -9.336 1.00 44.66 ? 312 SER A C 1 P32322 UNP 312 S +ATOM 2289 C CB . SER A 1 312 ? 56.290 -0.327 -10.255 1.00 44.66 ? 312 SER A CB 1 P32322 UNP 312 S +ATOM 2290 O O . SER A 1 312 ? 53.732 1.224 -10.237 1.00 44.66 ? 312 SER A O 1 P32322 UNP 312 S +ATOM 2291 O OG . SER A 1 312 ? 56.900 0.666 -9.470 1.00 44.66 ? 312 SER A OG 1 P32322 UNP 312 S +ATOM 2292 N N . LEU A 1 313 ? 53.944 0.735 -8.029 1.00 43.06 ? 313 LEU A N 1 P32322 UNP 313 L +ATOM 2293 C CA . LEU A 1 313 ? 54.011 1.958 -7.185 1.00 43.06 ? 313 LEU A CA 1 P32322 UNP 313 L +ATOM 2294 C C . LEU A 1 313 ? 53.736 3.395 -7.727 1.00 43.06 ? 313 LEU A C 1 P32322 UNP 313 L +ATOM 2295 C CB . LEU A 1 313 ? 55.361 1.913 -6.435 1.00 43.06 ? 313 LEU A CB 1 P32322 UNP 313 L +ATOM 2296 O O . LEU A 1 313 ? 54.300 3.838 -8.720 1.00 43.06 ? 313 LEU A O 1 P32322 UNP 313 L +ATOM 2297 C CG . LEU A 1 313 ? 55.502 0.704 -5.481 1.00 43.06 ? 313 LEU A CG 1 P32322 UNP 313 L +ATOM 2298 C CD1 . LEU A 1 313 ? 56.968 0.372 -5.213 1.00 43.06 ? 313 LEU A CD1 1 P32322 UNP 313 L +ATOM 2299 C CD2 . LEU A 1 313 ? 54.789 0.955 -4.151 1.00 43.06 ? 313 LEU A CD2 1 P32322 UNP 313 L +ATOM 2300 N N . ALA A 1 314 ? 52.929 4.108 -6.920 1.00 43.25 ? 314 ALA A N 1 P32322 UNP 314 A +ATOM 2301 C CA . ALA A 1 314 ? 52.481 5.523 -6.893 1.00 43.25 ? 314 ALA A CA 1 P32322 UNP 314 A +ATOM 2302 C C . ALA A 1 314 ? 53.596 6.533 -6.447 1.00 43.25 ? 314 ALA A C 1 P32322 UNP 314 A +ATOM 2303 C CB . ALA A 1 314 ? 51.311 5.445 -5.891 1.00 43.25 ? 314 ALA A CB 1 P32322 UNP 314 A +ATOM 2304 O O . ALA A 1 314 ? 54.746 6.090 -6.432 1.00 43.25 ? 314 ALA A O 1 P32322 UNP 314 A +ATOM 2305 N N . PRO A 1 315 ? 53.359 7.798 -5.968 1.00 47.22 ? 315 PRO A N 1 P32322 UNP 315 P +ATOM 2306 C CA . PRO A 1 315 ? 52.129 8.620 -5.814 1.00 47.22 ? 315 PRO A CA 1 P32322 UNP 315 P +ATOM 2307 C C . PRO A 1 315 ? 52.243 10.160 -6.099 1.00 47.22 ? 315 PRO A C 1 P32322 UNP 315 P +ATOM 2308 C CB . PRO A 1 315 ? 51.836 8.459 -4.310 1.00 47.22 ? 315 PRO A CB 1 P32322 UNP 315 P +ATOM 2309 O O . PRO A 1 315 ? 53.316 10.696 -6.330 1.00 47.22 ? 315 PRO A O 1 P32322 UNP 315 P +ATOM 2310 C CG . PRO A 1 315 ? 53.233 8.426 -3.677 1.00 47.22 ? 315 PRO A CG 1 P32322 UNP 315 P +ATOM 2311 C CD . PRO A 1 315 ? 54.198 8.224 -4.848 1.00 47.22 ? 315 PRO A CD 1 P32322 UNP 315 P +ATOM 2312 N N . ALA A 1 316 ? 51.085 10.841 -6.015 1.00 41.66 ? 316 ALA A N 1 P32322 UNP 316 A +ATOM 2313 C CA . ALA A 1 316 ? 50.775 12.225 -5.577 1.00 41.66 ? 316 ALA A CA 1 P32322 UNP 316 A +ATOM 2314 C C . ALA A 1 316 ? 51.700 13.434 -5.892 1.00 41.66 ? 316 ALA A C 1 P32322 UNP 316 A +ATOM 2315 C CB . ALA A 1 316 ? 50.487 12.179 -4.067 1.00 41.66 ? 316 ALA A CB 1 P32322 UNP 316 A +ATOM 2316 O O . ALA A 1 316 ? 52.828 13.521 -5.419 1.00 41.66 ? 316 ALA A O 1 P32322 UNP 316 A +ATOM 2317 N N . GLY A 1 317 ? 51.101 14.479 -6.484 1.00 54.91 ? 317 GLY A N 1 P32322 UNP 317 G +ATOM 2318 C CA . GLY A 1 317 ? 51.564 15.873 -6.450 1.00 54.91 ? 317 GLY A CA 1 P32322 UNP 317 G +ATOM 2319 C C . GLY A 1 317 ? 50.372 16.839 -6.530 1.00 54.91 ? 317 GLY A C 1 P32322 UNP 317 G +ATOM 2320 O O . GLY A 1 317 ? 49.500 16.652 -7.374 1.00 54.91 ? 317 GLY A O 1 P32322 UNP 317 G +ATOM 2321 N N . LYS A 1 318 ? 50.310 17.795 -5.596 1.00 52.16 ? 318 LYS A N 1 P32322 UNP 318 K +ATOM 2322 C CA . LYS A 1 318 ? 49.359 18.918 -5.531 1.00 52.16 ? 318 LYS A CA 1 P32322 UNP 318 K +ATOM 2323 C C . LYS A 1 318 ? 49.811 20.051 -6.456 1.00 52.16 ? 318 LYS A C 1 P32322 UNP 318 K +ATOM 2324 C CB . LYS A 1 318 ? 49.350 19.514 -4.109 1.00 52.16 ? 318 LYS A CB 1 P32322 UNP 318 K +ATOM 2325 O O . LYS A 1 318 ? 51.009 20.305 -6.496 1.00 52.16 ? 318 LYS A O 1 P32322 UNP 318 K +ATOM 2326 C CG . LYS A 1 318 ? 48.609 18.715 -3.032 1.00 52.16 ? 318 LYS A CG 1 P32322 UNP 318 K +ATOM 2327 C CD . LYS A 1 318 ? 48.810 19.421 -1.681 1.00 52.16 ? 318 LYS A CD 1 P32322 UNP 318 K +ATOM 2328 C CE . LYS A 1 318 ? 47.914 18.827 -0.593 1.00 52.16 ? 318 LYS A CE 1 P32322 UNP 318 K +ATOM 2329 N NZ . LYS A 1 318 ? 48.127 19.527 0.697 1.00 52.16 ? 318 LYS A NZ 1 P32322 UNP 318 K +ATOM 2330 N N . ASP A 1 319 ? 48.835 20.759 -7.017 1.00 57.31 ? 319 ASP A N 1 P32322 UNP 319 D +ATOM 2331 C CA . ASP A 1 319 ? 48.768 22.226 -7.100 1.00 57.31 ? 319 ASP A CA 1 P32322 UNP 319 D +ATOM 2332 C C . ASP A 1 319 ? 47.386 22.657 -6.577 1.00 57.31 ? 319 ASP A C 1 P32322 UNP 319 D +ATOM 2333 C CB . ASP A 1 319 ? 49.042 22.735 -8.533 1.00 57.31 ? 319 ASP A CB 1 P32322 UNP 319 D +ATOM 2334 O O . ASP A 1 319 ? 46.427 21.861 -6.755 1.00 57.31 ? 319 ASP A O 1 P32322 UNP 319 D +ATOM 2335 C CG . ASP A 1 319 ? 50.531 22.814 -8.929 1.00 57.31 ? 319 ASP A CG 1 P32322 UNP 319 D +ATOM 2336 O OD1 . ASP A 1 319 ? 51.374 23.153 -8.063 1.00 57.31 ? 319 ASP A OD1 1 P32322 UNP 319 D +ATOM 2337 O OD2 . ASP A 1 319 ? 50.816 22.601 -10.133 1.00 57.31 ? 319 ASP A OD2 1 P32322 UNP 319 D +ATOM 2338 O OXT . ASP A 1 319 ? 47.332 23.686 -5.872 1.00 57.31 ? 319 ASP A OXT 1 P32322 UNP 319 D +# diff --git a/tools/battery/models/AF-P32322-F1-predicted_aligned_error_v6.json b/tools/battery/models/AF-P32322-F1-predicted_aligned_error_v6.json new file mode 100644 index 000000000..60e3990b5 --- /dev/null +++ b/tools/battery/models/AF-P32322-F1-predicted_aligned_error_v6.json @@ -0,0 +1 @@ +[{"predicted_aligned_error":[[0,1,1,2,4,4,6,4,6,5,4,5,4,4,5,4,4,5,4,5,6,5,5,4,4,3,3,3,2,2,2,5,5,5,5,5,6,5,5,5,5,4,5,5,5,5,6,4,4,4,3,4,4,4,4,4,4,3,6,5,4,2,2,2,2,3,4,4,5,5,6,6,6,6,5,6,5,6,5,5,6,6,6,6,5,4,5,4,3,3,3,7,4,5,6,5,6,8,6,6,7,7,7,6,6,7,7,6,6,6,7,6,7,6,5,6,6,7,6,6,7,5,6,6,6,7,5,7,7,8,7,6,7,6,5,7,7,6,7,7,7,6,6,3,4,5,4,3,4,5,4,4,5,6,5,6,6,7,6,7,7,7,8,7,8,7,6,8,8,7,7,8,8,7,7,6,8,7,7,8,9,8,8,9,9,10,10,9,10,11,10,10,12,10,12,11,10,11,10,11,11,9,8,10,10,8,9,10,10,8,10,11,8,9,10,9,9,9,9,9,12,9,8,10,10,11,11,10,13,11,12,10,12,11,11,11,11,11,11,12,12,11,11,12,10,12,11,10,10,9,12,9,9,10,10,9,8,9,9,8,8,9,8,8,6,8,7,7,7,8,7,7,9,10,9,11,11,13,16,15,13,14,16,16,15,16,19,19,19,19,22,23,23,24,25,26,27,27,27,27,28,28,28,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,29],[1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,2,3,3,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,5,5,6,5,5,5,5,4,5,5,4,4,4,5,4,4,4,4,4,4,5,4,4,4,5,5,5,4,5,5,5,6,5,6,5,5,6,7,7,6,6,6,6,5,6,5,5,6,6,5,5,6,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,4,5,5,6,7,8,9,10,11,12,13,13,13,15,14,16,15,16,17,19,20,22,23,24,26,27,28,28,28,29,29,29,30,29,30,30,29,29,30,30,30,30,30,30,30,30,29,29],[1,1,0,1,1,1,1,1,1,2,2,1,1,2,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,6,9,9,10,11,10,12,13,13,14,14,17,15,17,18,20,20,21,23,24,25,27,27,27,27,28,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,28],[1,1,1,0,1,1,1,1,1,2,1,1,1,2,1,1,1,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,2,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,4,4,5,7,9,10,11,12,11,10,12,11,14,13,15,14,14,18,18,19,21,23,24,25,27,27,27,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,2,3,3,3,4,4,5,6,7,10,11,11,11,11,11,10,12,13,15,14,15,20,19,20,21,24,24,25,26,27,27,28,28,28,28,29,29,29,29,29,29,29,29,29,30,30,30,30,30,29,29],[2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,2,2,1,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,2,3,3,3,3,4,5,7,8,8,9,10,9,9,10,10,12,12,14,13,13,18,18,19,21,23,25,25,27,28,28,28,28,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,29,29],[2,2,2,1,1,1,0,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,2,1,1,2,2,2,2,2,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,3,2,2,2,3,2,2,2,3,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,3,3,3,2,2,2,2,3,2,3,2,3,2,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,5,4,4,5,5,4,4,5,4,4,4,4,4,4,5,4,4,4,5,5,5,4,5,6,5,5,5,6,6,6,6,7,7,6,6,7,7,8,8,7,5,6,7,6,6,7,6,5,6,6,6,6,5,5,5,5,4,5,5,4,4,5,4,3,3,4,3,3,3,4,4,3,4,4,4,4,5,7,7,8,9,9,10,9,10,10,11,12,13,14,14,16,20,19,20,22,23,24,25,27,27,27,27,28,28,29,29,29,29,29,28,29,30,30,30,30,30,30,30,30,29,29],[2,2,2,2,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,2,2,3,3,3,3,3,3,2,2,2,2,1,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,3,3,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,4,3,4,4,3,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,4,5,5,6,6,6,6,6,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,5,6,5,5,5,6,6,6,6,7,6,6,8,8,7,7,7,6,6,7,6,6,6,6,5,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,5,5,6,8,9,10,10,11,11,11,12,12,12,14,16,15,14,20,19,20,21,23,24,26,27,28,27,28,28,28,29,29,29,29,29,29,29,29,29,30,29,30,30,30,30,30,29],[3,3,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,3,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,1,2,2,2,2,2,2,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,4,4,4,4,3,4,3,4,3,3,4,3,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,3,3,3,3,4,4,4,5,4,4,5,4,4,5,4,5,5,5,5,5,6,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,6,5,6,6,7,7,8,7,6,6,6,6,6,6,6,5,5,5,5,6,5,4,5,5,5,4,5,5,4,4,4,4,4,4,5,5,4,4,4,4,4,5,5,5,5,6,6,7,9,10,9,10,9,9,11,10,13,13,15,15,14,20,19,20,20,23,24,25,27,27,27,28,28,28,29,29,29,29,29,29,29,30,30,30,30,30,30,29,29,29,29],[2,2,2,2,1,2,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,3,2,2,3,3,3,4,4,4,4,4,4,5,4,4,4,4,5,5,5,4,4,5,4,4,4,5,4,4,4,5,4,4,4,4,4,4,3,3,4,3,3,3,4,4,5,4,5,5,5,4,6,5,5,5,6,7,7,6,6,6,6,5,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,4,4,4,4,5,6,7,8,9,10,9,9,11,11,9,11,13,16,14,14,18,19,17,19,23,25,25,27,27,27,28,28,28,29,29,29,29,29,29,29,29,30,30,29,30,29,30,30,30,30],[2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,3,2,3,3,2,2,3,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,4,3,4,4,5,4,4,5,5,4,5,6,5,5,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,4,3,4,4,4,4,5,5,6,10,9,11,10,10,10,12,11,13,14,16,15,16,20,19,19,21,24,24,25,26,27,27,27,28,28,28,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29],[2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,2,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,4,4,4,4,5,5,5,4,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,3,4,4,4,5,6,8,9,10,10,9,10,12,10,13,13,16,14,15,21,18,19,20,23,25,26,27,28,28,28,29,29,29,29,29,29,29,29,29,30,30,29,29,30,29,29,29,29,28],[2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,3,2,2,3,3,2,2,3,3,4,3,3,3,4,3,3,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,6,8,9,10,9,10,10,11,11,13,13,15,14,15,18,19,19,20,23,25,26,27,28,27,28,28,28,29,29,29,29,29,29,29,29,30,30,29,30,29,29,29,29,29],[2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,4,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,4,3,4,4,4,3,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,3,3,3,3,3,4,4,5,6,8,9,11,10,10,11,12,11,14,13,18,15,15,19,21,21,22,24,25,26,27,27,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,5,5,8,9,10,11,10,10,12,12,14,14,17,15,16,20,20,21,23,24,24,25,27,27,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,3,2,2,3,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,3,4,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,5,6,8,9,9,10,10,10,11,11,13,12,16,14,13,17,19,19,20,24,24,25,27,28,28,28,29,29,29,30,29,29,30,29,29,29,30,29,29,29,29,29,30,29,29],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,2,2,3,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,6,7,9,9,10,11,11,11,12,13,13,17,15,16,19,20,21,21,24,24,26,27,27,27,27,28,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,29],[2,2,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,3,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,5,6,8,10,11,11,11,12,12,13,15,15,18,16,17,19,21,21,22,26,26,27,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,5,6,8,8,9,10,11,11,12,13,15,15,18,15,18,20,20,21,22,25,25,26,27,28,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,2,2,2,2,1,1,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,4,4,5,6,7,9,9,10,10,11,11,12,14,13,17,14,15,19,18,19,21,24,25,26,28,28,28,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29],[2,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,3,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,7,7,9,10,10,10,10,12,12,14,13,16,14,15,18,19,19,21,24,24,26,27,27,28,27,28,28,28,29,28,29,28,29,28,29,28,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,7,8,10,12,12,11,11,13,13,15,14,18,16,17,19,22,22,23,25,26,27,28,28,28,28,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,30,29,28],[2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,3,3,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,3,4,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,1,2,2,2,3,3,3,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,6,7,8,10,11,12,12,12,12,13,12,15,14,17,16,16,19,20,20,21,24,24,25,26,26,27,27,27,28,28,28,27,28,28,27,27,28,27,28,28,28,28,27,28,27,27],[2,2,2,2,2,3,2,3,2,3,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,2,1,2,2,2,3,3,4,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,3,3,3,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,3,3,3,4,3,3,4,3,4,4,4,4,4,4,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,5,5,4,5,5,5,5,5,5,6,5,5,6,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,5,4,4,4,4,4,4,5,4,5,5,5,6,6,7,9,9,11,13,13,12,13,16,14,15,16,19,17,18,20,22,22,22,24,25,26,27,27,28,28,28,28,29,29,29,29,29,28,29,29,29,29,29,29,29,29,29,28,28],[2,2,1,2,2,3,3,3,3,3,3,3,2,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,3,3,4,4,4,4,4,4,3,2,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,2,2,2,2,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,4,3,3,4,4,4,5,4,4,4,5,4,4,5,5,4,5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,3,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,5,5,4,4,5,5,4,4,4,4,4,4,5,5,5,5,5,6,5,6,6,6,6,7,7,7,7,7,7,7,7,6,6,7,6,5,6,6,6,5,5,6,5,5,5,5,4,5,5,4,4,5,5,5,5,5,6,6,6,6,6,6,7,7,7,8,7,7,7,8,7,7,7,7,6,7,7,7,7,6,7,6,6,6,6,6,6,5,6,6,5,5,6,6,6,5,5,5,5,5,6,6,6,6,6,7,7,8,9,10,12,12,13,13,13,15,15,15,15,18,17,18,20,21,22,23,25,26,27,28,28,28,29,29,29,29,30,30,30,30,29,29,30,30,30,29,30,29,30,29,29,29],[2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,3,3,3,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,6,5,5,5,5,4,4,5,5,5,5,5,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,5,4,4,4,4,4,5,5,5,6,6,7,8,9,10,11,11,12,12,11,12,15,13,16,14,15,17,19,19,20,23,24,26,27,27,27,27,28,28,28,29,28,28,28,28,28,28,28,29,28,29,28,28,29,28,28],[2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,1,1,0,1,1,1,1,1,2,2,3,3,2,3,3,3,3,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,2,2,2,2,2,2,3,3,4,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,5,5,5,6,6,6,6,5,6,6,6,5,5,6,6,5,5,5,4,4,4,5,4,4,4,4,5,4,4,4,5,5,5,5,5,5,5,6,5,5,6,6,6,7,6,6,6,6,6,6,6,5,6,5,6,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,5,4,4,4,4,4,5,5,5,6,6,7,8,10,11,12,12,12,13,13,13,15,14,17,16,15,19,21,21,21,25,25,26,28,28,28,28,29,29,29,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,29],[2,1,1,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,0,1,1,1,2,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,4,4,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,4,4,4,5,5,5,5,5,5,5,6,6,6,5,6,6,6,7,7,6,6,5,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,5,5,5,5,5,6,6,6,6,6,7,6,6,7,6,6,6,7,8,8,7,7,6,7,7,6,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,5,5,6,5,6,5,5,5,5,5,5,5,5,6,6,6,7,7,8,9,10,11,12,12,12,12,13,13,13,12,16,15,15,15,18,19,19,22,22,25,25,26,27,26,27,28,28,29,28,28,29,28,28,29,29,29,29,29,29,29,29,29,28],[1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,1,1,1,0,1,1,1,2,2,2,3,2,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,5,5,5,5,5,5,6,5,5,5,4,5,4,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,4,5,5,6,7,8,10,10,12,12,11,13,13,14,14,16,15,17,17,19,19,20,23,24,25,26,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,29],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,8,9,10,11,11,11,12,12,14,12,16,15,15,17,19,20,20,23,24,26,27,27,28,28,28,28,29,29,29,29,29,29,29,29,30,29,29,30,30,30,30,29,29],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,9,9,10,11,11,10,11,11,14,12,14,13,13,18,17,19,21,23,24,25,27,27,27,27,28,28,29,29,29,29,29,29,29,29,29,30,29,30,30,30,30,29,29],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,1,2,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,5,5,7,9,9,10,10,10,11,11,10,12,12,15,14,13,19,19,19,21,24,24,25,26,27,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,30,29,30,29,29,29],[2,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,2,2,2,1,1,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,3,4,4,4,4,5,6,8,10,10,10,11,11,10,10,10,13,12,15,13,13,18,18,18,20,23,24,25,26,27,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,30,29,30,30,29,29],[2,2,2,2,1,1,1,2,2,2,2,2,2,2,3,2,2,3,2,2,3,3,3,3,2,2,2,2,2,2,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,5,5,5,5,6,5,6,7,6,6,7,6,6,6,7,7,7,7,7,6,6,6,6,6,6,6,6,6,5,6,5,6,5,6,6,5,6,6,5,5,6,6,6,6,5,6,6,6,7,6,7,7,7,7,8,8,7,7,7,7,8,7,6,7,7,7,7,7,6,6,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,4,4,5,4,4,5,4,5,6,6,6,8,10,10,11,11,10,10,10,10,13,12,16,14,13,18,18,18,21,22,24,24,26,26,26,27,28,28,28,28,29,29,29,28,29,29,29,29,29,29,30,30,30,29,29],[3,3,3,2,2,2,1,2,2,3,3,2,3,3,3,2,4,4,3,4,4,4,4,4,4,4,4,3,3,3,2,2,1,1,0,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,1,2,2,2,2,2,2,3,2,2,3,3,3,2,2,2,2,2,3,3,2,2,3,2,2,3,3,2,3,3,4,3,3,4,4,4,3,4,3,3,3,3,3,3,4,3,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,4,4,5,4,5,5,5,4,4,5,5,5,5,5,6,5,6,6,6,7,7,7,8,8,7,8,9,8,8,8,8,8,7,7,8,7,7,7,8,7,6,6,7,7,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,8,8,8,8,8,8,9,8,9,8,9,8,8,9,8,8,8,9,8,8,8,8,7,7,6,7,8,6,6,6,6,5,5,6,6,5,5,5,4,5,5,4,4,5,5,5,5,6,7,7,9,9,11,9,10,11,11,12,12,12,14,13,14,17,16,17,19,21,23,24,25,26,26,27,27,27,28,29,28,29,29,28,29,29,29,30,29,30,30,30,30,30,30],[5,5,5,3,3,2,2,2,2,3,3,3,3,3,4,3,4,4,4,4,4,5,4,5,5,4,4,3,4,4,3,2,2,1,1,0,1,1,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,1,2,2,2,3,3,3,4,4,4,4,5,4,3,3,3,3,3,3,3,2,3,4,3,3,3,3,3,3,3,3,4,4,4,4,5,5,4,4,5,4,4,3,4,4,4,5,5,5,5,4,5,4,4,4,4,4,4,5,5,5,4,5,4,5,5,4,4,5,4,5,4,4,4,5,5,7,5,5,6,5,6,6,5,5,5,6,6,6,5,5,5,6,5,6,5,6,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,6,6,6,5,6,6,5,6,6,6,6,7,7,7,8,7,8,7,7,8,8,8,10,9,8,8,7,7,6,8,7,7,7,8,7,7,7,7,7,8,7,8,8,8,8,8,7,8,8,8,8,8,8,8,8,9,9,8,9,10,9,11,10,9,9,11,10,8,10,9,8,8,10,9,8,9,9,8,8,8,7,8,7,6,8,7,6,7,7,6,6,6,7,5,6,6,5,5,6,5,6,6,7,7,8,10,10,11,10,10,10,11,12,14,13,14,15,13,17,17,18,19,21,22,22,24,25,25,26,27,27,28,28,28,28,28,28,29,29,29,29,29,29,30,29,30,29,29],[5,5,4,3,3,3,3,2,3,3,4,4,4,4,4,3,4,5,5,5,5,5,6,5,4,5,4,4,4,3,4,3,3,2,1,1,0,1,2,2,2,1,2,2,3,2,3,3,3,3,4,2,6,2,2,3,3,3,4,4,4,3,4,6,4,4,4,3,4,4,3,4,3,3,4,4,3,4,4,4,3,4,5,5,4,5,6,6,6,6,5,5,5,5,5,5,5,5,6,6,6,6,5,6,6,5,6,5,6,5,5,6,6,6,6,7,5,6,5,5,5,5,5,5,5,5,5,5,5,6,5,6,5,6,6,7,6,7,6,7,6,7,6,7,6,7,6,7,6,7,7,7,5,6,6,5,6,6,6,7,7,7,7,6,6,7,5,6,7,6,6,7,7,6,6,7,7,6,7,7,7,7,8,7,8,8,8,8,8,8,8,8,9,9,10,8,8,8,7,7,7,8,8,7,8,8,7,7,8,7,7,7,8,7,7,8,8,8,8,8,8,8,8,9,8,8,9,10,8,9,10,9,10,9,10,9,11,10,8,9,10,9,8,9,9,9,8,9,8,9,8,8,9,7,7,8,8,6,7,8,7,6,7,8,6,6,7,7,6,7,7,7,6,7,8,8,10,10,10,11,10,10,10,12,13,11,14,13,12,17,17,17,18,21,23,24,25,26,26,26,27,27,28,29,28,29,29,29,29,29,29,29,29,29,29,30,30,29,30],[7,6,6,5,4,3,3,3,3,3,6,4,4,5,7,5,5,6,6,6,7,7,7,7,6,6,6,5,5,6,5,4,3,2,2,1,1,0,1,1,2,2,2,2,4,3,3,4,4,4,4,3,3,2,3,3,4,3,5,4,5,5,5,6,6,6,8,6,4,4,5,5,5,4,5,5,4,4,5,4,4,4,5,4,5,6,5,6,6,6,7,5,6,6,6,5,6,7,6,7,8,6,7,6,7,6,7,6,6,6,6,6,6,6,6,7,7,8,8,7,8,7,6,6,6,7,5,5,6,8,7,8,8,9,9,8,7,8,7,8,7,7,7,7,7,7,7,7,7,8,7,6,7,8,7,7,9,8,9,8,8,9,7,9,8,8,8,9,8,9,7,9,9,8,7,7,9,7,8,9,8,7,9,9,8,9,8,9,7,7,8,9,7,9,10,10,9,8,7,9,8,8,8,8,8,8,7,8,9,9,9,8,9,9,9,10,9,9,9,9,9,9,9,9,9,10,11,10,10,10,11,11,11,11,11,11,12,11,10,11,9,10,10,10,9,9,9,10,9,9,9,8,9,8,8,10,8,9,8,9,9,9,9,9,8,8,8,7,7,8,8,8,8,9,9,10,11,11,11,12,12,12,12,13,14,13,15,14,13,17,17,18,19,21,23,23,26,26,26,27,28,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30],[5,5,4,4,3,3,3,2,2,2,4,3,2,3,3,3,3,4,4,4,4,5,5,5,5,4,4,4,5,3,3,3,3,2,2,2,1,1,0,1,2,1,1,1,2,2,2,2,3,3,2,3,3,2,3,3,4,4,4,4,4,4,5,5,4,4,4,3,3,4,3,3,3,3,4,4,3,4,4,4,4,5,5,4,5,5,5,4,6,5,5,5,5,5,4,4,4,5,6,5,5,6,5,5,6,6,6,6,5,5,5,6,5,5,6,7,5,6,5,4,4,4,4,3,4,4,3,3,4,5,4,5,4,5,6,6,5,6,6,6,6,6,5,5,6,6,5,6,5,5,5,5,4,5,4,5,5,5,5,5,6,5,6,6,6,5,5,5,5,5,5,5,6,4,4,5,5,5,5,5,5,5,7,5,6,6,5,5,6,6,6,6,6,7,7,7,6,6,6,6,6,5,7,5,5,5,6,5,5,5,6,5,6,6,6,6,7,6,6,7,7,7,7,7,7,7,7,7,7,8,7,8,9,8,8,8,8,8,7,8,7,7,7,8,6,6,7,7,6,6,6,6,7,5,6,6,6,5,6,7,6,6,6,7,5,6,6,6,6,6,7,6,6,7,7,8,10,10,11,11,11,10,10,9,12,13,15,14,13,18,18,18,19,23,24,24,27,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,30,30,30,30,29,29],[3,3,3,3,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,2,2,4,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,4,3,4,3,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,4,4,4,4,4,4,4,5,4,5,4,5,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,3,4,3,3,3,4,3,3,3,4,4,4,4,5,4,5,5,4,4,5,4,4,4,5,5,4,4,4,4,4,4,4,5,4,6,6,5,7,6,5,5,5,6,6,5,7,8,8,6,5,5,6,5,5,6,6,5,5,6,5,6,5,5,5,6,5,5,5,6,5,5,6,5,6,6,6,6,7,6,7,7,8,7,7,8,7,8,8,8,7,6,8,8,7,7,8,6,6,6,7,6,6,6,5,6,5,5,5,6,5,5,5,5,5,4,5,4,4,5,5,5,5,6,6,6,6,7,8,9,10,10,10,11,11,11,10,12,14,15,15,14,18,18,17,18,21,23,24,26,26,27,27,28,28,29,29,29,29,29,28,28,29,29,29,29,30,29,30,30,29,30],[3,2,2,2,2,2,2,1,2,1,2,2,1,2,2,1,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,1,2,1,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,3,3,4,4,3,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,4,3,3,4,3,3,4,5,4,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,4,5,4,4,5,5,4,5,5,4,4,5,6,5,5,5,5,5,5,5,5,5,6,6,6,6,6,7,6,6,6,7,6,6,7,6,7,7,6,7,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,5,5,5,5,6,6,8,10,10,11,12,12,12,12,10,13,14,17,16,15,20,20,20,21,24,25,26,27,27,28,28,29,29,29,30,29,30,29,29,29,29,30,30,29,30,29,30,30,29,29],[2,2,2,2,2,2,1,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,1,1,2,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,3,3,3,4,4,3,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,6,5,5,5,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,4,4,4,4,5,5,6,8,9,9,10,11,11,10,10,11,13,13,16,14,14,19,18,20,21,23,24,25,27,28,28,28,29,29,29,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30],[3,3,2,2,2,2,2,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,1,2,2,2,2,1,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,3,3,3,2,2,2,2,2,2,3,3,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,5,4,4,5,4,4,5,5,5,5,5,5,5,5,6,6,5,5,5,6,6,5,6,6,6,6,7,7,7,7,6,6,6,6,6,5,6,5,5,5,5,5,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,6,7,9,9,10,10,11,10,10,10,13,12,16,14,13,17,18,18,18,21,23,25,27,27,27,28,28,28,29,30,29,29,29,29,29,29,29,30,29,30,30,30,30,30,29],[2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,1,1,1,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,5,5,5,5,5,5,5,6,5,6,5,6,5,6,6,5,6,6,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,3,3,4,4,4,4,5,5,5,6,7,10,10,11,10,11,12,11,12,14,14,17,15,15,18,19,18,19,22,23,25,26,26,27,27,28,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,29],[2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,7,8,9,11,11,10,10,12,11,14,14,16,15,16,19,19,20,21,23,25,26,27,28,28,28,28,28,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29],[2,2,2,2,2,2,2,1,1,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,6,6,6,6,7,6,6,6,6,5,6,6,6,5,6,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4,3,3,4,4,4,4,5,6,6,7,8,10,10,10,11,11,10,10,12,11,15,12,13,16,17,18,18,22,23,24,26,26,27,27,28,28,29,29,29,29,29,29,29,29,29,30,29,30,30,30,30,29,29],[3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,6,5,5,5,4,5,5,5,5,5,5,5,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,5,6,5,6,6,5,6,6,6,6,7,7,6,6,7,6,6,6,6,5,6,6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,4,4,5,4,4,4,4,4,5,5,5,5,6,6,8,9,9,11,10,11,12,11,11,12,12,15,14,13,15,18,18,18,21,22,23,25,25,26,26,27,28,28,29,28,29,28,28,28,28,29,29,29,29,28,29,29,28,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,6,5,6,6,6,6,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,7,6,7,7,7,7,6,6,6,7,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,6,6,6,7,9,9,10,12,12,11,12,12,13,14,14,16,15,15,17,18,19,19,22,23,24,26,26,27,28,28,28,29,29,29,29,29,29,29,29,30,29,29,29,29,29,30,29,28],[2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,2,3,3,2,2,2,2,3,3,3,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,4,3,4,3,4,4,3,3,3,4,3,3,4,3,3,3,3,3,2,2,3,3,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,5,5,4,4,4,4,4,4,5,5,4,4,5,5,4,5,5,5,4,5,5,5,5,5,6,6,5,5,5,6,6,5,6,7,6,6,7,6,7,7,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,5,5,5,5,5,6,6,7,8,9,11,11,12,12,11,12,12,14,13,15,14,14,16,17,18,19,22,22,24,25,25,26,26,27,27,28,28,28,28,28,28,28,28,28,28,28,29,28,29,28,28,27],[2,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,5,5,6,7,9,9,11,11,11,11,12,11,14,12,15,14,14,18,19,19,19,23,24,26,27,27,28,28,29,29,29,29,29,29,30,29,29,29,30,30,30,30,30,29,30,29,29],[2,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,1,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,3,3,2,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,4,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,3,4,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,4,4,4,4,5,5,6,8,9,9,10,11,10,10,11,14,11,14,13,12,16,16,18,17,20,20,23,25,24,26,26,27,27,28,28,28,28,29,28,28,28,29,29,29,29,29,29,29,29,28],[2,2,2,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,5,5,5,6,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,5,5,5,5,5,5,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,3,4,4,4,4,4,5,5,6,7,9,10,11,11,11,10,11,11,13,13,15,14,14,18,19,19,19,22,23,24,25,26,26,26,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,29],[2,2,2,1,1,1,1,1,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,2,3,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,3,2,2,3,2,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,4,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,4,4,4,4,5,5,6,7,10,10,11,11,11,11,11,11,13,13,14,13,13,17,18,17,18,21,22,25,26,26,26,26,27,27,28,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,28],[2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,4,4,3,4,4,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,6,6,6,5,5,5,6,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,6,6,6,6,6,5,5,6,6,5,6,6,6,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,6,7,10,9,10,10,11,10,9,10,11,12,13,12,12,16,17,17,18,20,22,24,26,25,25,26,26,27,28,28,28,28,28,28,29,29,29,29,29,29,30,30,30,30,29],[2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,3,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,6,6,6,6,6,6,5,6,6,5,6,6,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,3,4,4,4,4,4,4,4,5,6,7,10,11,10,11,11,10,10,11,13,12,13,13,11,15,16,17,17,19,21,23,24,24,25,25,27,26,28,28,28,28,29,28,28,29,29,29,29,29,30,30,30,30,29],[2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,5,5,5,5,5,5,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,5,6,7,9,9,11,10,9,8,10,10,12,10,13,13,11,14,16,17,18,19,23,24,26,27,27,27,28,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30],[2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,3,4,4,4,5,7,8,10,10,11,10,10,10,11,13,11,14,12,12,17,16,17,16,20,23,24,25,26,26,26,27,27,28,29,29,29,29,28,29,29,29,30,29,30,30,30,30,30,29],[2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,5,5,4,4,4,4,4,4,4,4,4,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,6,6,9,9,9,10,11,10,10,11,14,12,15,13,12,17,17,18,20,22,23,24,25,25,26,25,27,27,27,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29],[1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,4,5,6,8,10,10,11,9,10,11,10,12,12,15,13,12,18,18,18,20,22,23,24,26,27,27,27,28,28,28,29,29,29,29,29,29,29,30,29,29,30,30,30,30,29,29],[1,1,1,1,1,1,1,1,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,5,5,8,9,11,11,12,11,11,11,12,14,13,17,13,13,19,19,19,21,23,25,25,27,27,28,28,28,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,29,29],[1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5,5,6,6,6,5,6,5,5,6,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,6,8,9,10,10,12,10,11,13,15,12,16,14,14,18,17,18,20,22,23,24,26,25,26,25,28,27,27,28,28,28,29,28,28,29,29,29,29,29,29,29,29,29,29],[1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,2,1,1,1,2,2,2,2,2,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,4,4,4,4,4,5,6,6,9,9,10,11,11,12,12,12,16,13,16,14,13,18,18,18,20,23,23,24,26,26,26,26,27,27,28,28,28,29,29,28,28,29,29,29,29,29,29,29,29,29,28],[1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,2,1,1,1,1,1,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,5,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,4,3,4,4,4,5,5,6,8,11,11,12,12,14,12,13,13,16,14,16,15,14,19,18,19,20,23,23,25,26,27,27,28,28,28,29,29,29,29,29,29,29,30,30,29,30,30,30,30,30,29,29],[1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,5,5,6,6,6,5,5,5,5,5,5,4,5,5,4,5,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,6,7,8,10,11,11,12,12,14,14,15,14,16,15,15,17,19,20,21,22,23,24,26,26,26,27,27,27,28,29,28,29,28,28,28,29,29,29,29,29,29,29,29,28,29],[1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,1,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,5,6,8,9,10,10,11,12,13,13,15,15,17,15,16,18,20,20,21,23,24,24,26,26,26,27,27,27,28,28,28,29,28,28,28,29,29,29,29,29,29,29,29,29,29],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,5,4,4,4,3,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,5,7,9,11,12,12,10,9,12,12,14,13,15,13,13,18,18,19,21,24,25,25,27,28,27,28,28,28,29,29,29,29,29,29,29,29,30,29,29,30,29,30,29,29,29],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,6,7,9,11,10,9,10,12,11,13,14,16,15,14,20,19,19,21,23,24,24,26,26,26,27,28,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,5,5,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,5,6,8,8,8,9,8,9,10,10,13,12,14,13,15,19,19,19,21,25,24,25,26,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,5,5,5,6,5,5,5,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,5,6,5,5,6,6,7,6,6,7,7,7,6,6,6,6,5,5,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,5,6,7,8,9,11,11,9,11,12,11,13,13,16,14,16,20,19,19,19,22,23,23,25,25,25,26,27,27,27,28,28,28,28,28,28,28,29,28,28,29,29,29,29,29,27],[2,2,2,1,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,4,5,5,6,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,5,5,5,5,5,5,6,5,6,6,6,6,6,5,5,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,4,5,6,10,8,8,9,12,9,10,11,13,13,15,14,15,19,19,20,21,25,25,26,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[3,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,5,4,5,5,5,4,5,5,5,6,6,5,6,6,6,6,9,7,7,6,6,6,6,8,6,5,6,6,5,5,5,4,5,5,4,4,4,4,4,4,4,3,4,3,3,3,2,2,2,3,2,2,3,3,3,3,5,5,6,9,8,9,8,10,10,10,10,13,14,15,14,15,19,20,19,20,22,24,25,26,26,26,26,27,28,28,29,29,29,29,27,28,29,29,29,29,29,29,29,29,29,29],[3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,2,2,2,2,3,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,2,2,2,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,5,5,4,5,6,6,6,6,6,6,6,5,5,5,5,4,4,5,5,4,4,5,4,4,5,5,5,4,5,5,5,4,5,5,6,5,6,6,5,6,6,6,6,6,6,7,8,7,7,7,6,6,6,7,6,6,6,5,5,5,5,5,4,5,4,4,4,4,4,4,3,4,3,3,3,3,3,2,2,2,3,3,3,3,3,3,4,5,7,9,9,9,9,9,11,10,10,15,13,15,15,15,20,20,19,21,24,24,25,27,27,27,27,28,28,28,29,29,29,30,29,29,30,30,30,29,30,30,30,30,30,29],[3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,4,4,3,3,4,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,2,3,3,3,3,2,3,2,2,2,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,4,4,5,5,5,5,5,5,6,6,6,6,5,6,6,5,5,6,5,5,5,5,5,4,4,5,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,6,5,5,5,6,6,6,7,7,7,6,6,6,5,6,6,6,5,6,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,3,4,5,6,8,11,9,8,8,9,8,9,10,12,13,15,15,15,19,19,20,23,23,25,25,26,27,27,27,28,28,28,29,28,29,29,28,28,29,29,30,29,29,30,29,30,29,29],[3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,1,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,5,5,5,5,5,5,5,7,6,6,6,6,5,5,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,4,5,6,9,8,9,8,10,9,10,10,13,14,16,14,15,19,19,19,22,24,25,26,27,27,27,27,28,28,29,29,29,29,29,28,28,29,29,30,29,29,29,29,29,29,29],[2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,5,5,5,5,5,5,5,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,3,3,3,3,4,5,6,8,8,9,8,9,10,9,9,15,14,15,13,14,20,19,19,21,25,25,25,27,26,27,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,2,2,1,1,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,3,2,2,2,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,3,3,3,4,4,6,6,8,8,8,10,9,10,10,11,15,13,16,14,15,20,20,20,23,23,25,25,26,26,26,27,27,27,28,29,28,29,29,28,28,29,29,29,29,29,30,30,29,29,29],[2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,3,2,2,3,3,2,2,3,3,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,3,3,3,3,4,4,6,9,7,8,8,10,8,9,11,13,13,16,13,15,18,18,18,20,20,24,24,25,26,25,26,26,26,27,28,27,28,28,27,27,29,28,29,28,29,29,29,29,29,29],[2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,3,2,2,3,3,2,3,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,5,5,5,5,6,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,4,4,4,5,4,4,4,5,4,5,4,5,5,5,5,5,5,5,5,5,7,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,4,5,6,9,8,9,9,8,8,10,10,14,13,16,14,15,18,19,19,21,22,25,25,27,27,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,5,5,4,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,4,5,6,8,8,10,9,9,10,10,10,14,13,16,13,14,21,19,19,22,24,25,25,27,27,27,27,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,29],[2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,2,3,3,3,3,2,2,2,2,2,2,1,1,2,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,4,5,6,8,8,9,10,9,9,11,12,13,13,15,12,14,19,17,18,20,20,23,24,25,26,26,26,27,27,28,28,28,28,28,28,28,29,29,29,29,29,30,29,29,29,29],[2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,3,3,3,2,2,3,3,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,5,4,5,5,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,5,7,8,9,9,10,9,8,10,11,14,13,15,14,14,17,17,18,20,20,23,24,25,26,26,26,27,27,27,28,28,28,28,28,28,29,29,29,29,29,29,30,30,29,29],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,2,3,3,3,2,3,2,2,2,2,2,1,1,2,1,1,1,2,2,2,2,1,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,4,5,5,5,4,5,5,4,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,6,6,5,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,5,5,8,9,9,10,10,10,9,11,11,13,12,15,14,13,19,18,18,20,22,24,24,25,26,27,27,28,27,28,28,28,29,29,29,29,29,29,29,29,30,29,30,30,29,29],[2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,6,5,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,6,5,6,6,6,6,6,7,7,7,6,6,6,6,6,6,5,6,6,5,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,6,7,10,10,11,12,10,10,11,12,13,13,16,15,14,20,19,19,22,24,25,25,27,27,27,27,28,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,29],[2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,6,6,6,5,5,5,6,6,6,6,6,6,6,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,4,3,3,4,4,6,7,8,10,10,11,11,10,11,13,14,13,16,13,15,18,17,18,21,22,22,23,24,25,25,25,27,26,27,28,28,28,28,27,28,29,28,29,29,29,29,29,29,29,29],[2,2,2,1,1,1,2,2,2,2,2,2,2,3,2,2,3,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,7,8,10,11,12,12,11,12,13,14,13,16,14,14,20,18,19,20,22,23,25,25,26,27,26,27,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,27],[2,2,1,1,1,1,2,2,2,3,2,2,2,2,2,2,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,4,5,5,5,5,5,5,5,6,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,5,5,9,9,12,12,13,12,11,13,14,15,14,18,15,15,20,19,20,22,24,24,25,26,27,27,28,28,28,29,29,29,29,29,29,29,30,30,29,30,30,30,30,30,29,29],[2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,5,6,7,6,6,6,6,6,5,6,5,6,6,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,4,3,3,4,4,4,4,4,4,6,6,9,9,10,10,12,12,12,13,15,12,15,15,15,16,17,19,20,21,22,24,24,25,26,26,27,27,27,28,28,28,28,28,28,29,28,28,29,29,28,29,28,27,27],[2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,2,2,2,2,2,3,3,3,3,4,4,4,3,3,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,2,2,1,1,1,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,4,5,5,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,6,6,7,7,6,6,6,6,6,6,5,5,6,6,5,5,6,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,6,7,9,10,11,12,13,12,13,15,17,15,17,15,16,18,19,20,20,21,22,23,25,26,26,26,27,27,28,29,29,29,28,29,28,29,29,29,29,29,29,29,29,28,28],[2,1,1,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,3,3,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,4,3,3,4,4,4,4,5,7,7,9,10,11,11,12,13,13,14,16,15,18,15,17,19,20,20,22,23,23,24,26,26,27,27,27,28,28,29,28,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,1,1,2,2,1,1,2,2,1,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,5,5,4,4,4,4,4,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,3,3,2,3,3,3,3,4,5,7,9,10,11,11,13,12,13,14,17,14,17,15,15,19,19,20,22,25,26,26,28,28,28,29,29,29,29,30,30,30,29,30,29,30,30,29,30,30,30,30,30,29,29],[1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,4,4,3,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,5,6,9,9,10,11,12,12,13,14,16,15,18,15,16,19,21,20,22,23,24,25,26,26,26,27,27,28,28,29,29,29,28,28,28,29,29,29,29,29,29,29,29,29,29],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,8,8,11,11,12,9,9,12,12,14,13,16,14,14,19,19,20,21,25,25,25,27,28,28,28,28,29,29,29,29,30,29,30,29,30,30,29,30,30,30,30,30,29,29],[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,5,5,5,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,7,8,10,11,11,10,10,12,12,16,14,17,15,16,19,21,20,22,24,24,25,26,26,26,27,27,27,28,28,28,29,29,28,28,29,29,29,29,29,29,29,29,29,29],[2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,1,2,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,3,4,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,4,3,3,3,4,4,3,4,4,4,4,4,5,5,5,4,4,4,4,4,3,4,4,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,6,9,9,10,11,10,11,10,11,14,14,17,16,15,21,21,21,22,26,25,26,27,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,29,30,30,30,30,29,29],[2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,5,4,4,4,5,5,4,5,6,5,5,6,6,6,6,6,5,5,6,5,4,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,4,6,7,9,10,12,10,10,11,11,11,14,16,18,16,16,21,20,20,21,23,23,24,25,26,26,27,27,27,28,28,28,29,29,28,28,29,29,29,28,29,29,29,29,29,28],[3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,1,1,2,2,2,1,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,2,3,2,2,2,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,1,1,2,2,2,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,4,4,4,5,5,5,6,5,5,6,6,6,7,7,6,7,7,6,6,5,6,6,6,5,5,6,5,5,5,5,4,4,5,5,4,4,5,4,4,4,5,5,6,5,5,5,6,6,6,6,6,7,6,6,7,7,6,7,7,6,7,7,5,7,6,5,5,5,5,4,5,4,4,4,4,3,4,4,4,3,3,2,2,2,3,3,2,2,2,2,3,3,3,4,4,6,7,10,10,11,11,11,11,12,12,15,15,18,15,17,21,22,21,22,26,25,26,28,28,28,28,29,29,29,29,30,29,30,29,29,30,30,29,29,30,30,30,30,29,28],[4,4,3,3,2,2,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,3,3,3,3,4,4,4,3,4,4,3,3,4,3,3,3,2,2,2,2,2,1,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,2,1,1,1,0,1,1,1,2,2,2,3,2,2,3,3,3,4,4,4,3,4,3,3,2,2,2,2,2,2,2,2,3,3,3,4,4,4,3,3,3,3,3,3,3,2,3,3,4,4,4,4,4,3,4,4,3,3,3,3,3,3,4,3,3,4,4,4,3,3,3,3,2,3,2,2,3,3,2,3,4,3,3,2,4,4,4,4,5,4,6,6,6,6,6,6,6,6,6,7,7,9,9,9,8,7,6,6,7,7,6,6,7,6,5,6,6,7,6,6,6,7,6,6,6,6,6,6,6,7,6,7,6,7,7,8,7,8,8,8,7,9,9,7,8,9,7,9,8,8,8,8,6,6,6,5,5,6,6,5,5,7,6,6,5,4,3,4,3,3,3,3,2,2,2,4,2,2,3,3,3,4,6,7,10,9,12,11,12,12,13,13,16,15,18,16,16,22,22,22,23,24,25,26,27,27,27,27,28,28,28,29,29,29,29,28,29,29,29,29,29,29,29,29,29,29,28],[4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,5,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,3,3,3,3,4,3,2,2,2,1,1,1,0,1,1,2,2,1,1,3,2,2,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,4,3,4,4,4,5,4,3,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,2,2,4,2,2,3,3,2,3,4,4,3,3,3,4,5,4,5,5,6,5,5,5,5,5,5,6,7,8,8,8,9,8,7,6,5,5,7,6,5,5,6,5,4,5,6,5,4,6,5,5,4,6,6,6,5,6,6,7,6,6,6,7,6,7,8,8,9,9,8,10,10,8,6,8,8,10,8,8,8,8,6,6,8,6,5,5,5,5,6,5,6,6,5,4,4,5,3,3,3,3,2,2,4,4,2,3,4,3,4,5,5,8,11,10,12,11,12,12,13,12,15,15,18,17,17,22,23,22,23,25,26,26,27,28,28,28,29,28,29,30,29,30,29,29,29,30,30,30,30,30,30,30,30,30,29],[3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,2,2,2,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,6,8,8,9,10,11,10,12,13,16,15,19,16,17,22,22,22,23,26,26,27,28,28,28,28,29,29,29,30,29,29,30,29,29,30,30,29,29,30,30,30,30,30,29],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,4,3,3,4,3,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,5,6,8,8,11,11,10,9,11,11,14,14,17,16,17,20,21,21,23,25,25,26,28,27,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,29,30,30,29,29],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,6,8,9,11,12,9,8,12,12,14,14,18,16,17,21,22,22,23,25,25,26,27,27,27,28,28,28,29,29,29,29,29,29,29,29,29,30,29,30,30,30,30,29,29],[2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,2,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,3,3,2,3,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,5,4,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,3,4,4,4,4,5,5,5,5,5,4,4,5,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,4,6,9,9,11,13,10,9,14,15,16,15,19,17,17,20,21,20,21,24,24,25,26,26,26,27,27,27,28,29,28,29,29,29,28,29,29,29,29,29,29,29,29,28,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,2,2,2,3,2,2,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4,3,3,3,3,3,3,3,4,4,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,5,6,8,8,10,10,9,10,11,11,15,13,17,15,16,21,21,21,23,25,26,27,27,27,28,28,29,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,29,29],[2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,5,5,7,8,10,10,9,10,11,10,14,13,16,15,15,20,21,21,22,26,25,26,27,28,28,28,28,28,29,29,29,29,29,29,29,29,30,29,29,30,29,30,29,29,29],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,4,3,3,4,4,4,4,5,5,5,4,4,4,4,4,4,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,5,6,8,10,11,11,9,8,13,13,14,13,17,17,17,19,21,22,22,24,25,26,27,28,27,27,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,29,29],[3,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,5,6,5,5,5,5,4,5,5,4,5,5,4,4,4,4,4,4,3,3,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,3,3,3,3,5,6,8,8,9,12,9,10,12,13,16,14,17,16,17,19,20,20,22,25,25,25,27,27,27,27,28,28,29,29,28,29,29,29,28,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,1,2,1,2,2,2,2,2,1,2,1,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,5,4,4,4,4,5,4,4,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,2,3,2,3,3,3,3,4,5,6,8,8,9,9,8,10,10,10,13,12,18,15,16,21,20,22,23,24,26,26,27,28,27,27,28,27,29,29,29,29,29,29,29,29,30,30,30,30,29,30,30,29,29],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,5,6,9,9,11,11,9,11,11,12,15,13,17,15,15,21,20,21,22,26,26,26,27,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,29,29],[3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,2,1,1,1,2,2,2,2,3,3,3,3,3,3,4,3,4,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,5,5,4,4,5,5,4,4,4,4,4,5,5,6,5,4,5,5,5,5,5,5,6,6,5,7,7,7,6,7,5,6,6,5,5,6,6,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,6,7,9,10,12,12,11,11,13,13,15,14,17,16,16,18,19,20,21,24,25,25,27,27,27,28,28,28,29,29,29,29,29,29,29,29,30,30,29,30,29,29,29,29,28],[4,4,3,3,3,3,3,4,4,4,3,3,4,4,3,4,4,4,4,5,4,4,5,5,4,5,4,4,4,4,4,3,3,3,4,4,4,5,4,5,4,4,5,4,4,5,5,5,5,4,5,4,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,3,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,0,1,1,2,2,1,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,5,6,5,6,6,6,6,7,6,6,7,7,7,7,8,7,8,7,7,6,7,7,6,6,6,6,6,6,6,6,6,6,5,5,6,5,5,5,6,6,6,6,6,6,7,6,6,7,7,7,7,8,8,8,8,8,7,7,7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,5,5,5,4,4,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,6,7,10,10,10,12,12,12,13,14,16,14,17,16,16,19,19,20,21,23,25,25,26,27,26,26,28,27,28,29,28,29,29,28,28,29,29,29,29,29,29,29,29,29,28],[3,3,3,2,2,2,3,3,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,3,2,3,2,2,2,2,3,3,4,2,2,2,2,2,2,2,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,3,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,4,4,4,4,3,4,3,3,3,2,2,2,2,3,3,3,2,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,7,8,6,7,7,6,6,6,6,6,6,6,6,6,6,6,5,6,6,6,6,6,5,6,6,6,7,6,6,6,6,6,6,6,6,6,7,7,8,8,8,7,7,6,7,7,7,6,7,7,6,6,6,6,6,6,6,5,6,5,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,4,4,3,4,4,6,8,9,11,11,12,12,11,13,13,16,14,17,15,15,19,18,21,22,22,24,25,25,26,26,25,27,26,27,28,28,28,29,28,29,29,29,29,29,29,29,29,29,28,28],[4,4,4,3,4,3,4,5,5,6,5,5,6,6,5,5,6,6,5,6,6,6,7,6,5,6,5,5,5,4,4,4,5,4,5,5,5,6,6,6,6,6,6,6,5,6,6,7,7,5,5,5,5,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,5,4,4,3,3,3,2,2,2,2,2,1,1,1,0,1,1,2,2,3,3,3,4,4,4,5,6,6,6,6,7,6,7,6,6,5,5,5,4,3,3,3,2,3,3,3,3,4,3,4,4,4,4,5,5,5,6,6,6,6,6,5,5,5,5,5,4,5,5,5,5,6,5,6,6,6,6,6,6,6,7,7,8,7,7,8,8,8,8,9,8,8,8,9,9,9,9,9,10,9,9,9,8,9,8,8,9,8,8,8,9,9,8,8,9,9,8,8,9,8,7,8,9,8,9,7,9,8,9,8,8,9,9,9,8,10,11,10,10,10,10,9,9,10,9,9,9,8,9,9,8,8,8,9,8,8,7,7,7,7,7,7,7,6,6,7,6,5,6,6,5,5,6,5,5,5,7,7,10,10,12,13,13,14,13,14,15,16,15,17,17,16,19,19,21,21,23,24,25,26,26,27,26,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[6,5,6,4,6,6,5,7,6,8,6,6,7,7,6,6,7,7,6,8,8,8,8,7,7,7,7,6,7,6,6,6,6,6,6,7,7,8,8,8,8,7,8,8,7,8,8,8,8,7,7,6,6,6,4,5,3,4,4,4,4,4,5,4,4,4,4,5,6,6,5,5,5,5,4,4,4,4,3,3,3,3,2,2,3,2,2,2,4,3,3,3,4,4,5,5,5,5,4,4,3,3,3,3,2,2,3,2,2,2,1,1,0,1,1,2,2,3,4,5,5,5,6,7,7,6,8,8,7,7,7,6,5,5,5,3,3,2,2,2,2,3,3,4,4,3,5,5,4,5,6,6,6,7,8,7,7,7,6,5,6,5,5,4,6,5,6,6,6,6,6,7,6,7,7,7,7,8,8,8,8,9,8,9,9,9,9,9,9,9,10,9,10,10,10,11,10,11,9,9,9,10,10,9,10,9,10,10,9,9,8,9,9,8,9,9,8,7,8,9,8,9,8,9,8,9,9,9,9,10,10,9,11,12,11,10,11,10,10,11,10,9,10,10,9,9,10,9,8,9,8,8,9,8,7,8,8,7,7,8,8,7,7,7,6,6,6,6,6,6,6,6,6,7,8,10,12,12,13,14,14,14,15,16,16,15,18,18,18,18,20,21,21,22,23,23,26,26,26,26,27,27,28,28,28,28,28,28,28,29,29,29,28,29,29,29,29,29,28],[2,3,2,2,3,3,3,4,4,4,3,3,4,3,3,3,4,3,3,4,4,4,3,3,3,4,4,4,3,3,3,3,4,4,4,4,5,5,5,5,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,0,1,1,1,2,2,2,2,3,3,3,4,3,4,4,3,4,3,3,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,7,7,7,6,7,6,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,5,6,5,6,6,6,7,6,7,8,7,7,7,6,6,7,6,6,6,7,6,6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,5,4,5,6,7,9,11,11,13,12,13,14,14,14,16,16,19,16,18,19,21,21,21,23,24,24,26,26,26,26,27,27,28,28,28,28,29,29,28,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,3,3,3,3,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,4,4,4,4,4,4,5,4,5,5,5,5,5,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,6,9,9,11,12,12,12,12,14,15,16,15,17,15,16,20,20,21,22,25,26,26,28,28,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,3,2,3,3,3,4,4,5,7,9,10,11,11,12,12,13,14,17,17,19,16,16,21,22,22,23,25,25,25,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,30,30,29,30,30,29,29],[2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,2,1,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,3,4,4,3,3,3,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,7,8,10,11,11,10,9,12,13,15,13,18,15,15,20,20,21,22,25,25,26,28,28,28,29,28,29,29,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,29],[2,1,1,1,1,1,1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,2,1,2,2,1,2,2,1,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,6,9,9,10,10,11,12,12,13,14,15,19,16,16,20,22,21,22,25,25,25,26,27,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,0,1,1,1,1,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,5,9,10,12,12,9,9,12,12,15,14,18,16,16,20,21,22,23,25,25,26,27,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,30,30,29,30,30,29,29],[3,3,3,3,3,3,4,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,3,4,4,4,4,4,4,3,3,4,3,3,3,4,3,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,1,1,1,2,2,2,2,2,1,2,2,2,2,2,3,2,2,3,3,3,3,3,2,2,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,4,5,5,5,4,4,5,4,4,4,4,3,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,5,5,4,5,5,5,5,6,7,6,6,6,6,6,6,5,5,5,5,4,5,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,3,3,3,4,4,4,5,6,8,9,11,12,13,11,12,14,14,16,15,19,16,18,20,22,21,22,24,25,25,26,26,26,27,28,28,28,28,28,28,28,28,28,28,29,28,29,29,29,29,29,29,27],[3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,2,1,1,1,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,4,4,4,4,3,4,3,3,4,4,3,3,3,3,3,3,3,3,4,2,2,2,2,2,2,2,3,2,2,2,3,2,3,3,3,3,4,5,6,10,10,12,13,11,11,14,14,17,16,19,18,19,22,22,23,23,25,26,27,27,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,2,2,3,3,3,3,3,3,3,2,2,2,3,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,2,2,3,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,3,3,3,3,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,1,1,2,1,2,1,1,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,6,8,9,11,12,10,11,14,14,15,16,19,17,19,22,21,22,23,25,25,26,27,28,27,28,28,28,28,29,29,29,29,28,29,28,29,29,29,28,28,28,28,28,28],[3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,2,2,3,3,2,2,2,2,3,2,2,3,3,3,3,4,4,6,8,9,11,10,10,11,13,12,14,15,19,17,17,21,21,22,23,24,26,26,27,27,28,28,28,28,28,29,29,29,29,29,29,28,29,29,29,28,28,28,29,29,29],[3,3,3,2,3,3,3,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,4,5,5,5,5,4,4,4,4,4,3,3,3,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,5,7,8,10,9,10,10,11,12,15,14,17,16,15,19,20,21,22,25,26,26,27,27,28,28,28,29,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,6,8,9,10,10,10,11,12,13,14,16,18,16,18,21,21,22,24,26,26,27,28,28,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,2,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,6,8,9,10,11,10,11,12,13,14,15,18,16,18,21,21,22,24,25,26,26,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28],[2,2,2,2,3,3,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,4,4,5,6,8,10,10,10,10,11,12,12,15,14,18,16,15,19,21,22,23,25,26,26,27,28,28,28,29,29,29,30,30,30,29,29,28,29,30,30,29,29,30,29,30,29,29],[2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,5,6,8,9,9,10,10,10,11,12,14,14,17,15,16,19,20,20,21,24,25,25,27,26,27,27,28,28,28,29,29,29,28,28,28,28,28,29,28,29,29,29,29,28,27],[2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,5,6,7,9,10,11,10,10,12,13,15,13,17,16,16,19,20,20,21,25,25,27,28,28,28,28,29,29,29,30,30,30,29,29,29,29,29,30,30,29,29,29,30,29,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,5,6,7,10,10,12,10,11,13,13,15,15,18,17,17,20,23,23,23,27,26,27,28,28,28,28,28,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,28,27],[2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,5,6,8,10,10,11,11,12,14,14,16,16,19,18,19,21,23,23,25,27,27,28,28,29,29,29,29,29,29,30,29,30,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,5,9,9,11,11,11,12,14,14,17,17,19,17,19,22,23,24,25,26,26,27,28,28,28,29,29,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,28,28],[2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,6,9,10,11,12,12,12,13,14,17,17,19,18,19,22,23,24,25,26,27,27,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,0,1,1,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,6,9,9,11,11,11,12,12,14,16,17,19,16,17,21,22,22,24,25,25,26,27,27,27,28,28,28,28,29,29,29,28,29,28,28,29,29,29,29,28,29,28,28,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,5,6,10,10,11,11,11,12,13,14,15,15,18,16,16,21,21,21,24,25,25,27,27,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,3,2,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,7,10,10,11,12,10,11,12,13,15,16,20,16,17,22,22,22,23,25,26,26,27,27,28,28,28,28,28,29,29,29,28,29,29,29,29,29,29,29,29,29,29,28,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,3,2,3,3,3,3,4,6,7,10,10,11,11,12,11,13,14,15,16,20,18,17,21,23,22,24,25,26,27,28,28,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29],[2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,2,3,3,2,3,3,3,3,2,2,3,3,3,3,2,2,2,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,3,3,2,2,2,3,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,5,4,4,5,6,5,5,5,4,4,5,4,4,5,4,4,4,5,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,6,10,11,12,13,13,10,10,13,14,14,15,19,18,17,20,22,23,24,25,26,27,28,28,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29],[3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,0,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,5,5,5,5,5,6,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,6,6,5,6,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,4,4,6,8,10,11,12,12,11,11,13,13,14,15,20,17,17,20,22,22,23,24,25,26,27,27,27,27,28,28,28,29,28,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,1,2,2,2,2,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,4,6,8,11,11,12,11,11,11,12,13,16,16,20,17,18,20,22,22,23,25,26,26,27,27,27,27,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28],[2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,6,8,10,11,11,12,12,12,13,14,16,15,19,18,18,22,23,23,24,26,26,27,28,28,29,29,29,29,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,29,29],[3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,3,3,4,4,3,3,3,3,3,4,3,3,4,3,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,3,3,3,4,4,4,4,4,4,3,3,3,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,6,5,5,5,5,5,5,6,6,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,7,7,10,11,12,13,13,12,13,14,16,14,18,18,18,19,21,23,23,24,25,26,27,28,27,27,28,28,29,29,28,29,29,28,28,29,29,29,29,29,29,29,28,28,28],[2,2,2,2,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,3,3,3,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,2,2,3,3,2,3,3,3,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,6,6,5,5,5,5,5,4,4,5,4,4,4,4,4,3,4,4,4,3,4,4,4,5,5,4,5,4,5,5,5,5,6,6,6,6,6,6,5,6,6,5,5,6,6,5,6,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,6,7,8,11,12,13,14,13,13,15,15,16,16,20,18,19,19,23,24,25,25,26,27,27,28,27,27,28,28,29,29,28,29,28,28,28,29,29,29,28,29,29,29,29,28,29],[2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,2,2,2,2,3,3,3,3,2,2,3,3,3,2,3,3,2,3,3,3,3,2,2,2,2,2,1,2,2,2,2,2,3,3,2,3,3,2,3,2,2,2,2,2,2,1,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,5,5,5,5,4,4,5,5,4,4,5,4,4,4,4,4,3,4,4,3,3,3,4,4,4,5,4,5,5,5,5,5,5,5,6,6,6,5,6,5,5,6,5,5,6,6,5,6,5,5,5,5,5,4,5,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,4,4,5,5,5,6,7,8,10,12,13,14,14,12,14,15,16,15,18,18,18,18,22,23,24,24,26,27,27,28,28,28,28,29,29,30,29,30,29,28,28,29,29,29,29,30,29,30,29,29,29],[2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,3,3,3,3,3,3,4,3,3,4,4,3,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,4,4,6,7,9,10,10,11,11,12,12,14,16,14,18,15,17,20,23,22,25,26,26,27,28,28,28,29,29,29,29,30,30,30,30,29,29,30,30,30,30,30,30,30,30,29,29],[2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,6,7,10,11,12,12,11,13,13,14,16,16,21,18,18,21,24,24,25,27,27,28,28,28,29,29,29,29,29,30,30,30,30,29,29,30,30,30,29,30,30,30,30,29,29],[2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,3,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,1,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,5,5,4,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,4,4,3,4,4,4,4,4,5,5,5,5,5,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,6,7,10,11,13,13,13,12,13,14,17,16,20,19,18,19,23,24,24,25,26,27,28,28,28,28,29,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,28],[2,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,2,2,2,3,3,3,3,3,3,4,4,5,6,8,10,11,11,13,12,13,14,17,15,18,16,17,20,22,22,24,24,25,27,27,28,28,28,29,28,29,29,29,30,29,28,28,29,30,29,29,30,29,29,29,29,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,3,3,4,4,4,4,6,7,9,10,10,11,12,12,13,14,16,15,18,16,17,21,22,22,24,26,26,27,28,28,28,29,29,29,29,30,30,30,30,29,29,30,30,29,30,30,30,29,29,29,29],[2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,2,2,2,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,3,2,2,3,3,3,3,3,3,3,4,5,6,8,10,12,13,12,12,14,15,17,16,21,18,19,21,24,24,26,26,27,28,28,28,28,29,29,29,29,30,29,30,29,29,29,29,30,29,29,30,29,29,29,29,29],[2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,3,3,2,2,3,3,2,3,3,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,5,7,9,10,12,13,12,11,13,14,16,15,18,17,17,19,22,23,23,25,25,27,28,28,28,27,28,28,28,29,29,29,29,28,28,29,29,29,29,29,28,29,29,29,29],[2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,4,3,3,4,4,4,4,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,6,8,10,10,11,11,11,13,14,16,14,18,15,17,19,21,21,23,25,25,26,27,27,28,28,28,29,29,29,29,29,29,28,28,29,29,30,29,29,29,29,29,29,28],[2,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,6,8,10,9,11,11,11,13,14,17,15,19,15,17,21,21,23,24,26,25,27,28,28,28,28,29,29,29,30,30,29,29,29,29,29,29,29,29,29,29,30,29,29,28],[2,2,1,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,4,4,3,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,6,7,10,10,13,11,11,13,15,16,15,18,18,19,20,23,24,24,26,26,27,28,28,28,28,28,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,2,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,4,3,4,4,5,7,7,10,11,12,11,11,13,14,16,14,17,16,17,20,21,22,22,26,25,26,28,28,28,28,28,29,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,5,5,7,8,10,11,11,12,12,13,14,16,15,18,16,18,21,22,23,24,26,26,28,28,29,29,29,29,29,29,30,29,30,30,29,29,29,29,29,30,29,29,29,29,29,29],[2,2,2,2,2,3,3,3,3,2,2,2,2,1,1,2,2,1,1,2,1,1,2,1,2,2,2,2,2,2,2,2,3,3,4,4,3,4,3,3,3,3,3,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,2,3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,3,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,3,4,3,3,3,3,3,2,3,3,2,3,2,2,2,3,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,4,4,5,4,4,3,3,4,4,3,4,4,3,3,4,4,3,3,3,3,3,3,2,3,3,2,3,3,2,3,3,3,2,3,3,3,3,4,4,4,4,5,6,7,9,11,13,13,12,13,14,15,17,17,20,19,19,22,24,24,26,27,28,28,29,29,29,29,30,30,29,30,29,30,30,29,29,29,30,29,30,30,30,30,30,29,29],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,1,2,2,1,2,2,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,5,6,8,9,11,11,11,12,13,14,16,16,19,18,19,20,24,24,25,27,26,27,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,6,9,10,10,12,12,12,12,14,17,16,19,16,17,22,23,23,25,26,27,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,1,1,1,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,5,4,4,4,3,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,4,4,5,6,9,10,11,11,11,12,13,14,16,16,20,18,18,20,23,24,24,25,26,27,28,27,28,28,28,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,27],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,5,6,9,10,10,11,11,10,13,16,16,16,20,19,19,21,23,23,25,26,27,28,28,28,29,29,29,29,29,30,30,30,29,29,29,29,29,29,30,30,29,29,29,29,29],[2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,2,2,3,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,2,1,1,1,2,1,1,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,3,3,4,4,3,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,4,5,6,9,10,10,10,9,12,12,13,14,15,18,17,18,20,23,23,24,25,26,27,28,27,28,28,28,29,29,29,29,29,29,29,28,29,29,29,29,29,29,29,29,28,28],[3,3,2,3,2,2,2,3,3,2,2,2,3,2,2,3,3,2,2,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,2,3,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,6,8,10,10,12,10,11,14,15,16,16,19,18,19,20,22,23,24,25,26,26,26,27,27,27,28,28,29,29,28,29,28,28,28,29,29,29,29,29,29,29,29,28,29],[3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,3,3,4,5,6,8,10,12,12,9,11,13,15,15,16,19,17,18,22,23,23,25,26,27,28,28,28,28,28,29,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29],[3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,4,4,4,4,4,4,4,3,3,4,4,3,4,4,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,2,1,2,2,3,2,3,3,3,2,3,2,2,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,4,4,4,4,5,4,5,4,4,5,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,4,4,4,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,6,8,10,12,12,9,9,14,15,15,17,19,19,20,21,23,23,24,25,25,26,26,27,27,27,27,27,28,29,28,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[3,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,2,2,2,2,3,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,2,1,1,2,2,2,2,2,3,3,3,5,7,8,10,11,12,11,11,13,15,15,17,19,18,19,21,23,23,24,25,25,26,27,27,27,27,28,28,28,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,2,3,3,3,2,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4,6,9,10,11,12,11,10,13,13,16,16,19,18,19,23,23,24,25,26,27,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29],[3,3,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,3,3,3,3,4,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,5,7,8,10,11,10,11,10,13,13,16,16,19,19,18,22,23,24,25,26,27,28,28,28,28,29,29,29,29,30,29,30,30,29,29,30,30,30,30,30,30,30,30,30,30],[3,3,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,2,1,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,4,5,7,9,10,11,10,11,13,14,16,17,20,18,19,22,23,23,24,25,26,27,27,28,28,28,28,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,3,3,3,3,3,3,3,2,3,2,3,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4,6,9,10,10,12,12,12,14,15,18,18,20,18,19,22,23,24,25,26,26,27,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,2,3,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,4,6,8,9,11,10,11,12,12,13,16,16,19,18,18,22,22,23,25,26,27,27,28,28,28,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[3,3,3,3,3,2,3,3,3,2,2,2,3,2,2,2,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,2,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,4,5,9,8,11,10,11,11,14,13,16,16,19,19,19,22,24,24,26,26,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4,5,8,9,10,11,10,11,13,14,17,16,20,18,19,22,23,24,24,25,26,27,28,28,28,28,28,28,28,29,28,29,29,28,28,28,29,29,28,29,28,29,29,28,28],[3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,2,2,2,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,2,1,2,2,2,2,3,3,3,3,4,5,6,8,10,11,12,11,11,14,14,16,16,19,18,18,21,22,23,24,26,26,27,27,28,28,28,28,28,28,29,28,29,28,28,28,28,28,29,29,29,28,28,28,28,28],[3,3,3,3,3,3,4,3,3,2,2,2,2,4,2,3,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,2,2,2,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,1,2,2,2,2,3,3,3,3,4,5,6,8,9,11,10,10,11,12,12,16,16,20,18,19,23,23,24,26,27,27,27,28,28,29,29,29,29,29,30,29,29,29,29,28,29,29,29,29,29,29,29,29,28,28],[3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,4,5,8,9,11,11,10,11,13,13,16,17,20,19,19,22,23,24,25,26,27,27,28,28,28,29,29,29,29,30,29,29,29,29,29,29,30,30,30,29,29,29,29,29,28],[3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,2,2,2,2,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,3,3,3,3,4,5,7,9,11,11,10,11,14,14,17,16,21,20,20,22,24,25,26,27,28,28,28,28,29,29,29,29,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,3,3,3,4,5,7,9,11,11,11,10,13,13,16,16,20,18,19,22,23,24,25,27,28,27,29,29,29,29,29,29,29,30,29,30,29,29,29,29,30,29,30,29,29,29,29,29,29],[3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,4,5,7,9,10,10,11,11,13,13,16,16,20,18,18,22,23,24,25,26,27,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28,28],[3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,3,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,3,3,4,5,7,8,10,11,10,11,14,14,17,17,21,19,20,22,24,25,26,27,28,28,29,29,29,29,29,29,29,30,29,30,29,29,29,29,29,30,30,30,30,30,30,29,29],[3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,3,3,3,4,5,7,9,11,11,10,10,13,14,16,16,20,19,19,21,24,24,25,27,27,28,29,28,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[3,3,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,4,5,7,8,11,10,10,10,12,12,17,16,21,19,18,22,23,25,26,27,27,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,29,29,29],[3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,2,3,3,2,3,3,2,3,3,2,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,4,5,6,8,10,10,9,11,13,13,18,17,20,19,18,23,23,24,26,26,28,28,29,29,29,29,29,29,29,30,29,29,29,29,29,30,29,30,30,30,30,30,30,29,29],[3,3,2,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,2,2,2,2,1,1,2,2,2,2,2,2,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,4,5,7,9,11,11,9,10,13,14,17,16,20,19,20,21,24,25,25,27,27,28,29,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,2,2,2,2,2,2,1,1,1,2,2,2,2,2,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,4,5,7,10,11,12,9,10,13,14,16,16,19,18,20,21,25,25,26,27,28,28,29,29,29,29,30,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29],[3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,6,8,9,10,11,10,11,13,13,17,17,21,19,18,22,24,24,26,27,28,28,29,29,29,28,29,29,29,30,29,29,29,29,29,29,29,30,29,30,30,30,30,29,29],[3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,1,2,1,1,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,6,7,9,10,10,9,10,12,13,17,15,19,18,19,20,23,24,25,26,27,27,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[4,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,5,6,8,10,10,8,9,11,12,14,14,19,18,19,21,24,25,25,27,27,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,3,2,2,3,2,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,6,7,9,11,10,9,9,12,12,15,15,19,18,19,21,24,25,26,27,28,29,29,29,29,29,29,30,29,30,29,30,30,29,29,30,30,30,30,30,30,30,30,30,29],[4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,4,3,4,3,4,4,3,3,4,4,3,3,3,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,1,1,1,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,6,7,8,10,10,9,10,11,11,16,14,19,18,18,20,22,23,26,26,27,27,28,28,27,28,28,28,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,28,28],[4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,3,3,3,3,3,3,4,3,4,4,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,4,4,3,4,3,4,3,4,4,4,3,4,4,3,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,5,6,7,8,10,9,9,10,11,11,14,13,17,17,18,21,23,23,25,27,27,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,4,4,4,4,3,3,3,4,3,3,3,4,3,3,3,3,4,3,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,2,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,5,6,7,8,11,10,8,10,11,11,13,13,16,17,18,21,23,23,25,27,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,4,4,4,4,3,3,3,3,4,3,3,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,5,5,7,7,9,10,10,8,10,12,11,14,13,17,18,18,19,23,24,25,26,28,28,28,28,28,28,28,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,4,5,6,7,7,9,9,9,9,10,10,13,12,15,16,16,18,22,21,24,26,27,26,28,28,27,27,27,28,28,28,28,28,27,27,28,28,28,28,28,28,28,28,28,27,27],[4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,5,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,4,4,4,5,5,6,7,8,9,10,8,9,10,9,12,12,14,15,15,18,20,20,23,25,25,26,27,27,27,27,28,27,28,28,28,28,28,28,29,28,28,28,28,29,28,28,28,27,27],[6,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,6,5,5,5,5,5,5,6,5,5,6,5,4,4,5,5,4,4,5,5,5,5,5,6,5,5,6,6,5,5,6,6,5,6,6,5,6,5,5,5,5,4,5,4,4,5,5,5,5,5,6,5,6,6,5,5,6,6,5,6,6,6,5,5,5,5,4,4,4,4,5,5,5,5,6,5,6,5,6,6,5,6,6,6,6,6,6,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,6,5,5,5,6,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,5,5,5,6,5,5,4,4,4,4,4,4,3,4,3,3,3,3,3,3,2,2,3,2,3,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,4,3,4,4,5,4,4,4,5,5,5,6,6,6,6,8,8,9,11,11,10,11,12,10,13,13,15,15,16,18,20,20,22,24,24,24,26,25,26,26,25,26,26,27,27,27,26,27,26,27,27,27,27,27,27,26,27,25,25],[5,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,3,2,2,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,4,3,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,3,3,3,3,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,7,7,8,10,10,8,10,12,10,13,13,16,16,17,19,22,22,24,26,26,27,28,28,28,28,29,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,5,3,3,3,3,4,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,5,4,5,5,5,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,4,4,4,4,4,3,3,3,2,2,2,3,2,2,2,2,2,3,3,3,3,4,4,4,5,4,4,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,5,4,5,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,2,3,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,5,5,6,7,7,8,10,10,9,10,11,11,14,13,15,17,17,19,21,21,23,24,27,27,27,28,28,27,28,28,28,28,28,28,28,28,28,28,29,29,28,29,28,28,28,28,28],[4,4,3,3,3,4,3,3,3,2,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,5,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,4,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,3,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,5,6,7,8,10,11,12,9,11,12,11,15,15,19,18,18,20,23,24,25,26,27,27,28,28,28,28,29,29,29,30,29,30,29,29,29,29,29,30,29,30,30,30,30,29,29],[4,4,4,4,4,4,4,4,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,5,4,4,4,4,4,4,4,4,4,5,4,3,3,4,4,3,3,4,3,3,4,4,4,4,4,5,5,4,5,5,4,4,4,5,4,4,4,4,4,4,3,4,3,4,4,4,4,4,4,5,4,5,5,5,5,5,5,4,5,5,5,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,5,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,2,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,3,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,6,7,8,10,11,11,9,10,12,12,15,14,16,17,17,19,22,21,24,25,26,26,28,28,28,27,28,28,29,29,28,29,29,27,28,29,29,29,29,29,29,29,29,29,29],[4,3,3,3,3,4,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,5,5,7,7,9,11,11,10,11,13,13,15,14,17,16,18,20,23,21,25,26,26,27,28,28,28,27,29,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,3,3,3,2,3,3,3,3,3,4,4,3,4,3,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,5,6,8,8,10,11,9,10,11,12,16,15,18,17,18,22,24,25,26,28,28,28,29,29,29,29,29,29,29,30,30,30,29,29,29,29,29,30,30,30,30,29,29,29,29],[3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,5,6,7,10,10,11,9,11,13,13,15,16,20,19,19,22,23,26,26,27,28,28,29,29,29,29,30,29,29,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30],[3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,5,6,6,9,10,10,8,9,11,11,14,14,18,18,18,20,23,23,24,26,26,27,28,28,28,29,29,29,29,30,29,29,29,28,28,29,29,30,30,30,29,29,30,29,29],[3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,5,6,7,8,10,11,9,10,11,12,15,13,17,17,19,21,22,23,25,27,27,28,29,28,29,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29],[3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,4,4,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,4,4,5,6,7,8,10,10,9,10,11,12,16,14,18,17,19,22,24,24,26,27,27,28,29,29,29,29,29,29,29,30,29,30,30,29,29,29,29,30,30,30,30,30,30,29,29],[3,3,2,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,3,3,3,3,3,3,2,3,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,1,1,2,2,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,6,7,9,9,10,9,10,12,12,15,15,19,17,19,21,23,25,25,26,28,28,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,30,29,29,30,29,29],[3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,1,2,1,1,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,1,2,1,1,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,6,6,8,8,9,8,9,10,11,13,12,16,15,17,19,22,23,24,27,27,27,28,28,28,28,29,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,3,3,4,3,3,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,3,2,2,3,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,6,8,10,10,8,9,11,11,14,13,17,17,18,20,23,23,25,26,27,27,28,28,28,28,28,28,28,29,28,29,28,28,28,28,28,29,28,29,29,29,29,28,27],[3,3,2,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,3,2,2,2,3,2,3,3,2,2,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,6,7,9,10,11,9,10,13,13,16,15,19,18,19,22,24,24,26,27,27,28,29,29,29,29,29,29,29,30,29,30,29,29,29,29,29,30,30,30,29,29,29,29,28],[3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,3,3,3,3,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,4,4,5,6,7,10,10,11,9,11,13,13,16,15,19,18,18,21,23,24,25,27,27,28,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,30,29,30,30,29,29],[3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,3,2,3,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,4,4,4,5,5,7,8,10,11,12,10,11,13,12,16,14,18,18,18,21,23,22,25,27,26,27,28,27,28,27,28,28,28,29,28,28,29,28,28,29,29,29,28,29,29,29,29,28,27],[3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,5,6,7,9,10,10,9,10,12,13,15,14,19,18,19,22,23,23,25,26,26,27,28,28,28,28,28,28,28,29,29,29,29,29,28,29,29,29,29,29,29,29,29,28,27],[3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,2,3,2,3,2,3,2,2,3,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,5,6,7,9,10,11,10,10,13,13,16,15,19,18,18,22,24,24,25,27,27,28,29,28,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,29,27],[3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,6,7,9,10,11,10,10,13,13,16,15,19,18,17,22,23,23,25,26,26,27,28,28,29,28,29,29,29,29,28,29,29,29,28,29,29,29,29,29,29,29,29,29,28],[3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,3,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,4,4,5,5,7,7,9,10,11,9,10,12,12,15,14,18,18,18,21,23,22,24,26,25,27,28,27,28,27,29,28,28,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,6,7,9,11,11,10,10,13,13,15,15,20,18,19,22,25,25,26,27,27,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,28],[3,3,3,3,3,4,4,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,3,3,4,3,3,3,4,3,3,3,3,4,3,4,4,4,4,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,7,8,10,11,12,11,11,13,14,17,15,20,19,19,21,24,24,26,26,27,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[4,4,3,4,4,4,4,4,4,3,3,5,3,3,3,4,3,3,3,4,3,3,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,5,5,5,4,5,5,4,5,5,5,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,4,4,4,4,4,4,3,4,3,4,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,3,4,4,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,2,2,3,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,6,7,8,9,11,12,13,11,12,14,14,15,15,18,18,18,20,22,22,24,25,25,27,27,27,28,27,28,28,28,29,28,29,29,28,28,28,28,29,28,29,29,29,29,28,27],[5,6,5,6,6,7,7,6,6,4,5,6,5,4,4,6,4,4,4,5,4,4,4,4,5,5,5,6,6,6,7,8,7,7,8,8,8,7,7,6,6,7,6,6,7,7,6,6,6,7,7,7,7,7,7,8,7,6,8,7,6,6,7,7,6,6,6,6,5,6,5,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,7,7,6,7,7,7,5,6,4,5,5,6,6,6,6,6,7,7,6,7,8,8,7,8,8,8,7,7,7,7,6,5,5,4,4,3,3,3,3,3,3,3,2,2,3,3,3,4,4,5,5,6,7,6,6,6,5,5,5,5,4,5,4,4,4,4,3,3,3,3,2,2,3,3,3,4,4,5,4,4,4,4,4,5,4,3,5,4,3,4,3,3,3,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,4,3,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,2,2,2,2,2,2,2,2,3,4,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,4,5,5,5,5,5,6,6,6,6,7,7,8,9,10,11,13,14,14,12,13,15,15,15,16,19,19,20,22,22,22,25,26,26,26,28,27,28,28,28,28,28,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[6,6,6,6,6,6,6,6,6,5,5,6,5,6,5,6,5,5,5,5,5,4,5,5,5,5,6,6,6,6,7,7,6,8,7,7,7,7,7,6,7,6,7,6,6,7,6,6,6,6,7,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,6,7,6,6,7,6,6,6,6,7,7,7,7,7,7,6,6,6,7,7,6,6,6,6,6,5,6,5,6,5,5,6,5,5,6,6,6,7,6,6,7,7,6,6,7,6,6,6,6,6,5,4,4,4,3,3,4,4,3,4,3,3,3,3,3,3,4,3,4,4,5,5,5,6,6,5,5,5,4,4,5,4,4,4,4,4,4,4,3,3,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,4,3,3,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,4,4,5,4,4,4,4,4,4,4,3,3,4,3,3,2,2,2,2,1,2,2,1,1,0,1,1,1,2,1,1,2,2,2,2,3,3,3,3,4,3,4,3,3,4,3,3,4,4,4,3,4,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,5,4,4,5,5,5,6,6,6,7,7,8,10,11,12,13,13,12,12,14,14,16,16,18,18,19,20,21,21,23,25,25,25,26,27,27,27,28,28,28,29,28,28,28,27,27,28,28,29,28,29,29,28,29,28,28],[5,5,6,6,6,6,6,5,5,4,5,6,5,4,5,6,4,4,5,5,4,4,4,5,5,5,6,5,6,6,6,7,6,6,7,7,7,7,6,6,5,6,6,5,6,6,6,6,6,6,6,7,6,6,6,7,6,6,7,7,6,6,7,5,6,6,6,6,6,6,5,6,5,6,6,6,6,7,6,6,6,6,6,6,6,7,6,6,5,6,6,6,5,5,5,5,5,4,5,5,5,5,5,6,6,5,7,7,6,6,6,6,6,5,6,6,5,5,4,4,3,3,3,3,3,3,4,3,3,3,3,3,3,3,4,4,4,5,5,5,6,5,4,5,5,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,4,3,4,3,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,2,3,2,3,3,3,3,3,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,6,7,9,10,11,12,13,12,12,14,14,16,16,19,18,19,21,22,22,25,25,24,25,27,27,27,27,28,28,28,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,29],[4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,3,3,3,3,3,3,2,3,2,3,3,3,3,2,2,2,2,2,3,3,3,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,2,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,4,4,5,6,7,8,10,11,11,10,10,13,13,15,16,19,19,19,20,23,23,25,26,26,27,28,28,28,28,29,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,29,27],[4,4,3,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,4,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,3,2,3,3,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,4,4,4,4,5,5,7,8,10,12,12,10,10,13,13,15,15,19,19,18,22,24,25,26,27,27,28,29,29,29,29,29,29,29,30,29,30,29,29,29,29,30,30,30,30,29,29,29,29,28],[4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,5,4,4,4,5,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,5,4,5,5,4,5,4,4,4,4,4,3,3,3,4,3,3,4,3,3,3,4,4,4,4,4,4,4,5,5,5,5,4,4,4,3,3,3,3,2,2,2,3,2,3,3,3,2,2,2,2,2,2,3,3,3,3,3,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,1,2,2,1,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,4,3,3,4,4,4,5,6,7,9,11,13,12,11,11,14,13,17,17,19,19,20,23,24,24,26,27,27,27,28,28,29,28,28,28,29,29,29,29,29,28,29,29,29,29,29,29,29,28,29,28,27],[4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,3,4,4,4,4,4,4,4,5,5,5,5,5,6,5,6,5,5,4,5,5,4,4,5,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,4,3,3,4,4,4,4,4,5,4,4,5,5,5,4,4,4,4,3,3,3,3,3,3,2,3,2,3,3,3,2,2,2,2,2,2,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,6,8,9,10,12,12,10,11,12,13,15,15,18,19,19,21,23,22,26,26,26,26,28,27,28,27,29,28,29,29,29,29,29,28,28,29,29,29,29,29,28,29,29,28,28],[4,4,3,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,3,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,4,4,5,7,8,10,11,12,10,10,13,12,15,15,19,19,19,22,23,24,26,27,27,28,29,28,29,28,29,29,29,30,29,29,29,29,29,29,29,29,29,30,29,29,29,29,28],[4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,4,3,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,4,3,3,3,4,4,4,4,4,4,5,5,5,5,4,4,4,4,3,3,3,3,3,2,2,3,2,3,3,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,6,7,9,10,11,11,10,11,13,13,15,14,18,19,19,21,24,24,26,28,28,28,29,29,29,29,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,29,29,28],[5,4,4,4,4,5,5,5,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,5,5,5,4,4,5,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,4,4,3,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,4,5,4,4,4,3,3,3,3,2,3,2,3,3,3,3,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,4,4,4,4,5,6,7,9,10,11,11,10,11,12,13,14,15,17,17,18,20,21,21,23,25,24,25,26,26,27,26,28,28,28,28,28,28,29,28,28,29,28,29,28,29,29,28,28,28,27],[5,4,4,5,4,5,5,5,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,5,5,5,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,5,4,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,5,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,2,3,3,3,3,3,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,4,4,4,4,5,5,5,5,6,8,9,10,10,11,10,11,12,13,16,14,16,17,18,20,20,20,23,24,24,25,26,26,27,27,27,27,28,29,28,29,28,28,27,29,28,29,28,29,29,29,29,27,28],[5,5,5,5,5,6,5,5,5,4,4,5,5,4,4,5,4,4,4,5,4,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,5,5,6,5,5,6,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,4,4,4,5,3,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,4,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,4,3,3,3,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,8,9,11,12,12,10,11,14,13,14,15,17,17,18,20,22,22,24,25,26,27,27,27,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28,27],[7,7,6,7,6,7,7,6,7,6,6,6,6,5,5,6,5,5,5,6,5,5,5,6,6,6,6,6,7,6,7,6,7,7,8,9,7,8,8,7,7,7,7,6,6,7,6,6,6,6,7,7,7,7,8,7,7,7,7,7,7,7,7,7,7,7,6,7,6,8,7,7,8,8,7,7,7,7,7,7,8,7,7,8,7,7,7,7,7,7,7,7,6,7,6,7,6,6,7,6,7,7,8,7,7,7,8,7,7,8,8,7,7,7,7,7,7,6,6,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,5,5,6,7,7,7,7,7,6,7,7,5,6,6,5,5,5,5,5,4,4,5,4,4,4,6,5,5,6,6,5,6,5,5,5,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,4,3,3,3,4,3,3,4,3,4,3,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,2,1,1,1,1,2,2,1,2,3,3,3,3,3,2,3,3,3,3,3,4,4,4,4,5,5,5,5,6,5,6,6,6,6,6,7,7,7,7,8,8,10,10,12,13,14,12,12,14,13,14,16,18,18,19,21,24,23,25,26,26,28,28,28,29,29,29,29,29,30,29,29,29,29,29,30,29,30,29,30,30,29,30,29,28],[8,8,7,9,7,9,9,8,8,8,6,7,7,6,6,7,7,6,7,7,7,6,7,7,7,8,8,8,8,7,8,7,9,8,10,10,9,8,8,8,8,8,8,8,7,8,7,7,8,7,9,8,8,9,9,9,9,9,8,9,9,9,8,8,7,8,7,8,7,8,9,8,10,9,8,9,9,8,8,9,9,8,9,10,8,8,9,9,8,8,7,8,7,8,6,7,7,8,8,8,7,8,8,8,8,8,9,8,9,9,9,9,10,8,8,7,7,7,6,6,6,6,5,5,6,5,6,6,6,4,6,5,5,6,6,7,7,7,8,8,7,8,7,7,7,7,6,7,6,6,6,7,6,6,6,6,6,5,5,5,5,7,6,6,7,6,6,6,6,5,6,5,5,5,5,5,4,5,5,4,4,5,5,4,3,4,4,4,3,4,4,3,4,4,4,5,4,4,4,4,3,3,4,4,4,3,4,3,3,3,3,2,2,3,3,2,3,4,3,3,4,3,3,2,2,2,2,2,2,1,1,1,0,1,1,1,2,1,1,2,2,2,2,3,3,2,3,4,4,4,4,4,4,4,4,5,4,6,6,6,6,6,7,7,7,7,7,7,8,9,9,9,8,9,8,11,13,13,14,15,14,15,15,14,16,17,16,19,19,20,21,19,23,24,24,24,25,25,25,25,27,26,27,28,27,27,27,27,27,28,28,28,28,28,28,28,28,27,27],[7,8,6,7,6,8,8,7,7,9,6,7,7,6,6,7,7,6,6,7,6,5,6,6,6,7,7,8,8,7,8,8,8,9,9,9,8,8,8,8,8,7,8,8,7,7,8,7,7,7,8,8,8,9,8,8,9,9,8,8,9,8,7,8,6,7,7,7,7,8,9,7,9,9,7,8,8,8,7,8,9,8,8,9,9,8,8,8,8,7,6,7,6,6,6,7,7,6,7,6,6,6,7,7,6,7,8,7,7,8,8,8,8,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,4,5,4,5,5,5,6,6,7,7,6,6,6,6,6,6,6,6,5,5,5,6,5,5,5,5,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,5,5,4,5,4,4,4,5,4,4,4,5,4,4,4,5,3,4,4,4,3,4,4,3,4,4,5,4,5,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,6,7,6,7,8,7,7,8,8,11,12,12,14,15,14,13,15,16,15,16,16,18,18,17,20,20,22,23,23,23,25,25,26,25,27,27,27,27,27,27,28,26,27,27,27,28,28,28,28,27,28,28,27],[8,8,8,8,9,8,9,8,10,10,9,8,8,8,7,8,7,7,7,8,7,7,7,8,7,8,8,8,8,8,8,8,8,8,9,10,8,8,8,8,8,7,8,8,8,8,8,8,8,8,8,9,8,8,9,8,9,8,9,9,9,9,8,8,8,8,8,8,9,10,9,9,10,9,8,9,9,9,8,8,9,9,9,9,9,8,9,8,8,8,7,8,7,7,8,8,8,8,8,8,7,7,8,8,7,8,8,8,8,8,8,8,8,8,7,7,7,7,8,7,7,6,6,6,7,6,6,6,6,5,6,6,5,6,6,6,7,7,7,7,7,7,7,7,7,7,6,7,7,6,6,7,7,6,6,7,5,6,6,6,6,6,6,6,7,6,6,7,6,6,6,6,5,5,6,6,6,5,6,5,5,4,5,4,4,4,4,4,3,4,3,3,3,3,4,3,3,3,4,4,3,3,3,3,4,3,4,4,3,3,3,3,4,4,3,4,4,4,4,4,4,4,3,3,2,2,3,2,2,2,2,1,1,1,0,1,1,1,1,1,2,2,2,2,3,3,3,3,5,4,4,4,5,5,5,4,5,6,5,6,7,6,6,7,7,7,8,8,7,8,9,8,8,9,9,11,13,13,14,15,14,14,16,15,16,17,19,19,19,18,21,21,23,23,23,24,25,25,26,25,27,27,27,28,27,27,27,26,26,27,27,27,27,28,27,27,28,27,27],[7,7,6,7,6,7,7,6,6,5,5,6,5,5,5,6,5,5,5,6,6,5,5,6,6,6,6,7,7,6,7,6,7,7,7,7,7,7,6,6,5,6,6,6,5,7,6,6,7,6,7,7,7,7,7,7,8,8,7,7,8,8,7,7,6,6,6,7,6,6,6,7,7,8,7,7,8,7,7,8,7,7,8,8,8,7,7,8,7,7,6,7,6,6,5,6,5,6,6,7,6,8,7,7,7,7,7,7,8,8,8,8,8,8,7,7,7,6,6,5,5,5,4,4,4,4,4,5,4,5,4,6,4,5,5,6,6,7,7,7,6,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,5,5,5,5,5,5,4,5,4,5,4,4,4,4,4,3,3,3,3,3,3,3,4,3,2,4,3,2,2,2,2,2,3,3,3,3,3,3,2,3,2,3,4,2,2,3,3,3,3,3,4,4,4,4,5,4,3,3,3,3,3,3,2,2,2,2,1,2,1,1,0,1,1,1,1,1,1,2,2,2,2,3,3,3,4,3,4,3,3,4,4,4,4,4,4,4,5,5,5,5,6,6,6,6,7,8,7,8,9,8,11,11,12,13,13,10,12,13,12,14,14,16,18,18,18,20,21,24,24,25,26,26,27,28,27,28,28,28,29,28,28,28,27,28,28,28,29,28,29,29,29,29,27,27],[5,5,4,4,4,5,4,4,4,3,4,4,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,5,5,4,4,4,4,5,5,5,5,5,5,5,4,4,5,5,4,5,5,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,4,4,5,4,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,6,7,8,9,11,10,10,10,13,11,15,14,16,17,18,19,22,22,24,24,25,27,27,27,28,27,28,28,28,29,28,28,28,27,28,28,28,29,28,29,29,28,28,28,27],[4,4,4,4,3,4,4,4,4,3,3,4,4,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,4,3,4,3,3,4,3,4,4,4,4,4,4,4,4,4,5,4,4,5,4,4,4,3,4,3,3,3,3,2,3,3,3,3,3,3,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,2,3,3,2,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,5,7,8,9,11,10,9,9,12,11,14,13,16,17,18,20,23,23,25,26,27,28,29,29,29,29,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,29],[5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,4,5,5,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,4,4,5,5,4,5,5,5,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,7,8,9,10,11,10,10,11,11,13,13,16,16,17,18,21,21,24,25,25,26,27,27,28,27,28,28,28,29,29,29,29,28,28,29,28,29,28,29,29,29,29,28,28],[4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,4,4,4,4,4,4,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,3,3,2,3,2,3,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,4,4,4,4,5,6,7,8,10,10,9,9,11,10,13,13,16,16,17,18,21,21,24,25,25,27,27,27,27,27,28,28,28,29,28,29,28,27,28,28,29,28,28,29,28,28,29,28,27],[4,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,3,4,4,4,3,4,4,4,3,3,4,4,4,4,4,3,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,1,1,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,5,6,7,8,10,10,9,10,11,12,14,13,16,17,18,20,23,23,26,27,27,28,29,29,29,29,29,29,29,30,29,30,29,29,29,29,29,29,29,29,29,29,29,29,28],[4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,4,4,4,4,4,4,4,3,3,4,4,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,3,4,4,4,3,4,4,4,4,4,4,3,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,4,4,4,5,6,7,9,11,11,9,10,12,12,15,14,19,19,19,21,25,25,26,27,28,29,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29],[4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,3,4,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,4,3,3,3,3,3,2,2,3,2,3,3,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,5,6,8,8,10,10,10,10,11,12,14,14,17,16,18,19,22,21,24,25,25,26,27,27,27,27,28,28,28,29,28,29,28,27,28,28,28,28,28,29,28,28,29,28,28],[4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,3,3,3,2,3,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,5,6,8,8,10,10,9,10,12,12,14,13,16,17,17,17,22,22,24,26,26,26,28,28,28,28,28,28,28,29,28,29,28,28,28,29,29,29,29,29,29,29,29,28,27],[4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,4,4,3,3,4,4,4,3,3,4,3,4,4,4,4,4,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,3,4,4,4,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,5,6,7,8,11,10,8,10,12,13,16,14,18,18,18,20,24,25,26,27,28,28,29,29,29,29,30,29,29,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,29],[4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,3,3,2,3,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,6,8,9,11,11,9,10,12,13,15,14,18,17,19,20,24,24,25,27,26,27,28,28,29,28,29,29,29,30,29,29,29,28,28,29,29,29,29,29,29,29,29,29,28],[5,5,5,5,4,5,5,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,4,5,5,5,5,5,5,4,4,4,4,4,4,5,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,4,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,5,7,9,9,11,11,10,11,12,13,15,14,17,17,18,19,22,21,24,25,25,25,26,26,26,27,27,27,28,28,28,28,27,27,28,28,28,28,27,28,28,28,29,28,27],[6,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,4,4,4,4,4,4,5,4,4,4,5,5,5,5,5,5,5,5,6,5,5,6,6,5,5,4,4,4,4,4,3,3,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,5,5,4,4,4,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,3,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,2,2,2,2,3,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,5,5,5,6,8,10,11,13,12,11,12,15,15,16,16,18,19,19,20,23,23,24,26,26,27,28,28,27,28,28,28,28,29,28,29,28,27,28,28,29,29,28,29,28,28,28,28,27],[5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,5,4,5,5,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,5,5,4,5,4,5,4,5,5,5,4,4,5,4,4,5,5,4,5,4,4,3,4,3,4,4,3,4,4,4,4,4,4,4,5,5,5,4,5,5,5,5,5,5,4,4,4,3,3,3,4,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,3,3,3,3,2,3,2,3,2,3,3,3,3,3,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,3,3,3,3,4,4,4,4,5,6,7,10,11,12,14,11,12,14,14,17,15,19,19,20,20,23,23,26,26,27,27,29,28,28,28,29,29,29,29,29,29,28,28,28,29,29,29,29,29,29,29,29,28,28],[4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,3,3,4,3,3,4,4,3,3,3,3,4,3,4,4,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,3,4,3,3,3,3,2,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,3,3,3,3,4,5,6,7,9,11,11,9,11,13,14,16,15,20,19,19,21,25,25,27,27,28,28,29,29,29,29,29,29,29,30,29,30,29,29,29,29,30,30,30,30,30,30,30,29,29],[4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,4,5,7,9,11,12,9,10,14,14,16,16,20,19,20,21,25,25,26,27,27,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,30,30,29,30,30,29,28],[4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,3,3,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,3,3,3,4,5,7,9,11,11,10,10,13,14,16,16,19,20,20,20,23,24,26,26,27,27,28,28,28,28,28,28,28,29,28,29,28,28,28,29,29,29,29,29,29,29,29,28,28],[3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,4,5,7,8,11,11,10,12,15,15,17,16,19,19,20,20,23,24,25,26,27,27,28,28,28,28,28,28,29,29,29,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[3,3,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,5,7,8,11,11,9,11,13,14,17,16,20,19,19,20,25,25,26,27,27,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[3,3,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,4,7,8,10,11,10,10,13,14,15,15,19,19,19,20,23,24,26,26,27,28,29,28,28,28,29,28,29,29,28,29,29,28,28,29,29,29,29,29,29,29,29,28,28],[3,3,2,2,2,3,2,3,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,4,7,8,10,11,10,11,14,15,17,17,19,18,20,20,23,24,26,26,27,27,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,1,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,4,6,7,10,11,10,10,13,14,16,16,20,19,19,20,23,25,26,26,27,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,2,2,2,3,3,3,3,3,2,2,2,3,2,2,3,3,3,3,2,3,3,3,3,3,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,2,1,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,4,6,8,11,10,10,11,13,13,17,16,19,19,19,21,24,24,26,27,27,28,28,28,29,29,29,29,29,30,29,29,29,29,29,29,29,29,30,30,30,30,30,29,29],[3,3,2,2,2,2,2,3,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,6,7,10,10,10,10,12,14,16,16,19,18,20,20,23,24,25,26,27,27,28,29,28,29,29,28,29,30,29,29,29,28,29,29,29,30,29,29,29,30,29,28,29],[3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,2,2,2,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,4,6,7,10,11,9,10,12,13,17,15,17,17,18,19,22,23,25,25,27,27,28,28,28,28,29,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,3,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,3,5,6,7,9,10,10,9,11,12,15,16,19,17,18,21,23,24,25,26,27,27,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,2,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,3,5,9,8,10,10,12,10,12,13,16,16,19,18,17,21,22,24,25,26,26,27,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,28],[3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,3,4,8,8,9,11,10,10,12,14,16,15,18,17,19,19,21,23,24,24,26,26,28,27,27,27,28,27,28,29,28,28,28,28,28,28,29,29,29,29,29,29,29,28,29],[3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,3,4,5,6,9,8,8,10,10,10,14,14,17,16,16,20,22,23,25,25,27,27,28,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[3,3,3,3,2,2,2,3,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,3,3,3,3,3,2,2,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,3,5,7,8,11,12,9,11,12,13,15,15,19,17,17,22,23,24,25,26,26,27,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,4,4,3,3,3,3,4,3,3,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,2,3,3,3,3,3,3,3,4,5,4,4,4,3,4,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,3,5,8,9,10,12,11,11,13,13,15,16,18,18,18,20,21,22,24,25,25,26,27,27,27,27,28,27,28,29,28,29,29,28,28,29,29,29,29,29,29,29,29,29,29],[4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,3,4,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,4,3,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,5,4,5,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,4,6,7,8,9,10,10,9,12,13,16,14,17,16,18,21,21,22,25,25,27,26,28,28,27,28,28,27,29,29,29,29,28,29,29,29,29,30,29,30,30,30,30,29,29],[5,5,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4,5,5,5,5,6,5,6,5,5,6,6,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5,5,4,5,4,4,5,4,4,5,4,4,5,5,4,4,4,4,4,3,3,3,4,3,3,3,3,3,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,2,3,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,5,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,4,5,5,5,5,5,6,6,6,6,6,6,6,6,6,5,5,5,6,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,4,4,4,5,6,5,5,6,6,5,7,7,6,6,6,7,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,2,2,2,3,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,2,2,3,6,8,8,11,11,10,10,12,12,15,15,17,17,17,21,23,24,25,25,27,27,28,28,28,28,29,28,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,29],[9,9,7,8,6,6,7,6,5,5,6,5,7,6,6,7,7,7,8,8,8,8,8,8,8,9,10,9,9,7,9,9,9,8,9,8,7,7,7,7,7,7,7,7,8,8,8,8,8,7,8,8,8,8,8,9,7,8,9,10,8,9,9,7,8,7,6,5,4,5,4,4,3,4,5,4,3,5,5,5,6,6,6,6,7,6,6,6,8,8,6,6,6,6,6,4,3,3,3,4,4,4,6,4,5,4,4,5,5,4,7,6,5,6,6,7,5,4,4,4,5,4,5,5,6,6,6,6,7,7,6,6,5,5,4,5,5,4,6,7,6,6,6,7,7,6,7,7,6,6,8,7,6,6,8,7,7,7,6,6,5,5,4,4,4,4,4,3,4,5,3,4,4,4,4,4,4,5,4,5,5,5,5,6,6,6,6,6,7,7,7,7,8,7,7,7,8,9,8,8,8,8,7,8,8,7,6,8,7,7,6,8,7,7,7,8,8,8,8,7,8,8,9,9,8,7,8,8,9,10,9,8,9,9,8,7,7,8,7,8,7,7,8,7,6,7,6,5,5,5,6,5,4,5,5,4,4,4,3,2,3,3,2,2,1,2,1,1,0,1,1,1,2,3,4,7,9,9,11,11,11,10,12,13,14,15,18,17,18,22,22,23,24,26,26,27,28,28,28,28,28,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29,29],[8,8,7,8,7,6,7,7,7,7,6,6,7,6,6,8,7,7,7,9,9,8,8,8,9,9,9,9,10,8,9,7,9,9,9,9,9,9,10,8,8,9,9,8,9,10,9,9,8,7,9,9,9,9,8,9,8,9,8,8,8,9,8,8,6,7,6,5,4,5,5,4,4,4,4,4,4,6,5,5,8,7,6,7,9,7,8,8,8,8,6,6,5,4,4,4,3,3,3,4,4,4,3,4,5,4,4,6,5,6,7,7,6,6,6,6,5,5,5,4,4,4,6,6,6,6,7,7,7,6,5,5,5,5,4,5,6,5,5,7,6,7,6,7,7,6,7,9,6,6,7,8,6,6,7,8,7,6,6,6,5,5,5,4,3,4,4,3,3,5,4,3,5,5,3,5,4,5,6,5,5,6,7,6,6,9,9,7,8,10,8,9,8,9,8,8,9,8,9,8,9,8,9,8,9,8,8,8,8,7,7,7,7,6,7,8,7,7,7,8,7,7,7,9,8,8,8,8,9,10,9,8,9,10,11,9,11,10,8,9,8,8,8,8,7,8,9,7,8,6,6,6,6,5,5,5,5,6,4,3,2,3,2,2,2,1,1,1,1,0,1,1,2,2,3,6,8,8,9,11,10,10,11,13,14,13,17,17,18,20,20,20,23,24,25,26,27,27,27,27,28,28,28,29,28,29,29,29,29,29,29,29,29,30,30,30,30,30,29],[11,9,10,9,8,6,8,7,7,7,8,7,8,8,9,9,8,11,11,10,10,11,9,12,11,10,11,10,11,10,9,9,10,9,8,8,9,9,9,9,10,9,9,9,10,9,10,11,10,10,10,9,9,8,7,10,8,8,10,10,9,9,10,10,10,9,7,6,6,6,5,6,4,5,5,5,5,7,6,6,7,8,8,8,9,8,9,9,10,8,9,7,7,5,5,5,4,4,4,4,5,4,4,4,6,5,5,7,7,7,9,9,8,8,8,8,6,7,6,5,5,5,6,7,7,9,8,8,9,8,7,6,7,6,7,6,7,6,8,8,8,8,8,9,10,8,8,11,9,9,9,10,9,9,9,9,9,8,8,7,7,6,6,4,4,4,3,3,4,4,4,4,6,5,4,5,5,6,7,6,6,8,8,8,7,10,10,9,8,11,10,9,8,11,11,10,10,11,10,9,9,9,9,9,9,9,10,9,10,10,8,9,8,9,8,9,8,9,8,8,8,8,7,9,8,8,9,9,10,10,11,10,11,10,11,11,14,11,9,12,9,8,9,9,9,8,8,9,7,7,7,6,7,6,5,5,5,4,4,4,3,3,2,3,2,2,1,1,1,1,0,1,1,2,3,7,9,9,10,10,11,9,11,13,14,16,17,17,17,21,20,23,24,26,27,27,28,28,28,28,28,28,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,29,30],[11,11,10,9,9,7,9,8,8,9,10,8,8,10,9,10,10,11,10,13,13,12,13,12,11,13,14,13,12,11,10,11,9,9,10,10,11,10,10,10,11,11,11,11,11,12,12,13,13,11,12,10,10,10,9,10,9,9,9,9,9,11,11,9,10,9,9,5,7,5,6,5,4,6,5,4,6,6,6,6,7,8,8,8,9,9,9,8,10,9,8,8,8,5,6,5,5,4,5,6,5,5,5,5,7,5,5,7,8,7,9,7,7,8,9,7,8,8,6,7,7,6,8,8,8,9,9,10,10,10,9,9,8,7,8,8,7,8,8,8,8,8,9,10,11,12,10,9,11,10,10,10,11,11,11,10,10,10,10,10,10,7,7,6,5,6,5,5,7,6,5,6,6,6,6,6,7,8,8,8,8,9,9,10,9,11,10,10,11,11,10,12,11,10,13,11,12,13,12,11,14,10,11,11,13,10,9,12,11,11,10,12,10,11,11,13,10,11,12,12,10,11,9,10,10,12,12,11,12,14,13,12,11,11,11,11,14,11,11,12,11,10,12,11,9,9,9,8,8,8,9,6,8,8,8,7,7,6,6,7,5,5,3,3,3,2,2,1,1,1,1,0,1,2,3,5,7,8,10,11,10,11,12,13,15,15,17,18,18,21,20,22,24,25,26,27,27,28,28,27,28,28,29,29,29,29,29,28,28,29,29,29,29,30,29,30,29,29,29],[13,13,11,12,10,9,9,10,10,9,9,10,9,10,11,11,10,11,11,13,12,13,13,14,14,14,13,15,14,11,13,12,12,12,14,12,12,11,12,10,11,12,12,11,12,13,13,13,14,12,13,13,13,12,11,12,12,12,13,13,12,13,12,12,11,10,9,6,8,8,6,4,5,6,6,5,6,8,8,7,10,11,9,9,11,10,10,10,12,12,10,9,9,7,8,7,6,4,6,5,8,5,4,8,8,5,7,8,8,8,10,9,8,9,9,9,8,9,7,8,9,8,9,9,9,10,9,10,11,10,9,10,10,8,8,8,9,8,9,9,9,10,11,12,11,12,12,12,12,10,13,12,11,12,13,13,11,10,10,11,10,9,8,8,5,6,6,6,8,7,7,7,9,9,6,7,8,7,9,8,8,8,9,9,9,10,11,10,10,11,10,11,12,12,11,11,12,13,11,12,12,11,11,11,12,11,11,12,11,10,11,12,10,10,11,12,11,11,12,12,12,11,12,11,11,11,13,12,12,14,13,12,13,13,12,12,14,12,12,13,11,11,12,12,11,11,11,10,11,9,10,11,9,8,10,11,8,8,9,9,8,5,5,4,5,4,3,2,1,1,1,1,0,1,2,5,7,8,10,10,10,10,12,13,14,15,16,17,18,20,21,21,23,25,26,26,27,27,27,27,28,27,28,29,29,29,29,29,29,29,30,29,29,30,30,30,30,30,29],[16,16,14,15,13,12,13,15,14,14,14,14,15,14,14,16,15,15,16,16,17,16,15,17,17,17,18,17,16,15,17,15,16,16,17,18,17,17,17,17,17,17,17,16,17,18,16,17,16,16,17,18,16,16,14,15,16,14,15,15,15,15,15,14,12,14,12,9,10,11,9,6,7,8,7,7,8,11,9,10,12,12,11,13,14,13,14,13,15,13,11,10,11,8,8,7,7,6,6,6,7,6,6,6,8,7,8,11,11,12,11,14,12,11,10,12,8,11,7,9,10,11,12,13,13,14,14,13,14,12,13,12,11,11,11,9,11,8,10,12,13,13,13,15,13,13,14,15,13,14,14,15,12,14,15,16,14,13,15,12,12,11,10,7,8,8,7,6,8,10,9,10,10,10,9,11,11,11,14,11,12,14,15,15,15,17,18,14,16,19,14,15,17,17,17,16,16,18,16,16,16,16,15,16,17,15,16,17,15,15,14,17,13,15,14,17,14,14,15,15,14,16,15,15,14,16,16,15,16,18,19,16,17,16,17,15,20,18,17,18,16,15,16,16,15,15,16,16,16,13,13,15,15,11,11,12,12,10,10,11,10,9,8,8,5,5,5,4,3,2,2,1,1,0,1,5,7,8,8,10,9,9,11,13,13,14,16,16,18,20,20,20,23,25,26,26,26,27,26,27,27,27,28,29,28,28,29,29,29,29,29,29,29,30,30,30,30,30,30],[21,22,20,20,17,16,15,16,17,18,17,17,19,19,19,21,20,23,22,23,23,23,23,23,22,23,22,23,22,21,21,19,18,17,18,19,19,20,19,20,19,20,20,22,21,22,22,23,22,21,21,20,20,18,18,17,14,19,18,17,20,21,20,20,20,16,16,13,14,14,12,9,9,9,10,8,9,12,13,11,13,18,18,15,16,17,19,18,20,17,17,14,15,13,14,12,12,10,9,9,13,9,9,12,14,10,11,17,16,14,18,16,17,18,16,17,15,17,14,15,16,17,18,19,20,21,20,22,21,22,21,21,19,17,17,17,17,15,16,19,18,19,20,21,19,20,20,21,20,21,21,22,20,21,23,23,22,20,20,20,20,17,16,13,13,14,15,15,18,16,16,19,17,18,18,20,19,19,21,18,20,20,22,22,22,24,24,23,24,25,24,24,24,23,23,20,23,23,24,24,22,24,25,23,23,24,24,23,24,22,22,24,23,22,23,23,22,22,24,23,22,22,21,21,22,21,24,23,22,24,25,22,21,20,20,20,22,23,23,20,24,23,21,22,21,21,22,22,23,20,19,21,22,18,18,20,19,17,19,23,19,16,18,16,11,11,9,12,8,6,5,5,3,1,0,1,5,6,7,10,9,8,12,14,14,15,16,18,19,20,20,22,24,24,26,27,27,28,28,27,28,28,29,29,28,29,29,29,29,30,30,30,30,30,30,30,30,30,30],[21,22,20,19,17,15,15,18,16,18,18,18,21,20,20,22,23,23,23,24,24,24,23,25,23,23,23,22,23,21,22,19,20,18,19,20,21,22,21,22,21,21,22,23,22,23,23,23,21,22,22,22,21,22,20,17,21,18,19,20,20,21,20,20,19,18,16,13,15,15,11,12,10,10,12,9,11,15,14,14,16,16,16,19,18,19,19,19,20,18,17,16,16,14,14,13,15,12,11,11,13,11,10,13,14,11,12,14,17,16,19,18,18,18,17,17,15,17,13,15,15,18,18,20,23,22,23,23,23,23,22,23,20,19,18,16,17,17,19,19,19,20,21,21,21,21,22,22,20,22,22,22,21,22,24,24,24,23,23,22,21,18,18,13,15,17,15,21,17,17,20,18,20,20,17,18,21,22,21,21,23,23,23,25,24,26,25,25,25,27,26,26,26,26,26,24,25,25,25,25,25,26,25,25,25,25,26,25,24,24,25,26,25,24,25,27,25,24,25,25,25,26,26,26,26,26,26,26,26,26,26,26,24,24,24,25,26,26,26,26,25,26,26,25,24,26,26,25,25,25,24,24,25,23,22,22,20,19,20,23,19,20,20,18,16,13,12,12,9,9,8,6,6,6,1,0,2,4,6,7,8,7,9,11,13,15,16,14,16,20,18,19,20,22,24,24,24,25,25,25,27,26,27,27,27,28,28,28,28,28,29,29,29,29,29,30,30,30,30],[23,25,23,22,17,17,18,16,20,18,19,17,21,22,22,23,23,26,25,25,24,25,24,26,25,25,24,24,24,23,22,20,18,17,19,19,20,20,19,21,20,21,22,23,23,23,23,24,24,24,23,22,21,19,19,16,20,20,18,20,21,21,22,22,21,18,16,16,16,17,15,15,12,13,16,10,12,16,15,14,16,15,17,20,18,18,20,20,21,21,19,16,17,17,16,17,15,15,14,15,14,13,12,16,15,13,14,16,16,17,18,19,20,19,17,20,16,19,17,17,19,19,20,20,24,24,24,24,23,24,25,24,23,21,19,18,19,18,18,19,20,21,22,22,22,22,23,24,23,23,24,24,23,25,25,25,25,24,24,23,20,20,18,15,17,19,19,20,22,19,20,22,23,22,18,21,23,22,21,24,25,24,25,26,26,26,26,25,25,26,25,27,26,26,26,25,27,26,26,24,26,24,26,25,26,26,25,25,26,26,24,27,25,26,25,26,26,25,26,26,25,26,26,26,26,25,27,26,25,26,27,26,25,24,23,25,25,26,26,25,25,26,25,26,25,25,24,25,24,23,23,24,25,23,22,23,21,22,21,23,19,19,20,17,18,16,13,13,13,11,8,9,8,6,4,1,0,1,5,6,6,8,9,11,13,14,15,16,17,19,20,20,21,22,24,25,25,26,27,26,27,27,27,28,28,28,28,28,28,29,28,29,29,29,29,29,30,30,30],[24,25,23,23,20,17,19,18,20,20,19,18,21,22,22,24,24,25,24,26,25,25,24,25,25,24,25,25,24,24,24,20,20,19,19,20,23,22,20,23,21,22,24,24,24,25,25,25,25,24,24,24,23,21,22,18,23,23,21,23,24,24,23,23,21,20,19,15,17,14,14,12,11,10,13,11,12,14,15,15,17,18,20,22,23,21,22,22,23,22,20,19,18,15,16,14,16,15,13,14,14,13,14,14,16,16,15,17,18,20,21,22,21,21,20,21,18,19,18,19,18,21,21,21,25,23,24,25,25,25,24,25,23,22,21,20,21,20,19,21,21,23,23,23,24,24,23,25,23,24,24,25,24,25,25,25,26,25,24,24,23,22,20,17,18,20,18,17,21,20,17,21,23,24,19,22,24,23,22,24,26,25,24,26,27,25,27,27,27,26,27,28,28,27,28,27,28,28,27,27,27,28,27,27,27,27,27,27,27,27,26,27,27,26,26,27,25,25,27,27,26,27,26,26,27,27,27,27,27,28,28,28,27,27,27,26,28,28,28,28,27,27,28,27,26,27,27,26,26,27,26,26,27,25,24,24,22,22,22,22,21,20,18,18,17,16,13,12,12,12,8,9,8,8,6,3,2,0,1,4,3,5,6,8,10,12,12,12,14,16,17,18,19,20,22,23,23,24,24,25,25,25,27,27,27,27,27,28,28,28,28,29,29,29,29,29,29,30,30],[25,25,23,23,20,19,18,19,18,19,21,20,21,23,22,24,24,25,25,25,24,26,25,26,25,24,24,24,25,24,25,22,21,19,19,17,20,21,19,22,21,21,23,23,23,24,23,25,24,23,24,24,24,21,20,19,22,23,23,23,24,24,24,23,22,22,19,17,18,17,13,13,10,11,16,13,11,17,18,17,18,20,20,22,23,23,24,23,24,23,22,22,20,19,19,18,16,16,15,17,18,17,15,16,20,17,17,20,20,20,23,23,23,23,22,23,21,22,21,22,23,23,23,23,26,25,24,24,24,25,25,25,24,24,21,22,22,22,21,23,23,24,24,25,24,25,24,24,23,24,25,24,24,25,25,26,26,24,25,24,23,23,20,21,19,22,21,21,23,23,22,24,24,25,21,23,25,25,23,25,25,24,25,26,27,25,26,27,26,26,27,27,25,26,27,26,27,26,26,25,26,27,27,25,27,28,27,27,27,27,26,28,27,28,27,28,27,27,27,27,27,27,26,28,28,27,28,28,28,28,28,28,26,25,26,27,26,27,27,27,27,28,27,26,27,26,25,26,26,27,27,25,25,25,25,24,24,24,23,23,22,21,20,21,16,17,14,13,14,13,11,11,10,8,6,4,3,1,0,1,2,2,5,7,8,10,11,11,13,16,16,17,19,20,22,23,24,24,25,25,26,26,27,28,28,28,29,28,28,29,29,29,29,30,29,30,30,30,30],[23,24,23,23,20,19,19,18,19,19,20,18,20,22,22,23,23,23,24,24,24,24,24,24,24,23,22,23,23,22,24,21,20,18,17,17,21,20,18,21,20,19,22,22,22,24,22,23,23,23,24,22,23,20,21,19,22,23,21,22,23,22,22,22,22,21,20,18,19,14,12,14,10,10,15,13,12,16,16,16,17,20,21,21,22,21,22,21,22,22,21,21,20,19,17,17,18,17,15,17,16,15,16,18,17,16,17,19,19,21,23,22,20,21,21,22,20,21,21,21,23,22,22,22,24,24,24,24,24,24,24,25,23,24,22,22,22,21,19,21,22,21,22,23,24,25,23,24,23,24,23,24,23,25,24,24,25,24,25,24,23,22,21,20,18,22,20,20,23,22,20,23,24,25,21,22,26,22,22,23,25,24,24,25,25,23,26,27,26,25,27,27,27,27,27,28,28,28,26,25,26,26,25,25,26,27,26,26,26,26,25,26,26,26,25,26,25,25,26,27,26,27,27,25,27,27,26,26,28,28,27,27,27,26,28,28,27,27,28,27,25,26,27,27,25,26,26,26,26,26,27,25,25,25,25,24,23,23,22,23,24,21,21,21,18,17,16,14,15,13,11,10,8,8,7,5,4,2,1,0,1,2,3,4,8,8,10,12,11,14,15,15,17,18,21,22,23,24,24,24,26,26,26,28,27,27,28,27,27,29,28,29,29,29,29,29,30,30,30],[23,22,22,23,19,18,18,20,17,19,21,20,20,21,20,24,22,24,23,24,23,24,23,24,23,23,22,22,21,22,22,19,21,18,15,16,21,19,19,20,20,21,22,21,22,23,22,22,22,22,22,21,21,18,18,18,20,20,20,21,20,20,23,20,21,20,18,16,17,15,12,14,9,10,14,12,12,14,16,16,16,18,18,18,20,21,20,19,20,21,20,19,19,19,17,16,16,15,14,15,14,14,17,17,15,14,18,18,17,17,20,20,19,19,22,20,19,20,18,19,22,20,19,21,24,24,23,25,23,23,24,24,24,22,22,19,21,21,19,19,21,21,22,22,21,22,22,23,23,22,23,24,23,24,25,24,24,23,22,23,22,20,21,18,19,20,18,19,21,20,21,23,22,23,20,22,24,22,22,22,24,21,22,25,26,23,25,25,25,25,25,26,25,25,26,26,27,26,25,24,25,25,25,24,25,26,25,25,25,24,24,26,26,24,25,26,25,24,26,26,25,26,25,25,25,26,26,26,25,26,26,26,26,24,25,24,25,26,25,26,25,25,25,25,24,24,23,23,23,24,25,23,24,23,23,22,21,21,20,21,20,19,20,17,16,18,14,14,13,12,11,11,9,9,8,7,5,3,2,1,0,1,3,5,4,8,9,9,10,12,15,16,18,18,20,22,23,23,24,24,25,26,26,27,27,27,27,27,27,28,28,28,28,29,29,29,29,29,29],[25,25,24,22,21,18,17,19,17,20,19,20,21,22,22,24,23,25,24,24,26,26,25,26,25,25,24,23,24,23,23,21,19,17,17,15,20,18,19,20,20,20,22,22,23,24,23,24,23,24,24,21,21,18,19,19,22,22,21,21,24,24,23,23,23,21,19,17,18,16,14,15,9,11,16,13,13,16,16,15,17,19,20,21,21,21,24,23,23,24,23,20,21,18,17,15,16,16,16,18,16,15,18,17,18,16,18,20,20,20,21,23,23,23,22,23,20,22,20,22,21,21,22,21,24,24,23,26,24,26,24,25,24,23,22,21,22,21,21,22,22,24,24,24,23,24,24,25,23,24,25,25,23,25,26,25,26,24,24,24,21,21,20,20,17,21,22,20,21,22,20,23,23,23,19,20,23,22,21,22,25,23,22,24,26,24,24,26,27,25,26,28,27,26,27,25,27,26,26,26,26,27,26,26,27,28,26,27,27,25,25,28,27,25,26,27,27,26,26,27,26,27,25,26,26,26,27,27,26,27,27,27,25,23,24,26,26,27,26,25,27,26,25,26,25,25,24,25,24,25,25,22,24,23,22,22,22,23,21,21,21,21,19,19,19,18,15,12,15,15,11,11,11,10,9,8,5,4,3,3,1,0,2,4,5,6,10,10,10,14,15,17,19,21,22,22,24,24,25,25,27,27,27,28,28,28,28,28,28,28,29,29,29,29,29,29,30,30,30],[25,26,25,23,21,20,19,19,19,21,22,21,21,24,24,24,24,25,25,25,25,26,25,26,26,25,25,25,25,25,25,22,22,18,16,15,21,20,20,23,22,21,23,24,23,24,24,25,24,24,25,22,22,20,21,21,23,23,22,23,25,25,24,24,24,23,22,20,20,17,12,16,12,12,17,16,14,18,19,18,20,21,21,23,23,24,25,23,25,24,23,22,22,20,21,19,19,18,17,17,19,15,17,19,20,18,17,22,21,21,24,24,23,24,23,24,21,23,20,23,23,24,22,23,26,26,25,27,26,26,26,26,25,25,23,23,23,21,21,23,24,24,24,25,25,26,25,26,25,26,26,26,25,26,27,27,27,26,26,25,25,24,22,21,20,23,22,21,24,24,21,24,25,26,21,23,26,25,24,26,27,26,26,28,27,25,28,27,27,27,27,27,27,27,27,28,27,27,26,27,27,26,27,26,26,28,27,27,27,28,27,27,27,28,27,28,27,27,27,27,26,27,27,27,27,27,28,28,28,28,28,28,28,27,28,28,27,27,28,28,27,28,27,27,27,27,27,26,27,28,27,27,27,26,26,26,25,26,24,24,23,22,22,22,19,18,18,16,15,14,14,12,11,10,10,10,8,6,5,5,3,1,0,2,3,5,7,12,11,11,13,15,17,18,20,21,22,23,23,23,25,25,26,27,27,26,28,27,27,28,28,28,28,29,29,29,29,30,30],[25,25,24,23,22,20,20,20,20,21,23,23,22,23,24,24,23,24,25,26,26,27,26,27,26,25,25,24,25,24,24,23,22,19,16,16,20,18,20,21,22,21,22,22,24,24,24,24,23,24,24,22,22,20,20,21,23,23,23,23,23,23,24,24,23,22,21,20,21,19,16,19,13,14,19,18,15,19,20,19,20,22,22,22,22,23,24,24,24,24,23,22,23,21,21,20,22,20,20,20,18,19,20,21,21,20,20,22,23,23,24,24,23,24,23,25,23,23,22,24,25,24,23,24,25,26,24,26,26,27,25,27,25,26,24,23,24,22,24,25,24,25,26,26,25,26,26,26,26,26,26,26,26,27,27,26,26,28,26,27,26,25,25,24,25,25,25,22,26,25,24,25,26,26,23,25,26,24,24,25,26,25,25,28,27,24,27,28,26,27,27,28,28,28,28,28,28,28,27,27,29,27,26,27,28,27,26,28,28,27,26,28,27,26,27,28,27,27,28,28,28,29,27,27,28,29,28,27,28,29,28,28,28,27,28,28,28,27,28,28,26,27,28,26,26,28,27,27,27,27,28,27,27,26,26,26,24,26,26,24,23,23,24,24,22,21,21,18,19,19,17,16,15,15,14,13,9,8,7,6,6,2,1,0,2,3,5,8,9,11,13,15,16,18,19,20,21,21,22,23,23,24,25,26,26,26,27,26,27,27,27,28,27,28,28,29,29,29,29],[27,27,25,25,23,21,21,20,20,22,23,22,24,24,24,25,26,27,26,27,28,28,28,28,27,27,26,26,26,24,26,23,21,19,16,16,22,18,19,22,22,21,23,23,24,24,24,25,24,24,25,24,24,20,20,21,24,25,24,25,26,25,25,25,25,25,23,21,21,18,16,20,15,14,21,19,18,21,21,21,20,23,26,25,26,25,26,25,26,26,25,25,23,24,21,21,20,23,22,24,22,22,24,24,24,23,24,25,25,25,27,26,26,26,26,26,24,24,24,24,25,24,24,24,27,26,24,28,27,28,27,27,27,26,25,25,25,25,25,26,25,26,26,27,26,27,26,27,26,27,28,27,27,28,28,27,28,27,26,27,26,26,26,25,26,27,25,25,26,26,25,26,27,27,24,26,27,24,24,26,27,25,25,27,28,25,27,28,28,28,28,28,28,28,27,27,28,27,28,27,27,27,28,27,27,28,28,28,28,28,27,29,28,28,28,29,27,27,28,28,28,29,28,27,28,29,28,28,27,29,28,28,26,24,26,27,27,28,27,28,28,27,28,28,28,27,27,27,26,27,28,27,27,27,27,26,26,26,27,24,24,26,25,23,24,23,23,19,21,21,17,17,20,18,15,16,12,12,9,10,7,6,4,2,0,3,4,6,8,10,14,13,15,17,18,19,21,21,22,23,24,25,24,26,26,26,26,26,27,27,28,28,28,28,28,29,29,29,29],[28,27,27,25,23,22,21,20,19,23,24,23,23,25,25,25,26,27,27,27,28,29,29,28,28,28,27,27,28,26,26,23,22,20,15,17,22,21,20,23,22,21,25,25,25,25,27,26,26,25,26,25,24,20,21,22,24,24,24,26,26,26,25,27,27,25,24,23,22,20,17,20,16,16,22,22,17,21,23,22,20,23,26,26,26,26,27,28,28,27,27,25,24,23,23,22,22,22,22,23,25,25,23,24,26,24,24,25,27,26,26,27,28,28,27,28,25,27,24,26,25,25,24,24,27,26,26,27,28,28,27,28,27,28,26,27,27,26,27,28,27,28,27,28,28,28,28,28,27,28,29,28,27,29,29,27,28,28,27,28,26,27,27,26,27,27,27,23,27,27,24,26,27,27,23,24,27,26,23,26,28,25,26,28,28,27,27,28,28,28,28,29,28,28,28,29,28,29,29,29,28,28,28,28,28,28,28,28,29,28,28,29,28,27,29,29,28,28,29,29,29,29,29,28,29,29,29,28,29,29,29,29,28,28,28,28,29,29,29,29,28,28,29,28,27,28,28,27,28,28,28,28,28,27,28,27,26,26,27,26,24,26,24,23,22,24,22,21,22,22,21,20,21,20,18,19,14,13,15,11,12,7,7,4,2,0,1,5,4,6,9,10,12,13,15,16,19,21,22,23,24,24,25,26,27,26,27,27,28,28,28,28,28,29,29,29,30,30,30],[29,28,27,25,24,22,21,22,20,23,24,22,23,26,26,25,27,28,28,28,29,29,29,29,28,28,28,28,28,26,25,23,23,21,17,17,22,21,22,25,23,22,24,25,25,24,26,26,26,25,26,24,24,21,23,23,25,25,24,26,27,26,26,28,27,25,25,22,22,21,18,20,18,19,22,20,19,23,23,23,21,24,26,26,26,27,28,29,29,28,27,26,26,24,25,20,24,25,22,27,27,28,27,26,27,27,24,27,27,28,27,28,29,29,28,29,27,28,27,27,27,27,26,25,29,28,26,28,28,29,28,29,28,29,27,29,28,28,29,29,28,29,28,30,28,28,29,29,28,28,29,28,28,29,29,28,29,29,29,29,26,28,29,28,29,28,28,26,28,28,25,28,28,29,25,26,28,27,25,28,29,27,28,29,29,28,29,29,30,30,29,30,29,30,30,29,29,30,29,29,29,29,29,29,29,30,29,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,30,29,30,30,30,29,30,30,30,30,29,29,30,30,30,30,30,30,29,30,30,29,29,30,30,29,29,29,30,29,29,28,29,29,28,28,29,28,27,28,27,25,24,26,25,23,24,24,23,19,23,24,20,21,14,16,13,13,12,11,6,6,6,2,0,1,4,5,6,9,10,11,14,16,18,20,21,22,22,24,24,25,26,25,26,27,27,27,28,28,28,29,29,29,30,29,30],[27,27,25,24,22,23,22,20,22,25,25,22,24,25,25,25,27,28,27,28,27,28,27,27,28,27,27,27,27,24,24,22,23,19,18,17,21,22,21,25,23,22,23,24,23,23,25,25,26,24,25,23,24,22,23,21,25,24,23,25,26,26,25,28,26,24,23,22,23,21,20,22,18,18,22,23,19,21,24,24,23,24,24,25,25,26,27,28,28,26,27,25,25,24,24,21,23,24,22,25,26,25,25,24,26,25,25,25,26,27,27,28,27,28,27,28,26,27,25,27,27,26,27,27,28,27,27,28,28,28,28,29,28,28,27,28,28,27,27,28,27,28,27,28,28,29,28,28,27,27,28,28,27,28,28,28,28,27,28,28,27,28,27,27,27,27,27,26,28,28,26,29,28,29,26,27,29,28,26,28,29,27,28,29,29,28,29,30,29,29,30,30,29,30,29,29,29,29,29,29,29,29,29,29,29,30,29,29,30,29,29,29,29,29,29,30,29,29,29,30,29,30,29,29,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,29,29,30,30,29,29,30,29,28,29,29,30,29,29,29,29,28,28,29,28,28,27,28,28,27,25,27,25,24,25,24,24,21,23,24,21,21,15,17,14,14,12,10,9,7,7,3,1,0,1,4,5,5,8,9,11,13,16,18,19,21,22,22,23,24,25,25,26,26,26,27,27,28,28,28,29,29,29,29,30],[28,28,26,26,26,23,23,22,24,26,26,26,26,26,27,25,27,29,28,28,29,29,29,29,28,29,28,27,28,25,27,26,23,23,17,19,22,21,23,25,26,24,26,26,27,27,26,26,26,26,27,26,25,21,22,23,24,25,25,25,26,26,25,28,27,25,24,23,25,23,20,23,20,20,24,23,20,24,25,23,23,25,25,25,26,26,26,28,28,27,27,25,26,24,24,23,24,24,24,26,26,26,26,25,27,26,25,26,27,26,26,27,27,27,27,28,26,27,26,27,27,28,27,27,28,28,28,28,29,29,28,29,28,28,27,28,28,27,27,27,27,27,27,29,28,29,28,28,28,28,29,29,28,29,29,29,29,29,28,28,28,28,27,28,27,28,28,26,28,28,27,28,28,28,26,27,28,27,26,27,28,27,28,29,28,28,28,29,28,29,29,29,29,29,28,29,29,30,29,30,30,28,29,29,29,29,28,30,29,29,28,30,29,28,29,30,29,29,30,30,29,30,29,29,30,30,29,30,30,30,30,30,29,29,29,29,30,29,29,30,29,29,30,28,29,29,29,28,29,29,29,28,28,29,28,28,27,28,28,28,27,27,27,27,25,27,25,24,25,25,24,24,24,23,21,22,18,18,15,14,12,13,8,8,7,5,3,1,0,2,4,5,6,9,10,13,15,17,19,19,20,21,22,23,24,24,26,25,26,26,27,27,27,27,28,28,29,29,29],[28,27,26,27,26,22,22,22,22,24,26,26,25,26,26,26,27,28,27,27,28,29,29,29,28,29,28,28,28,26,27,24,22,19,18,16,22,20,22,25,24,23,25,26,26,26,27,26,27,26,27,24,23,19,22,23,24,25,24,26,28,27,26,27,27,27,25,24,25,20,19,24,20,17,22,23,17,21,23,24,20,24,26,26,26,28,27,28,27,28,27,27,26,27,25,24,26,27,26,27,27,27,27,27,26,26,26,27,26,27,28,27,28,29,27,28,27,29,28,27,28,27,27,27,28,27,26,28,27,28,28,29,28,29,28,30,29,29,29,29,28,28,27,28,27,29,28,28,28,29,29,28,28,29,29,28,29,29,28,29,28,29,29,28,29,29,28,27,28,28,28,28,28,28,27,27,28,27,26,27,28,26,27,28,28,27,28,29,28,28,28,29,28,28,29,28,29,28,28,27,28,28,28,27,28,29,28,29,29,28,28,29,29,28,29,29,29,28,29,29,29,29,29,28,30,29,29,29,30,30,30,29,29,28,28,29,29,29,29,28,29,29,27,28,28,29,28,28,28,28,28,28,28,28,28,27,27,27,27,27,27,28,28,26,26,26,27,25,25,26,26,24,24,25,23,23,18,19,15,15,14,13,11,10,10,6,6,3,1,0,1,4,5,7,8,10,14,16,18,20,21,21,22,23,23,23,24,25,25,25,25,26,26,27,27,27,28,28,28],[28,27,27,24,23,23,22,21,22,23,23,22,24,25,25,24,26,27,28,28,28,29,28,29,28,28,27,27,28,25,25,23,23,21,16,18,22,23,22,25,24,23,25,25,24,25,26,25,25,24,25,24,24,21,23,23,26,25,24,26,27,26,26,27,27,26,25,24,23,22,20,24,21,20,24,22,21,23,25,24,23,26,26,27,27,27,28,29,28,27,28,28,27,27,25,25,26,27,27,28,28,28,28,28,27,27,27,27,27,28,28,27,29,29,28,29,28,29,28,28,28,28,27,26,27,28,26,28,28,28,28,29,28,29,29,30,29,28,29,29,29,30,29,29,28,30,29,29,28,29,29,28,27,29,29,28,28,29,28,29,29,29,29,29,29,29,29,28,28,29,27,29,29,29,27,28,29,28,27,28,29,27,28,29,29,28,29,30,29,29,29,30,29,30,30,29,30,29,28,29,29,29,28,29,29,30,28,29,29,29,29,30,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,28,29,29,30,29,29,29,29,28,28,29,28,29,28,28,29,28,27,28,29,26,27,27,26,25,25,25,24,23,19,20,17,18,18,13,10,11,10,7,5,6,3,1,0,1,3,6,6,9,12,13,15,17,19,20,21,22,22,23,23,24,24,25,26,26,26,27,28,27,28,28,29],[28,28,29,27,27,24,24,23,24,26,26,25,27,28,28,27,28,29,29,29,29,29,29,29,29,29,29,28,29,27,27,26,24,23,19,21,24,25,25,28,27,25,28,28,27,28,28,28,28,27,27,26,26,22,24,23,26,27,26,26,27,27,27,28,28,26,26,25,25,24,22,26,22,22,26,24,22,24,27,25,23,26,26,26,26,26,27,28,28,27,28,26,28,27,26,25,26,27,26,27,28,27,27,27,27,26,27,27,26,27,27,27,27,28,27,29,27,29,28,29,29,28,28,28,29,29,29,29,29,29,29,30,29,29,29,29,29,29,29,29,29,29,29,29,29,30,29,29,28,29,29,29,28,30,29,29,29,29,29,29,29,29,29,28,29,29,29,28,29,29,28,29,29,30,28,29,30,29,28,28,30,28,28,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,29,30,30,30,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,28,29,29,29,29,29,29,28,28,28,28,27,27,28,26,26,26,26,22,23,19,19,17,17,18,15,12,14,12,8,8,7,5,3,1,0,1,3,5,8,10,11,14,17,18,20,21,22,22,23,24,24,25,25,26,26,26,27,27,27,28,29,29],[30,29,29,29,28,28,27,27,27,27,27,28,28,29,29,29,29,29,29,30,30,30,30,30,29,30,30,29,30,29,29,28,27,25,21,21,25,24,25,28,28,27,28,28,28,28,29,29,29,29,29,28,27,23,25,26,27,27,28,29,29,29,29,29,29,28,28,27,27,27,24,27,23,25,27,26,22,27,28,25,24,28,28,27,28,29,29,29,29,29,29,29,29,28,28,26,27,28,28,28,28,28,28,28,28,28,28,28,28,28,29,29,29,30,29,30,28,30,28,29,29,29,29,29,29,29,29,30,30,30,29,30,29,30,29,30,30,29,29,30,29,30,30,30,29,30,30,30,29,30,30,30,29,31,30,30,30,30,29,30,30,30,29,29,29,29,29,28,29,29,29,29,29,29,28,29,30,29,28,29,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,31,30,30,31,30,30,30,31,30,30,31,31,31,30,30,30,31,31,30,30,31,31,31,30,31,30,30,31,31,30,31,30,31,30,31,30,30,30,30,29,30,30,30,29,30,29,30,29,29,29,29,29,29,29,29,28,28,28,28,28,28,28,27,27,27,27,25,25,21,20,19,20,20,16,14,15,13,11,8,8,6,5,3,1,0,1,3,6,8,10,13,15,18,18,20,21,21,22,23,24,24,25,25,26,26,27,27,27,28,28,28],[30,29,29,28,27,25,25,25,25,27,26,26,28,28,28,28,29,30,29,29,30,30,30,30,29,30,29,29,29,28,28,27,25,23,20,21,24,23,26,26,27,25,26,28,28,27,28,28,28,28,28,27,26,22,23,25,26,27,27,28,29,29,28,29,29,28,28,27,27,24,25,27,25,23,26,24,21,24,25,25,23,27,28,28,28,28,29,29,29,29,30,28,28,29,28,28,28,29,28,29,29,29,29,28,28,29,27,28,29,29,29,29,30,30,29,30,29,30,29,29,29,29,28,28,29,29,28,29,30,30,29,30,29,30,29,30,30,30,30,30,30,30,31,30,29,31,30,30,29,30,30,30,29,31,30,30,30,30,29,30,30,30,30,29,30,30,30,29,30,30,28,30,30,30,28,29,30,29,28,29,30,28,28,30,30,28,29,30,30,29,30,30,30,30,30,30,30,30,29,29,30,30,29,30,30,30,29,30,30,30,30,31,30,30,31,31,30,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,29,30,30,28,29,29,29,29,29,29,29,29,28,29,29,28,29,29,29,28,27,28,26,25,22,23,21,21,21,19,16,18,15,11,12,9,10,7,6,4,2,0,1,4,6,8,9,10,14,17,18,20,21,21,22,22,23,24,24,25,25,26,26,26,27,27,28],[30,29,30,28,28,27,26,27,26,28,28,27,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,28,28,26,25,22,24,26,26,27,29,28,27,28,29,28,28,29,29,29,29,28,28,27,24,24,25,26,28,28,28,28,29,28,29,30,28,28,28,28,26,25,27,27,26,28,27,24,27,28,26,24,28,28,27,28,28,29,29,29,29,30,29,29,29,29,28,27,28,29,28,29,28,28,29,28,28,28,28,28,29,29,29,29,30,29,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,31,31,30,30,31,31,30,31,30,31,31,30,30,31,31,30,31,31,31,30,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,29,29,29,29,29,29,29,29,29,29,29,28,29,28,27,27,27,26,23,24,22,22,20,19,17,18,14,13,12,11,9,7,7,5,2,1,0,1,4,7,8,9,11,14,16,18,19,20,21,21,22,23,23,24,24,25,26,26,27,28,28],[30,29,30,29,29,27,28,28,28,29,29,29,29,30,30,30,30,30,30,30,30,30,30,31,30,30,30,29,30,30,28,28,25,26,23,26,25,27,28,29,29,27,29,29,28,28,29,29,29,29,28,28,26,24,25,26,27,26,27,28,28,28,28,29,30,29,29,29,29,27,28,28,29,28,29,29,26,28,29,28,26,29,29,27,28,29,29,30,29,29,30,30,30,30,30,29,29,30,29,30,30,30,29,30,30,30,29,29,30,29,29,30,30,30,30,30,30,31,30,31,31,30,30,30,30,30,30,30,30,31,30,31,30,31,31,31,31,30,30,30,30,30,31,31,30,31,31,30,30,31,31,30,30,31,31,30,31,31,31,31,31,31,31,30,30,31,31,30,31,31,30,31,30,31,30,30,31,30,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,28,27,27,26,26,24,25,24,21,21,21,20,17,16,13,11,10,11,7,6,4,2,0,1,4,6,8,8,10,13,16,17,19,19,20,22,23,22,24,24,25,26,25,27,27,28],[30,30,30,29,29,28,28,28,28,29,29,29,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,29,29,27,28,24,26,27,27,29,29,29,28,29,29,29,29,29,29,29,30,29,29,28,25,25,27,27,28,28,29,29,29,29,30,30,29,30,29,29,28,28,28,28,27,28,28,25,28,28,27,25,28,28,28,28,29,30,30,30,30,30,30,30,29,30,28,28,29,29,30,30,30,29,29,29,29,28,29,29,29,28,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,31,30,31,30,31,30,30,30,31,31,30,30,30,30,31,31,31,30,31,31,30,30,31,31,30,30,31,31,31,30,30,31,31,30,31,30,30,30,30,30,30,30,30,29,30,30,31,30,30,31,30,29,30,30,29,30,31,30,29,30,31,31,30,31,31,30,30,31,30,31,30,30,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,29,30,29,29,28,28,29,27,27,25,26,25,26,24,22,21,22,21,18,15,14,12,11,10,8,6,5,3,2,0,1,3,4,6,7,9,13,16,17,18,19,20,22,21,23,23,25,25,25,26,27,27],[30,30,30,30,30,29,29,29,29,30,29,29,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,30,30,30,29,30,28,29,26,28,28,29,29,30,29,28,30,30,30,29,30,30,30,30,29,30,29,27,27,28,28,28,29,30,29,30,29,30,30,30,30,29,30,29,29,29,29,29,29,29,28,29,29,28,27,29,29,28,29,29,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,31,30,31,30,30,30,30,31,30,31,31,31,31,31,31,30,31,30,31,31,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,30,30,30,31,30,30,31,30,30,30,31,30,30,31,30,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,29,29,28,28,28,26,26,25,26,24,24,24,23,22,21,18,18,16,12,11,10,8,7,6,4,2,0,1,4,5,6,7,10,14,16,17,18,20,20,20,22,22,24,24,24,25,27,27],[30,30,30,30,29,29,30,29,30,29,30,29,30,30,30,30,30,31,31,30,31,31,30,31,30,30,30,30,30,30,29,30,29,29,27,29,28,29,29,30,29,29,30,30,30,29,30,30,30,30,29,30,29,27,26,29,28,29,29,30,29,29,29,30,30,30,30,30,30,29,29,29,29,29,29,29,28,29,29,28,27,29,29,28,29,29,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,29,30,30,31,30,31,30,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,30,31,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,29,29,28,29,27,27,25,27,26,25,25,25,24,22,20,19,17,15,13,12,10,7,7,5,3,2,0,1,3,5,6,7,9,12,15,17,18,19,19,21,21,23,23,23,24,25,26],[31,31,31,30,30,30,30,29,29,29,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,27,29,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,28,28,29,29,29,30,30,30,30,30,30,31,30,30,30,30,30,29,29,29,30,29,29,28,29,29,28,27,29,29,28,29,29,30,30,30,30,31,30,31,30,30,30,29,30,30,30,30,30,30,30,30,30,29,29,30,29,29,30,30,31,30,31,30,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,30,31,30,30,31,30,30,30,31,30,30,31,31,30,31,31,31,30,31,31,31,30,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,28,28,26,27,26,26,24,25,25,24,23,23,21,20,19,17,15,13,12,8,7,6,6,4,2,0,1,3,5,6,7,9,13,16,18,19,19,20,20,21,22,22,24,24,26],[31,30,31,30,30,30,30,29,30,30,30,29,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,29,30,28,29,29,29,30,30,30,29,30,30,30,29,30,30,30,30,30,30,29,28,28,29,29,29,30,30,30,30,30,30,31,30,30,30,30,30,30,30,29,30,29,29,29,30,29,29,28,30,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,31,31,30,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,29,29,29,29,29,29,28,27,28,25,27,26,26,26,25,23,23,22,23,22,18,17,17,15,11,9,7,7,6,4,2,0,1,3,5,7,7,9,12,15,18,17,20,20,21,21,21,22,23,25],[31,30,31,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,29,30,29,29,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,29,29,28,29,29,29,30,30,30,30,30,30,31,30,30,30,30,30,29,29,29,30,30,29,28,30,29,28,29,30,30,29,29,30,30,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,29,30,30,30,31,30,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,29,29,29,29,29,29,27,28,26,27,26,25,26,26,23,23,22,23,21,19,17,18,16,13,11,8,6,5,4,2,1,0,1,3,5,7,7,9,13,15,16,18,18,19,20,21,22,22,24],[31,31,31,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,30,29,29,30,30,30,29,30,30,30,30,30,31,30,30,30,30,29,29,29,30,29,29,30,30,30,31,30,30,31,30,30,30,30,30,29,29,29,30,30,29,29,30,30,29,29,30,30,29,30,30,30,30,31,31,31,31,31,30,30,30,29,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,31,30,30,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,28,28,26,27,26,27,25,25,25,25,22,23,23,23,24,20,19,20,19,15,15,12,8,6,6,5,4,2,0,1,3,5,7,7,9,12,14,16,17,18,19,19,21,21,23],[31,31,31,31,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,29,29,29,29,30,30,30,30,30,31,30,30,30,31,31,30,30,30,30,29,29,30,30,30,30,31,30,31,30,31,31,31,30,30,30,30,30,29,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,30,30,30,30,30,30,30,30,30,30,30,29,29,27,28,26,27,26,26,26,26,24,24,23,23,24,20,20,21,20,17,16,14,11,8,6,6,5,3,2,0,1,3,4,5,6,8,11,14,15,17,18,19,20,20,22],[31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,30,30,30,30,31,30,31,30,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,31,31,31,31,31,31,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,30,31,30,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,30,29,30,30,29,29,29,29,28,28,26,27,26,27,26,26,26,26,24,24,24,24,24,22,22,21,21,18,18,16,14,11,8,6,6,5,5,2,0,1,3,4,5,6,8,11,13,15,16,17,18,19,21],[31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,29,30,30,30,30,30,30,31,30,30,30,31,31,31,30,30,30,30,30,30,30,30,31,31,30,31,30,31,31,31,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,31,30,30,31,30,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,31,31,31,30,30,31,31,30,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,30,30,30,30,30,30,29,30,29,29,28,27,27,26,27,26,26,26,26,24,24,23,24,24,22,23,22,22,20,19,18,16,14,11,8,6,6,5,3,2,0,1,3,4,5,6,8,11,14,14,16,18,18,19],[31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,29,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,31,30,30,30,31,31,31,30,30,30,30,29,29,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,31,31,31,31,31,31,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,31,30,31,31,31,31,31,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,30,30,30,30,30,29,30,29,28,28,26,27,25,26,26,25,25,25,23,23,23,23,24,21,22,22,21,19,18,17,16,15,13,10,7,6,5,5,4,2,0,1,3,4,5,6,8,11,12,14,15,16,17],[31,31,31,31,30,30,30,29,29,29,30,30,30,30,30,30,31,30,31,31,31,31,30,31,31,31,31,30,31,31,30,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,31,31,31,31,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,30,30,30,29,30,30,30,31,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,30,31,31,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,30,31,30,30,31,30,30,30,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,28,28,26,27,26,26,25,25,25,25,24,23,23,22,25,20,22,22,21,20,20,20,18,17,16,13,10,7,5,5,5,4,2,0,1,3,5,6,6,8,11,13,15,15,17],[31,31,30,30,30,30,30,29,29,29,30,29,29,30,30,30,30,30,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,31,30,31,31,31,31,30,30,31,30,30,31,31,31,31,31,31,30,31,31,31,30,30,31,31,31,30,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,31,30,30,31,30,31,30,30,31,31,30,30,31,30,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,30,30,31,30,30,30,30,30,30,30,30,30,29,30,29,28,28,26,27,26,27,26,25,26,26,23,23,23,23,25,21,23,23,21,20,21,20,19,18,18,15,12,11,7,5,5,5,4,2,0,1,3,4,5,6,8,11,13,14,16],[31,31,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,30,30,31,31,30,31,31,30,30,30,31,30,30,30,30,30,29,30,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,31,31,30,30,29,30,29,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,30,31,31,31,31,30,30,30,31,30,30,30,30,30,30,31,31,31,30,31,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,31,30,30,31,30,30,30,31,30,30,31,30,30,31,31,31,31,31,31,31,31,31,30,31,30,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,31,30,30,30,30,30,30,30,30,30,31,30,30,30,30,29,29,28,27,27,26,27,26,26,26,26,25,24,24,23,24,23,23,22,22,20,21,20,19,18,17,15,13,11,9,6,5,5,4,3,1,0,1,3,4,5,5,8,11,12,14],[31,31,31,31,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,31,30,31,30,31,31,31,30,30,30,30,29,29,30,30,30,30,30,30,30,29,29,30,30,30,30,31,31,31,31,31,31,31,30,30,30,30,29,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,30,31,31,31,31,30,30,31,31,30,30,30,30,30,31,31,31,31,31,31,31,30,30,31,30,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,31,30,30,30,30,30,30,30,31,30,30,30,30,29,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,28,28,27,27,25,27,25,26,24,26,24,23,23,23,25,22,21,22,21,20,21,20,20,19,18,16,15,13,11,9,6,5,5,4,3,2,0,1,3,4,5,6,7,10,12],[31,31,30,30,30,30,30,29,30,29,30,30,29,30,30,30,30,30,30,31,31,31,30,31,31,31,31,30,31,30,30,30,30,30,29,30,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,29,29,30,30,30,30,30,30,31,30,31,31,30,30,30,29,30,29,29,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,31,31,31,31,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,31,30,30,30,30,30,30,29,30,30,30,30,31,30,31,31,31,30,30,30,30,30,30,30,31,31,30,31,31,31,31,31,31,30,31,31,31,30,31,31,31,31,31,31,31,31,31,30,31,30,31,31,30,31,30,30,30,30,30,30,30,31,30,30,30,31,30,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,30,30,30,30,30,29,30,30,30,30,30,30,29,30,29,29,28,26,27,25,26,26,26,26,26,24,24,24,24,25,22,22,22,22,20,22,21,20,19,19,16,16,14,13,11,9,6,5,5,4,3,2,0,1,3,5,5,5,7,10],[31,31,30,31,30,30,30,29,29,29,29,29,29,29,30,30,30,30,30,30,30,31,30,31,31,30,30,30,31,30,30,30,30,30,30,30,29,29,29,29,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,31,31,30,30,30,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,31,31,31,30,30,30,30,28,30,30,30,30,30,30,30,31,30,30,30,30,30,30,31,30,31,31,31,31,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,31,30,30,31,31,31,30,31,30,31,31,31,30,30,31,30,30,30,31,31,31,31,30,31,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,30,31,31,31,31,31,30,31,30,31,31,30,31,30,31,31,31,30,30,31,31,30,31,31,30,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,31,31,31,31,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,29,30,29,29,28,27,27,26,27,26,26,26,26,24,25,24,24,25,23,23,23,24,21,23,22,21,20,20,18,17,16,15,14,11,9,6,5,5,5,3,2,0,1,3,4,5,4,7],[31,31,30,31,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,31,31,31,30,31,31,31,30,30,31,30,30,30,30,30,30,30,29,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,31,30,30,30,30,30,29,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,31,31,31,31,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,30,30,29,30,30,30,30,31,31,31,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,30,31,31,31,30,31,31,30,30,30,31,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,31,31,31,31,31,31,30,31,30,31,31,31,31,31,31,31,31,31,31,30,30,31,30,31,31,31,30,31,31,31,31,31,31,30,31,31,30,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,31,30,31,31,31,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,27,27,27,25,27,26,26,26,27,25,24,24,24,26,23,23,23,23,21,23,21,21,20,20,18,18,17,16,15,14,11,9,7,5,5,4,4,2,0,1,3,4,4,4],[30,31,30,30,30,30,30,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,29,30,30,30,29,29,29,30,28,29,30,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,28,30,29,28,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,29,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,29,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,30,30,29,30,30,30,30,31,30,31,31,31,31,31,30,31,30,31,30,30,30,31,30,30,30,31,30,30,30,30,30,30,31,30,30,30,31,30,30,31,30,30,31,31,30,31,31,30,30,31,31,31,30,30,30,30,30,31,31,31,30,31,31,30,30,30,31,30,30,31,31,31,31,31,30,31,30,30,30,30,30,29,30,30,30,29,30,30,30,30,30,30,29,30,29,29,28,27,27,25,27,26,26,26,27,24,26,25,24,26,23,23,24,24,21,24,22,21,20,20,17,18,17,16,15,14,11,9,7,6,4,4,4,3,1,0,1,3,4,4],[30,31,30,31,30,31,30,30,29,29,29,30,29,29,30,30,30,30,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,30,29,30,29,29,28,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,31,30,30,30,30,29,30,29,28,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,31,31,30,30,29,30,28,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,31,31,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,31,30,30,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,31,31,31,31,31,31,31,30,31,30,31,30,30,30,30,30,30,30,30,31,30,30,31,30,30,31,30,30,30,31,30,30,30,30,30,31,31,30,31,30,30,30,31,30,31,31,30,30,30,30,31,31,31,30,31,31,30,30,30,31,30,30,31,31,31,30,31,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,28,28,28,26,27,26,26,26,27,25,26,25,24,26,24,23,24,24,22,24,23,22,20,20,18,18,17,17,16,15,14,12,10,8,6,5,5,4,4,2,0,1,3,4],[30,30,30,30,30,30,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,30,29,29,29,30,28,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,29,29,29,28,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,29,30,29,30,28,29,30,30,30,30,30,30,30,30,30,30,30,30,30,31,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,29,30,29,30,30,30,30,30,30,30,30,31,31,30,30,31,31,31,30,31,29,31,30,30,30,30,31,30,30,31,31,30,30,31,30,30,31,30,30,30,31,30,30,30,30,30,30,31,30,30,30,30,30,31,30,31,30,30,30,30,30,30,30,30,30,31,30,30,30,30,31,30,30,31,31,30,30,31,30,30,30,30,30,30,30,29,30,30,29,29,30,30,30,30,30,30,29,30,29,29,28,27,27,25,26,25,26,26,26,24,25,24,24,26,23,23,23,24,22,24,23,22,21,21,18,19,17,17,17,16,14,13,11,9,7,5,5,5,5,3,2,0,1,3],[30,30,29,30,29,30,29,29,29,28,29,29,29,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,29,28,29,29,28,29,29,29,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,28,30,29,28,30,30,29,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,29,30,28,30,28,30,30,29,29,29,30,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,29,30,29,30,30,30,30,29,29,30,29,29,30,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,30,29,30,29,30,30,29,29,30,30,29,29,29,30,29,29,29,30,29,30,30,30,30,31,30,30,30,30,30,31,30,30,29,31,30,30,30,30,30,29,30,30,30,29,30,30,29,30,30,30,29,30,30,30,30,30,30,29,30,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,30,30,30,30,29,30,30,29,29,30,30,29,30,30,30,30,30,30,29,29,28,29,27,27,25,25,25,25,25,25,25,23,25,25,23,25,22,23,24,24,22,24,23,22,21,21,19,18,18,18,17,16,15,14,13,11,10,8,6,5,5,5,3,2,0,1],[28,30,29,30,29,30,29,29,29,28,27,29,28,28,28,30,29,29,29,30,30,30,29,30,30,30,30,29,30,29,30,29,30,30,30,30,30,29,29,29,28,30,29,29,29,30,29,29,30,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,29,28,30,29,27,30,30,28,30,30,30,29,30,30,29,30,29,30,30,30,30,30,30,30,30,29,29,28,29,27,29,30,29,29,29,30,29,29,29,30,29,30,29,30,30,28,29,30,30,30,29,29,29,29,28,29,29,28,29,30,29,30,29,29,29,29,29,28,29,29,29,29,30,30,30,30,30,30,30,29,30,30,29,30,30,29,29,30,30,29,29,29,29,29,29,30,29,29,29,28,29,29,28,29,29,29,29,29,29,29,28,29,29,29,30,30,30,30,30,30,30,30,30,30,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,30,30,30,29,30,30,30,29,29,30,30,29,29,30,29,30,30,28,30,30,30,29,30,29,30,29,29,29,30,30,30,29,30,30,30,29,30,30,29,30,29,30,30,30,29,30,30,29,29,30,30,29,30,30,29,29,30,30,28,29,30,29,29,29,30,29,29,28,29,27,27,27,26,26,25,26,26,25,24,25,26,24,26,23,23,25,25,23,25,24,24,23,23,21,21,20,20,19,18,17,16,15,14,13,11,9,7,6,6,5,3,2,0]],"max_predicted_aligned_error":31.75}] \ No newline at end of file diff --git a/tools/battery/models/AF-Q65MG6-F1-model_v6.cif b/tools/battery/models/AF-Q65MG6-F1-model_v6.cif new file mode 100644 index 000000000..235176cc8 --- /dev/null +++ b/tools/battery/models/AF-Q65MG6-F1-model_v6.cif @@ -0,0 +1,3004 @@ +data_AF-Q65MG6-F1 +# +_entry.id AF-Q65MG6-F1 +# +loop_ +_atom_type.symbol +C +N +O +S +# +loop_ +_audit_author.name +_audit_author.pdbx_ordinal +"Jumper, John" 1 +"Evans, Richard" 2 +"Pritzel, Alexander" 3 +"Green, Tim" 4 +"Figurnov, Michael" 5 +"Ronneberger, Olaf" 6 +"Tunyasuvunakool, Kathryn" 7 +"Bates, Russ" 8 +"Zidek, Augustin" 9 +"Potapenko, Anna" 10 +"Bridgland, Alex" 11 +"Meyer, Clemens" 12 +"Kohl, Simon A. A." 13 +"Ballard, Andrew J." 14 +"Cowie, Andrew" 15 +"Romera-Paredes, Bernardino" 16 +"Nikolov, Stanislav" 17 +"Jain, Rishub" 18 +"Adler, Jonas" 19 +"Back, Trevor" 20 +"Petersen, Stig" 21 +"Reiman, David" 22 +"Clancy, Ellen" 23 +"Zielinski, Michal" 24 +"Steinegger, Martin" 25 +"Pacholska, Michalina" 26 +"Berghammer, Tamas" 27 +"Silver, David" 28 +"Vinyals, Oriol" 29 +"Senior, Andrew W." 30 +"Kavukcuoglu, Koray" 31 +"Kohli, Pushmeet" 32 +"Hassabis, Demis" 33 +# +_audit_conform.dict_location https://raw.githubusercontent.com/ihmwg/ModelCIF/master/dist/mmcif_ma.dic +_audit_conform.dict_name mmcif_ma.dic +_audit_conform.dict_version 1.3.9 +# +loop_ +_chem_comp.formula +_chem_comp.formula_weight +_chem_comp.id +_chem_comp.mon_nstd_flag +_chem_comp.name +_chem_comp.pdbx_synonyms +_chem_comp.type +"C3 H7 N O2" 89.093 ALA y ALANINE ? "L-PEPTIDE LINKING" +"C6 H15 N4 O2" 175.209 ARG y ARGININE ? "L-PEPTIDE LINKING" +"C4 H8 N2 O3" 132.118 ASN y ASPARAGINE ? "L-PEPTIDE LINKING" +"C4 H7 N O4" 133.103 ASP y "ASPARTIC ACID" ? "L-PEPTIDE LINKING" +"C3 H7 N O2 S" 121.158 CYS y CYSTEINE ? "L-PEPTIDE LINKING" +"C5 H10 N2 O3" 146.144 GLN y GLUTAMINE ? "L-PEPTIDE LINKING" +"C5 H9 N O4" 147.129 GLU y "GLUTAMIC ACID" ? "L-PEPTIDE LINKING" +"C2 H5 N O2" 75.067 GLY y GLYCINE ? "PEPTIDE LINKING" +"C6 H10 N3 O2" 156.162 HIS y HISTIDINE ? "L-PEPTIDE LINKING" +"C6 H13 N O2" 131.173 ILE y ISOLEUCINE ? "L-PEPTIDE LINKING" +"C6 H13 N O2" 131.173 LEU y LEUCINE ? "L-PEPTIDE LINKING" +"C6 H15 N2 O2" 147.195 LYS y LYSINE ? "L-PEPTIDE LINKING" +"C5 H11 N O2 S" 149.211 MET y METHIONINE ? "L-PEPTIDE LINKING" +"C9 H11 N O2" 165.189 PHE y PHENYLALANINE ? "L-PEPTIDE LINKING" +"C5 H9 N O2" 115.130 PRO y PROLINE ? "L-PEPTIDE LINKING" +"C3 H7 N O3" 105.093 SER y SERINE ? "L-PEPTIDE LINKING" +"C4 H9 N O3" 119.119 THR y THREONINE ? "L-PEPTIDE LINKING" +"C11 H12 N2 O2" 204.225 TRP y TRYPTOPHAN ? "L-PEPTIDE LINKING" +"C9 H11 N O3" 181.189 TYR y TYROSINE ? "L-PEPTIDE LINKING" +"C5 H11 N O2" 117.146 VAL y VALINE ? "L-PEPTIDE LINKING" +# +_citation.book_publisher ? +_citation.country UK +_citation.id primary +_citation.journal_full Nature +_citation.journal_id_ASTM NATUAS +_citation.journal_id_CSD 0006 +_citation.journal_id_ISSN 0028-0836 +_citation.journal_volume 596 +_citation.page_first 583 +_citation.page_last 589 +_citation.pdbx_database_id_DOI 10.1038/s41586-021-03819-2 +_citation.pdbx_database_id_PubMed 34265844 +_citation.title "Highly accurate protein structure prediction with AlphaFold" +_citation.year 2021 +# +loop_ +_citation_author.citation_id +_citation_author.name +_citation_author.ordinal +primary "Jumper, John" 1 +primary "Evans, Richard" 2 +primary "Pritzel, Alexander" 3 +primary "Green, Tim" 4 +primary "Figurnov, Michael" 5 +primary "Ronneberger, Olaf" 6 +primary "Tunyasuvunakool, Kathryn" 7 +primary "Bates, Russ" 8 +primary "Zidek, Augustin" 9 +primary "Potapenko, Anna" 10 +primary "Bridgland, Alex" 11 +primary "Meyer, Clemens" 12 +primary "Kohl, Simon A. A." 13 +primary "Ballard, Andrew J." 14 +primary "Cowie, Andrew" 15 +primary "Romera-Paredes, Bernardino" 16 +primary "Nikolov, Stanislav" 17 +primary "Jain, Rishub" 18 +primary "Adler, Jonas" 19 +primary "Back, Trevor" 20 +primary "Petersen, Stig" 21 +primary "Reiman, David" 22 +primary "Clancy, Ellen" 23 +primary "Zielinski, Michal" 24 +primary "Steinegger, Martin" 25 +primary "Pacholska, Michalina" 26 +primary "Berghammer, Tamas" 27 +primary "Silver, David" 28 +primary "Vinyals, Oriol" 29 +primary "Senior, Andrew W." 30 +primary "Kavukcuoglu, Koray" 31 +primary "Kohli, Pushmeet" 32 +primary "Hassabis, Demis" 33 +# +_database_2.database_code AF-Q65MG6-F1 +_database_2.database_id AlphaFoldDB +# +_entity.details ? +_entity.formula_weight ? +_entity.id 1 +_entity.pdbx_description "NADH-dependent nitro/flavin oxidoreductase" +_entity.pdbx_ec ? +_entity.pdbx_fragment ? +_entity.pdbx_mutation ? +_entity.pdbx_number_of_molecules 1 +_entity.src_method man +_entity.type polymer +# +_entity_poly.entity_id 1 +_entity_poly.nstd_linkage no +_entity_poly.nstd_monomer no +_entity_poly.pdbx_seq_one_letter_code +;MTEQSKKQEILDAFQFRHATKEFDPDRKISDEDFQFILEAGRLSPSSVGLEPWQFVVVQNKELREKLRQVSWGAQGQLPT +ASHFVLLLGRTAKEMRRDSGYVADQLKHVKKMPEDIIENMLKEDGVLESFQDGDFHLYESDRAMFDWVSKQTYIALANMM +TAAALIGIDSCPIEGFNYDKVHDILEKEGVLEDGRFDISVMAAFGYRVKEPRPKTRRALDQIVKWVE +; +_entity_poly.pdbx_seq_one_letter_code_can +;MTEQSKKQEILDAFQFRHATKEFDPDRKISDEDFQFILEAGRLSPSSVGLEPWQFVVVQNKELREKLRQVSWGAQGQLPT +ASHFVLLLGRTAKEMRRDSGYVADQLKHVKKMPEDIIENMLKEDGVLESFQDGDFHLYESDRAMFDWVSKQTYIALANMM +TAAALIGIDSCPIEGFNYDKVHDILEKEGVLEDGRFDISVMAAFGYRVKEPRPKTRRALDQIVKWVE +; +_entity_poly.pdbx_strand_id A +_entity_poly.type polypeptide(L) +# +loop_ +_entity_poly_seq.entity_id +_entity_poly_seq.hetero +_entity_poly_seq.mon_id +_entity_poly_seq.num +1 n MET 1 +1 n THR 2 +1 n GLU 3 +1 n GLN 4 +1 n SER 5 +1 n LYS 6 +1 n LYS 7 +1 n GLN 8 +1 n GLU 9 +1 n ILE 10 +1 n LEU 11 +1 n ASP 12 +1 n ALA 13 +1 n PHE 14 +1 n GLN 15 +1 n PHE 16 +1 n ARG 17 +1 n HIS 18 +1 n ALA 19 +1 n THR 20 +1 n LYS 21 +1 n GLU 22 +1 n PHE 23 +1 n ASP 24 +1 n PRO 25 +1 n ASP 26 +1 n ARG 27 +1 n LYS 28 +1 n ILE 29 +1 n SER 30 +1 n ASP 31 +1 n GLU 32 +1 n ASP 33 +1 n PHE 34 +1 n GLN 35 +1 n PHE 36 +1 n ILE 37 +1 n LEU 38 +1 n GLU 39 +1 n ALA 40 +1 n GLY 41 +1 n ARG 42 +1 n LEU 43 +1 n SER 44 +1 n PRO 45 +1 n SER 46 +1 n SER 47 +1 n VAL 48 +1 n GLY 49 +1 n LEU 50 +1 n GLU 51 +1 n PRO 52 +1 n TRP 53 +1 n GLN 54 +1 n PHE 55 +1 n VAL 56 +1 n VAL 57 +1 n VAL 58 +1 n GLN 59 +1 n ASN 60 +1 n LYS 61 +1 n GLU 62 +1 n LEU 63 +1 n ARG 64 +1 n GLU 65 +1 n LYS 66 +1 n LEU 67 +1 n ARG 68 +1 n GLN 69 +1 n VAL 70 +1 n SER 71 +1 n TRP 72 +1 n GLY 73 +1 n ALA 74 +1 n GLN 75 +1 n GLY 76 +1 n GLN 77 +1 n LEU 78 +1 n PRO 79 +1 n THR 80 +1 n ALA 81 +1 n SER 82 +1 n HIS 83 +1 n PHE 84 +1 n VAL 85 +1 n LEU 86 +1 n LEU 87 +1 n LEU 88 +1 n GLY 89 +1 n ARG 90 +1 n THR 91 +1 n ALA 92 +1 n LYS 93 +1 n GLU 94 +1 n MET 95 +1 n ARG 96 +1 n ARG 97 +1 n ASP 98 +1 n SER 99 +1 n GLY 100 +1 n TYR 101 +1 n VAL 102 +1 n ALA 103 +1 n ASP 104 +1 n GLN 105 +1 n LEU 106 +1 n LYS 107 +1 n HIS 108 +1 n VAL 109 +1 n LYS 110 +1 n LYS 111 +1 n MET 112 +1 n PRO 113 +1 n GLU 114 +1 n ASP 115 +1 n ILE 116 +1 n ILE 117 +1 n GLU 118 +1 n ASN 119 +1 n MET 120 +1 n LEU 121 +1 n LYS 122 +1 n GLU 123 +1 n ASP 124 +1 n GLY 125 +1 n VAL 126 +1 n LEU 127 +1 n GLU 128 +1 n SER 129 +1 n PHE 130 +1 n GLN 131 +1 n ASP 132 +1 n GLY 133 +1 n ASP 134 +1 n PHE 135 +1 n HIS 136 +1 n LEU 137 +1 n TYR 138 +1 n GLU 139 +1 n SER 140 +1 n ASP 141 +1 n ARG 142 +1 n ALA 143 +1 n MET 144 +1 n PHE 145 +1 n ASP 146 +1 n TRP 147 +1 n VAL 148 +1 n SER 149 +1 n LYS 150 +1 n GLN 151 +1 n THR 152 +1 n TYR 153 +1 n ILE 154 +1 n ALA 155 +1 n LEU 156 +1 n ALA 157 +1 n ASN 158 +1 n MET 159 +1 n MET 160 +1 n THR 161 +1 n ALA 162 +1 n ALA 163 +1 n ALA 164 +1 n LEU 165 +1 n ILE 166 +1 n GLY 167 +1 n ILE 168 +1 n ASP 169 +1 n SER 170 +1 n CYS 171 +1 n PRO 172 +1 n ILE 173 +1 n GLU 174 +1 n GLY 175 +1 n PHE 176 +1 n ASN 177 +1 n TYR 178 +1 n ASP 179 +1 n LYS 180 +1 n VAL 181 +1 n HIS 182 +1 n ASP 183 +1 n ILE 184 +1 n LEU 185 +1 n GLU 186 +1 n LYS 187 +1 n GLU 188 +1 n GLY 189 +1 n VAL 190 +1 n LEU 191 +1 n GLU 192 +1 n ASP 193 +1 n GLY 194 +1 n ARG 195 +1 n PHE 196 +1 n ASP 197 +1 n ILE 198 +1 n SER 199 +1 n VAL 200 +1 n MET 201 +1 n ALA 202 +1 n ALA 203 +1 n PHE 204 +1 n GLY 205 +1 n TYR 206 +1 n ARG 207 +1 n VAL 208 +1 n LYS 209 +1 n GLU 210 +1 n PRO 211 +1 n ARG 212 +1 n PRO 213 +1 n LYS 214 +1 n THR 215 +1 n ARG 216 +1 n ARG 217 +1 n ALA 218 +1 n LEU 219 +1 n ASP 220 +1 n GLN 221 +1 n ILE 222 +1 n VAL 223 +1 n LYS 224 +1 n TRP 225 +1 n VAL 226 +1 n GLU 227 +# +loop_ +_ma_data.content_type +_ma_data.id +_ma_data.name +"model coordinates" 1 Model +"input structure" 2 "Input structure" +# +_ma_model_list.data_id 1 +_ma_model_list.model_group_id 1 +_ma_model_list.model_group_name "AlphaFold Monomer v2.0 model" +_ma_model_list.model_id 1 +_ma_model_list.model_name "Top ranked model" +_ma_model_list.model_type "Ab initio model" +_ma_model_list.ordinal_id 1 +# +loop_ +_ma_protocol_step.method_type +_ma_protocol_step.ordinal_id +_ma_protocol_step.protocol_id +_ma_protocol_step.step_id +"coevolution MSA" 1 1 1 +"template search" 2 1 2 +modeling 3 1 3 +# +loop_ +_ma_qa_metric.id +_ma_qa_metric.mode +_ma_qa_metric.name +_ma_qa_metric.software_group_id +_ma_qa_metric.type +1 global pLDDT 1 pLDDT +2 local pLDDT 1 pLDDT +# +_ma_qa_metric_global.metric_id 1 +_ma_qa_metric_global.metric_value 97.69 +_ma_qa_metric_global.model_id 1 +_ma_qa_metric_global.ordinal_id 1 +# +loop_ +_ma_qa_metric_local.label_asym_id +_ma_qa_metric_local.label_comp_id +_ma_qa_metric_local.label_seq_id +_ma_qa_metric_local.metric_id +_ma_qa_metric_local.metric_value +_ma_qa_metric_local.model_id +_ma_qa_metric_local.ordinal_id +A MET 1 2 73.31 1 1 +A THR 2 2 93.94 1 2 +A GLU 3 2 95.62 1 3 +A GLN 4 2 95.50 1 4 +A SER 5 2 96.06 1 5 +A LYS 6 2 96.94 1 6 +A LYS 7 2 97.62 1 7 +A GLN 8 2 97.81 1 8 +A GLU 9 2 96.81 1 9 +A ILE 10 2 97.69 1 10 +A LEU 11 2 98.12 1 11 +A ASP 12 2 97.94 1 12 +A ALA 13 2 98.25 1 13 +A PHE 14 2 98.19 1 14 +A GLN 15 2 97.69 1 15 +A PHE 16 2 98.06 1 16 +A ARG 17 2 97.88 1 17 +A HIS 18 2 96.56 1 18 +A ALA 19 2 98.00 1 19 +A THR 20 2 98.38 1 20 +A LYS 21 2 97.69 1 21 +A GLU 22 2 98.19 1 22 +A PHE 23 2 98.69 1 23 +A ASP 24 2 98.56 1 24 +A PRO 25 2 97.56 1 25 +A ASP 26 2 97.75 1 26 +A ARG 27 2 98.25 1 27 +A LYS 28 2 98.56 1 28 +A ILE 29 2 98.81 1 29 +A SER 30 2 98.81 1 30 +A ASP 31 2 98.62 1 31 +A GLU 32 2 98.75 1 32 +A ASP 33 2 98.88 1 33 +A PHE 34 2 98.88 1 34 +A GLN 35 2 98.88 1 35 +A PHE 36 2 98.88 1 36 +A ILE 37 2 98.94 1 37 +A LEU 38 2 98.94 1 38 +A GLU 39 2 98.88 1 39 +A ALA 40 2 98.88 1 40 +A GLY 41 2 98.81 1 41 +A ARG 42 2 98.75 1 42 +A LEU 43 2 98.75 1 43 +A SER 44 2 98.81 1 44 +A PRO 45 2 98.56 1 45 +A SER 46 2 98.62 1 46 +A SER 47 2 97.62 1 47 +A VAL 48 2 95.44 1 48 +A GLY 49 2 96.81 1 49 +A LEU 50 2 97.75 1 50 +A GLU 51 2 98.50 1 51 +A PRO 52 2 98.56 1 52 +A TRP 53 2 98.75 1 53 +A GLN 54 2 98.69 1 54 +A PHE 55 2 98.88 1 55 +A VAL 56 2 98.88 1 56 +A VAL 57 2 98.81 1 57 +A VAL 58 2 98.69 1 58 +A GLN 59 2 98.25 1 59 +A ASN 60 2 98.50 1 60 +A LYS 61 2 97.94 1 61 +A GLU 62 2 98.50 1 62 +A LEU 63 2 98.69 1 63 +A ARG 64 2 98.75 1 64 +A GLU 65 2 98.69 1 65 +A LYS 66 2 98.75 1 66 +A LEU 67 2 98.75 1 67 +A ARG 68 2 98.56 1 68 +A GLN 69 2 98.62 1 69 +A VAL 70 2 98.75 1 70 +A SER 71 2 98.69 1 71 +A TRP 72 2 98.31 1 72 +A GLY 73 2 98.12 1 73 +A ALA 74 2 98.25 1 74 +A GLN 75 2 98.50 1 75 +A GLY 76 2 97.94 1 76 +A GLN 77 2 98.69 1 77 +A LEU 78 2 98.62 1 78 +A PRO 79 2 98.25 1 79 +A THR 80 2 98.62 1 80 +A ALA 81 2 98.75 1 81 +A SER 82 2 98.88 1 82 +A HIS 83 2 98.88 1 83 +A PHE 84 2 98.94 1 84 +A VAL 85 2 98.94 1 85 +A LEU 86 2 98.94 1 86 +A LEU 87 2 98.88 1 87 +A LEU 88 2 98.94 1 88 +A GLY 89 2 98.81 1 89 +A ARG 90 2 98.75 1 90 +A THR 91 2 98.56 1 91 +A ALA 92 2 97.69 1 92 +A LYS 93 2 96.06 1 93 +A GLU 94 2 97.94 1 94 +A MET 95 2 97.94 1 95 +A ARG 96 2 96.44 1 96 +A ARG 97 2 95.38 1 97 +A ASP 98 2 91.44 1 98 +A SER 99 2 96.69 1 99 +A GLY 100 2 96.75 1 100 +A TYR 101 2 97.88 1 101 +A VAL 102 2 98.00 1 102 +A ALA 103 2 97.19 1 103 +A ASP 104 2 97.62 1 104 +A GLN 105 2 97.88 1 105 +A LEU 106 2 97.44 1 106 +A LYS 107 2 97.75 1 107 +A HIS 108 2 97.69 1 108 +A VAL 109 2 97.06 1 109 +A LYS 110 2 96.62 1 110 +A LYS 111 2 97.25 1 111 +A MET 112 2 97.19 1 112 +A PRO 113 2 97.50 1 113 +A GLU 114 2 96.12 1 114 +A ASP 115 2 96.81 1 115 +A ILE 116 2 96.50 1 116 +A ILE 117 2 96.38 1 117 +A GLU 118 2 95.75 1 118 +A ASN 119 2 95.69 1 119 +A MET 120 2 96.50 1 120 +A LEU 121 2 96.25 1 121 +A LYS 122 2 95.56 1 122 +A GLU 123 2 93.38 1 123 +A ASP 124 2 93.38 1 124 +A GLY 125 2 96.06 1 125 +A VAL 126 2 96.00 1 126 +A LEU 127 2 96.19 1 127 +A GLU 128 2 96.62 1 128 +A SER 129 2 97.06 1 129 +A PHE 130 2 97.69 1 130 +A GLN 131 2 97.31 1 131 +A ASP 132 2 93.88 1 132 +A GLY 133 2 94.12 1 133 +A ASP 134 2 96.56 1 134 +A PHE 135 2 97.06 1 135 +A HIS 136 2 97.19 1 136 +A LEU 137 2 97.88 1 137 +A TYR 138 2 96.81 1 138 +A GLU 139 2 97.12 1 139 +A SER 140 2 98.19 1 140 +A ASP 141 2 97.81 1 141 +A ARG 142 2 98.06 1 142 +A ALA 143 2 98.44 1 143 +A MET 144 2 98.56 1 144 +A PHE 145 2 98.62 1 145 +A ASP 146 2 98.75 1 146 +A TRP 147 2 98.69 1 147 +A VAL 148 2 98.75 1 148 +A SER 149 2 98.75 1 149 +A LYS 150 2 98.88 1 150 +A GLN 151 2 98.88 1 151 +A THR 152 2 98.88 1 152 +A TYR 153 2 98.94 1 153 +A ILE 154 2 98.94 1 154 +A ALA 155 2 98.88 1 155 +A LEU 156 2 98.94 1 156 +A ALA 157 2 98.94 1 157 +A ASN 158 2 98.94 1 158 +A MET 159 2 98.94 1 159 +A MET 160 2 98.94 1 160 +A THR 161 2 98.88 1 161 +A ALA 162 2 98.81 1 162 +A ALA 163 2 98.88 1 163 +A ALA 164 2 98.81 1 164 +A LEU 165 2 98.50 1 165 +A ILE 166 2 98.31 1 166 +A GLY 167 2 98.31 1 167 +A ILE 168 2 98.88 1 168 +A ASP 169 2 98.88 1 169 +A SER 170 2 98.94 1 170 +A CYS 171 2 98.88 1 171 +A PRO 172 2 98.88 1 172 +A ILE 173 2 98.88 1 173 +A GLU 174 2 98.69 1 174 +A GLY 175 2 98.38 1 175 +A PHE 176 2 98.75 1 176 +A ASN 177 2 98.75 1 177 +A TYR 178 2 98.56 1 178 +A ASP 179 2 98.62 1 179 +A LYS 180 2 98.81 1 180 +A VAL 181 2 98.81 1 181 +A HIS 182 2 98.62 1 182 +A ASP 183 2 98.69 1 183 +A ILE 184 2 98.81 1 184 +A LEU 185 2 98.69 1 185 +A GLU 186 2 98.31 1 186 +A LYS 187 2 98.31 1 187 +A GLU 188 2 97.75 1 188 +A GLY 189 2 97.88 1 189 +A VAL 190 2 98.44 1 190 +A LEU 191 2 98.44 1 191 +A GLU 192 2 97.25 1 192 +A ASP 193 2 94.12 1 193 +A GLY 194 2 95.12 1 194 +A ARG 195 2 98.12 1 195 +A PHE 196 2 98.81 1 196 +A ASP 197 2 98.69 1 197 +A ILE 198 2 98.75 1 198 +A SER 199 2 98.81 1 199 +A VAL 200 2 98.94 1 200 +A MET 201 2 98.88 1 201 +A ALA 202 2 98.94 1 202 +A ALA 203 2 98.94 1 203 +A PHE 204 2 98.94 1 204 +A GLY 205 2 98.81 1 205 +A TYR 206 2 98.81 1 206 +A ARG 207 2 98.25 1 207 +A VAL 208 2 98.00 1 208 +A LYS 209 2 95.50 1 209 +A GLU 210 2 95.88 1 210 +A PRO 211 2 94.12 1 211 +A ARG 212 2 93.50 1 212 +A PRO 213 2 94.69 1 213 +A LYS 214 2 95.56 1 214 +A THR 215 2 96.62 1 215 +A ARG 216 2 97.62 1 216 +A ARG 217 2 97.81 1 217 +A ALA 218 2 98.06 1 218 +A LEU 219 2 97.75 1 219 +A ASP 220 2 97.69 1 220 +A GLN 221 2 98.06 1 221 +A ILE 222 2 97.56 1 222 +A VAL 223 2 98.25 1 223 +A LYS 224 2 97.75 1 224 +A TRP 225 2 96.38 1 225 +A VAL 226 2 95.69 1 226 +A GLU 227 2 90.56 1 227 +# +_ma_software_group.group_id 1 +_ma_software_group.ordinal_id 1 +_ma_software_group.software_id 1 +# +_ma_target_entity.data_id 1 +_ma_target_entity.entity_id 1 +_ma_target_entity.origin "reference database" +# +_ma_target_entity_instance.asym_id A +_ma_target_entity_instance.details . +_ma_target_entity_instance.entity_id 1 +# +_ma_target_ref_db_details.db_accession Q65MG6 +_ma_target_ref_db_details.db_code Q65MG6_BACLD +_ma_target_ref_db_details.db_name UNP +_ma_target_ref_db_details.gene_name nfsB +_ma_target_ref_db_details.ncbi_taxonomy_id 279010 +_ma_target_ref_db_details.organism_scientific "Bacillus licheniformis (strain ATCC 14580 / DSM 13 / JCM 2505 / CCUG 7422 / NBRC 12200 / NCIMB 9375 / NCTC 10341 / NRRL NRS-1264 / Gibson 46)" +_ma_target_ref_db_details.seq_db_align_begin 1 +_ma_target_ref_db_details.seq_db_align_end 227 +_ma_target_ref_db_details.seq_db_isoform ? +_ma_target_ref_db_details.seq_db_sequence_checksum 4319BE76C74EE6EA +_ma_target_ref_db_details.seq_db_sequence_version_date 2004-10-25 +_ma_target_ref_db_details.target_entity_id 1 +# +loop_ +_ma_template_details.ordinal_id +_ma_template_details.target_asym_id +_ma_template_details.template_auth_asym_id +_ma_template_details.template_data_id +_ma_template_details.template_entity_type +_ma_template_details.template_id +_ma_template_details.template_model_num +_ma_template_details.template_origin +_ma_template_details.template_trans_matrix_id +1 A A 2 polymer 1 1 "reference database" 1 +2 A D 2 polymer 2 1 "reference database" 1 +3 A A 2 polymer 3 1 "reference database" 1 +4 A B 2 polymer 4 1 "reference database" 1 +# +loop_ +_ma_template_ref_db_details.db_accession_code +_ma_template_ref_db_details.db_name +_ma_template_ref_db_details.template_id +7LDQ PDB 1 +2HAY PDB 2 +6WT2 PDB 3 +4QLX PDB 4 +# +_ma_template_trans_matrix.id 1 +_ma_template_trans_matrix.rot_matrix[1][1] 1.0 +_ma_template_trans_matrix.rot_matrix[1][2] 0.0 +_ma_template_trans_matrix.rot_matrix[1][3] 0.0 +_ma_template_trans_matrix.rot_matrix[2][1] 0.0 +_ma_template_trans_matrix.rot_matrix[2][2] 1.0 +_ma_template_trans_matrix.rot_matrix[2][3] 0.0 +_ma_template_trans_matrix.rot_matrix[3][1] 0.0 +_ma_template_trans_matrix.rot_matrix[3][2] 0.0 +_ma_template_trans_matrix.rot_matrix[3][3] 1.0 +_ma_template_trans_matrix.tr_vector[1] 0.0 +_ma_template_trans_matrix.tr_vector[2] 0.0 +_ma_template_trans_matrix.tr_vector[3] 0.0 +# +loop_ +_pdbx_audit_revision_details.data_content_type +_pdbx_audit_revision_details.description +_pdbx_audit_revision_details.ordinal +_pdbx_audit_revision_details.provider +_pdbx_audit_revision_details.revision_ordinal +_pdbx_audit_revision_details.type +"Structure model" "Format fixes, new metadata, initial UniProt release" 3 repository 3 Remediation +"Structure model" "Improved prediction accuracy, small format fixes" 4 repository 4 Remediation +"Structure model" "Update to UniProt 2024_06, small format fixes" 5 repository 5 Release +"Structure model" "Update to UniProt 2025_03" 6 repository 6 Release +# +loop_ +_pdbx_audit_revision_history.data_content_type +_pdbx_audit_revision_history.major_revision +_pdbx_audit_revision_history.minor_revision +_pdbx_audit_revision_history.ordinal +_pdbx_audit_revision_history.revision_date +"Structure model" 3 0 3 2022-06-01 +"Structure model" 4 0 4 2022-09-30 +"Structure model" 5 0 5 2025-03-31 +"Structure model" 6 0 6 2025-08-01 +# +loop_ +_pdbx_data_usage.details +_pdbx_data_usage.id +_pdbx_data_usage.name +_pdbx_data_usage.type +_pdbx_data_usage.url +"Data in this file is available under a CC-BY-4.0 license." 1 CC-BY-4.0 license https://creativecommons.org/licenses/by/4.0/ +;ALPHAFOLD DATA, COPYRIGHT (2021) DEEPMIND TECHNOLOGIES LIMITED. THE INFORMATION +PROVIDED IS THEORETICAL MODELLING ONLY AND CAUTION SHOULD BE EXERCISED IN ITS +USE. IT IS PROVIDED "AS-IS" WITHOUT ANY WARRANTY OF ANY KIND, WHETHER EXPRESSED +OR IMPLIED. NO WARRANTY IS GIVEN THAT USE OF THE INFORMATION SHALL NOT INFRINGE +THE RIGHTS OF ANY THIRD PARTY. DISCLAIMER: THE INFORMATION IS NOT INTENDED TO BE +A SUBSTITUTE FOR PROFESSIONAL MEDICAL ADVICE, DIAGNOSIS, OR TREATMENT, AND DOES +NOT CONSTITUTE MEDICAL OR OTHER PROFESSIONAL ADVICE. IT IS AVAILABLE FOR +ACADEMIC AND COMMERCIAL PURPOSES, UNDER CC-BY 4.0 LICENCE. +; +2 ? disclaimer ? +# +_pdbx_database_status.entry_id AF-Q65MG6-F1 +_pdbx_database_status.recvd_initial_deposition_date 2022-06-01 +_pdbx_database_status.status_code REL +# +loop_ +_pdbx_poly_seq_scheme.asym_id +_pdbx_poly_seq_scheme.auth_seq_num +_pdbx_poly_seq_scheme.entity_id +_pdbx_poly_seq_scheme.hetero +_pdbx_poly_seq_scheme.mon_id +_pdbx_poly_seq_scheme.pdb_ins_code +_pdbx_poly_seq_scheme.pdb_mon_id +_pdbx_poly_seq_scheme.pdb_seq_num +_pdbx_poly_seq_scheme.pdb_strand_id +_pdbx_poly_seq_scheme.seq_id +A 1 1 n MET . MET 1 A 1 +A 2 1 n THR . THR 2 A 2 +A 3 1 n GLU . GLU 3 A 3 +A 4 1 n GLN . GLN 4 A 4 +A 5 1 n SER . SER 5 A 5 +A 6 1 n LYS . LYS 6 A 6 +A 7 1 n LYS . LYS 7 A 7 +A 8 1 n GLN . GLN 8 A 8 +A 9 1 n GLU . GLU 9 A 9 +A 10 1 n ILE . ILE 10 A 10 +A 11 1 n LEU . LEU 11 A 11 +A 12 1 n ASP . ASP 12 A 12 +A 13 1 n ALA . ALA 13 A 13 +A 14 1 n PHE . PHE 14 A 14 +A 15 1 n GLN . GLN 15 A 15 +A 16 1 n PHE . PHE 16 A 16 +A 17 1 n ARG . ARG 17 A 17 +A 18 1 n HIS . HIS 18 A 18 +A 19 1 n ALA . ALA 19 A 19 +A 20 1 n THR . THR 20 A 20 +A 21 1 n LYS . LYS 21 A 21 +A 22 1 n GLU . GLU 22 A 22 +A 23 1 n PHE . PHE 23 A 23 +A 24 1 n ASP . ASP 24 A 24 +A 25 1 n PRO . PRO 25 A 25 +A 26 1 n ASP . ASP 26 A 26 +A 27 1 n ARG . ARG 27 A 27 +A 28 1 n LYS . LYS 28 A 28 +A 29 1 n ILE . ILE 29 A 29 +A 30 1 n SER . SER 30 A 30 +A 31 1 n ASP . ASP 31 A 31 +A 32 1 n GLU . GLU 32 A 32 +A 33 1 n ASP . ASP 33 A 33 +A 34 1 n PHE . PHE 34 A 34 +A 35 1 n GLN . GLN 35 A 35 +A 36 1 n PHE . PHE 36 A 36 +A 37 1 n ILE . ILE 37 A 37 +A 38 1 n LEU . LEU 38 A 38 +A 39 1 n GLU . GLU 39 A 39 +A 40 1 n ALA . ALA 40 A 40 +A 41 1 n GLY . GLY 41 A 41 +A 42 1 n ARG . ARG 42 A 42 +A 43 1 n LEU . LEU 43 A 43 +A 44 1 n SER . SER 44 A 44 +A 45 1 n PRO . PRO 45 A 45 +A 46 1 n SER . SER 46 A 46 +A 47 1 n SER . SER 47 A 47 +A 48 1 n VAL . VAL 48 A 48 +A 49 1 n GLY . GLY 49 A 49 +A 50 1 n LEU . LEU 50 A 50 +A 51 1 n GLU . GLU 51 A 51 +A 52 1 n PRO . PRO 52 A 52 +A 53 1 n TRP . TRP 53 A 53 +A 54 1 n GLN . GLN 54 A 54 +A 55 1 n PHE . PHE 55 A 55 +A 56 1 n VAL . VAL 56 A 56 +A 57 1 n VAL . VAL 57 A 57 +A 58 1 n VAL . VAL 58 A 58 +A 59 1 n GLN . GLN 59 A 59 +A 60 1 n ASN . ASN 60 A 60 +A 61 1 n LYS . LYS 61 A 61 +A 62 1 n GLU . GLU 62 A 62 +A 63 1 n LEU . LEU 63 A 63 +A 64 1 n ARG . ARG 64 A 64 +A 65 1 n GLU . GLU 65 A 65 +A 66 1 n LYS . LYS 66 A 66 +A 67 1 n LEU . LEU 67 A 67 +A 68 1 n ARG . ARG 68 A 68 +A 69 1 n GLN . GLN 69 A 69 +A 70 1 n VAL . VAL 70 A 70 +A 71 1 n SER . SER 71 A 71 +A 72 1 n TRP . TRP 72 A 72 +A 73 1 n GLY . GLY 73 A 73 +A 74 1 n ALA . ALA 74 A 74 +A 75 1 n GLN . GLN 75 A 75 +A 76 1 n GLY . GLY 76 A 76 +A 77 1 n GLN . GLN 77 A 77 +A 78 1 n LEU . LEU 78 A 78 +A 79 1 n PRO . PRO 79 A 79 +A 80 1 n THR . THR 80 A 80 +A 81 1 n ALA . ALA 81 A 81 +A 82 1 n SER . SER 82 A 82 +A 83 1 n HIS . HIS 83 A 83 +A 84 1 n PHE . PHE 84 A 84 +A 85 1 n VAL . VAL 85 A 85 +A 86 1 n LEU . LEU 86 A 86 +A 87 1 n LEU . LEU 87 A 87 +A 88 1 n LEU . LEU 88 A 88 +A 89 1 n GLY . GLY 89 A 89 +A 90 1 n ARG . ARG 90 A 90 +A 91 1 n THR . THR 91 A 91 +A 92 1 n ALA . ALA 92 A 92 +A 93 1 n LYS . LYS 93 A 93 +A 94 1 n GLU . GLU 94 A 94 +A 95 1 n MET . MET 95 A 95 +A 96 1 n ARG . ARG 96 A 96 +A 97 1 n ARG . ARG 97 A 97 +A 98 1 n ASP . ASP 98 A 98 +A 99 1 n SER . SER 99 A 99 +A 100 1 n GLY . GLY 100 A 100 +A 101 1 n TYR . TYR 101 A 101 +A 102 1 n VAL . VAL 102 A 102 +A 103 1 n ALA . ALA 103 A 103 +A 104 1 n ASP . ASP 104 A 104 +A 105 1 n GLN . GLN 105 A 105 +A 106 1 n LEU . LEU 106 A 106 +A 107 1 n LYS . LYS 107 A 107 +A 108 1 n HIS . HIS 108 A 108 +A 109 1 n VAL . VAL 109 A 109 +A 110 1 n LYS . LYS 110 A 110 +A 111 1 n LYS . LYS 111 A 111 +A 112 1 n MET . MET 112 A 112 +A 113 1 n PRO . PRO 113 A 113 +A 114 1 n GLU . GLU 114 A 114 +A 115 1 n ASP . ASP 115 A 115 +A 116 1 n ILE . ILE 116 A 116 +A 117 1 n ILE . ILE 117 A 117 +A 118 1 n GLU . GLU 118 A 118 +A 119 1 n ASN . ASN 119 A 119 +A 120 1 n MET . MET 120 A 120 +A 121 1 n LEU . LEU 121 A 121 +A 122 1 n LYS . LYS 122 A 122 +A 123 1 n GLU . GLU 123 A 123 +A 124 1 n ASP . ASP 124 A 124 +A 125 1 n GLY . GLY 125 A 125 +A 126 1 n VAL . VAL 126 A 126 +A 127 1 n LEU . LEU 127 A 127 +A 128 1 n GLU . GLU 128 A 128 +A 129 1 n SER . SER 129 A 129 +A 130 1 n PHE . PHE 130 A 130 +A 131 1 n GLN . GLN 131 A 131 +A 132 1 n ASP . ASP 132 A 132 +A 133 1 n GLY . GLY 133 A 133 +A 134 1 n ASP . ASP 134 A 134 +A 135 1 n PHE . PHE 135 A 135 +A 136 1 n HIS . HIS 136 A 136 +A 137 1 n LEU . LEU 137 A 137 +A 138 1 n TYR . TYR 138 A 138 +A 139 1 n GLU . GLU 139 A 139 +A 140 1 n SER . SER 140 A 140 +A 141 1 n ASP . ASP 141 A 141 +A 142 1 n ARG . ARG 142 A 142 +A 143 1 n ALA . ALA 143 A 143 +A 144 1 n MET . MET 144 A 144 +A 145 1 n PHE . PHE 145 A 145 +A 146 1 n ASP . ASP 146 A 146 +A 147 1 n TRP . TRP 147 A 147 +A 148 1 n VAL . VAL 148 A 148 +A 149 1 n SER . SER 149 A 149 +A 150 1 n LYS . LYS 150 A 150 +A 151 1 n GLN . GLN 151 A 151 +A 152 1 n THR . THR 152 A 152 +A 153 1 n TYR . TYR 153 A 153 +A 154 1 n ILE . ILE 154 A 154 +A 155 1 n ALA . ALA 155 A 155 +A 156 1 n LEU . LEU 156 A 156 +A 157 1 n ALA . ALA 157 A 157 +A 158 1 n ASN . ASN 158 A 158 +A 159 1 n MET . MET 159 A 159 +A 160 1 n MET . MET 160 A 160 +A 161 1 n THR . THR 161 A 161 +A 162 1 n ALA . ALA 162 A 162 +A 163 1 n ALA . ALA 163 A 163 +A 164 1 n ALA . ALA 164 A 164 +A 165 1 n LEU . LEU 165 A 165 +A 166 1 n ILE . ILE 166 A 166 +A 167 1 n GLY . GLY 167 A 167 +A 168 1 n ILE . ILE 168 A 168 +A 169 1 n ASP . ASP 169 A 169 +A 170 1 n SER . SER 170 A 170 +A 171 1 n CYS . CYS 171 A 171 +A 172 1 n PRO . PRO 172 A 172 +A 173 1 n ILE . ILE 173 A 173 +A 174 1 n GLU . GLU 174 A 174 +A 175 1 n GLY . GLY 175 A 175 +A 176 1 n PHE . PHE 176 A 176 +A 177 1 n ASN . ASN 177 A 177 +A 178 1 n TYR . TYR 178 A 178 +A 179 1 n ASP . ASP 179 A 179 +A 180 1 n LYS . LYS 180 A 180 +A 181 1 n VAL . VAL 181 A 181 +A 182 1 n HIS . HIS 182 A 182 +A 183 1 n ASP . ASP 183 A 183 +A 184 1 n ILE . ILE 184 A 184 +A 185 1 n LEU . LEU 185 A 185 +A 186 1 n GLU . GLU 186 A 186 +A 187 1 n LYS . LYS 187 A 187 +A 188 1 n GLU . GLU 188 A 188 +A 189 1 n GLY . GLY 189 A 189 +A 190 1 n VAL . VAL 190 A 190 +A 191 1 n LEU . LEU 191 A 191 +A 192 1 n GLU . GLU 192 A 192 +A 193 1 n ASP . ASP 193 A 193 +A 194 1 n GLY . GLY 194 A 194 +A 195 1 n ARG . ARG 195 A 195 +A 196 1 n PHE . PHE 196 A 196 +A 197 1 n ASP . ASP 197 A 197 +A 198 1 n ILE . ILE 198 A 198 +A 199 1 n SER . SER 199 A 199 +A 200 1 n VAL . VAL 200 A 200 +A 201 1 n MET . MET 201 A 201 +A 202 1 n ALA . ALA 202 A 202 +A 203 1 n ALA . ALA 203 A 203 +A 204 1 n PHE . PHE 204 A 204 +A 205 1 n GLY . GLY 205 A 205 +A 206 1 n TYR . TYR 206 A 206 +A 207 1 n ARG . ARG 207 A 207 +A 208 1 n VAL . VAL 208 A 208 +A 209 1 n LYS . LYS 209 A 209 +A 210 1 n GLU . GLU 210 A 210 +A 211 1 n PRO . PRO 211 A 211 +A 212 1 n ARG . ARG 212 A 212 +A 213 1 n PRO . PRO 213 A 213 +A 214 1 n LYS . LYS 214 A 214 +A 215 1 n THR . THR 215 A 215 +A 216 1 n ARG . ARG 216 A 216 +A 217 1 n ARG . ARG 217 A 217 +A 218 1 n ALA . ALA 218 A 218 +A 219 1 n LEU . LEU 219 A 219 +A 220 1 n ASP . ASP 220 A 220 +A 221 1 n GLN . GLN 221 A 221 +A 222 1 n ILE . ILE 222 A 222 +A 223 1 n VAL . VAL 223 A 223 +A 224 1 n LYS . LYS 224 A 224 +A 225 1 n TRP . TRP 225 A 225 +A 226 1 n VAL . VAL 226 A 226 +A 227 1 n GLU . GLU 227 A 227 +# +loop_ +_software.classification +_software.date +_software.description +_software.name +_software.pdbx_ordinal +_software.type +_software.version +other ? "Structure prediction" AlphaFold 1 package v2.0 +other ? "Secondary structure" dssp 2 library 4 +# +_struct_asym.entity_id 1 +_struct_asym.id A +# +loop_ +_struct_conf.beg_auth_asym_id +_struct_conf.beg_auth_comp_id +_struct_conf.beg_auth_seq_id +_struct_conf.beg_label_asym_id +_struct_conf.beg_label_comp_id +_struct_conf.beg_label_seq_id +_struct_conf.conf_type_id +_struct_conf.end_auth_asym_id +_struct_conf.end_auth_comp_id +_struct_conf.end_auth_seq_id +_struct_conf.end_label_asym_id +_struct_conf.end_label_comp_id +_struct_conf.end_label_seq_id +_struct_conf.id +_struct_conf.pdbx_beg_PDB_ins_code +_struct_conf.pdbx_end_PDB_ins_code +A GLU 3 A GLU 3 HELX_RH_AL_P A PHE 16 A PHE 16 HELX_RH_AL_P1 ? ? +A ALA 19 A ALA 19 STRN A ALA 19 A ALA 19 STRN1 ? ? +A PHE 23 A PHE 23 STRN A PHE 23 A PHE 23 STRN2 ? ? +A PRO 25 A PRO 25 BEND A ASP 26 A ASP 26 BEND1 ? ? +A LYS 28 A LYS 28 HELX_LH_PP_P A SER 30 A SER 30 HELX_LH_PP_P1 ? ? +A ASP 31 A ASP 31 HELX_RH_AL_P A ARG 42 A ARG 42 HELX_RH_AL_P2 ? ? +A LEU 43 A LEU 43 TURN_TY1_P A LEU 43 A LEU 43 TURN_TY1_P1 ? ? +A SER 47 A SER 47 HELX_RH_3T_P A GLY 49 A GLY 49 HELX_RH_3T_P1 ? ? +A TRP 53 A TRP 53 STRN A VAL 57 A VAL 57 STRN3 ? ? +A LYS 61 A LYS 61 HELX_RH_AL_P A ARG 68 A ARG 68 HELX_RH_AL_P3 ? ? +A GLN 69 A GLN 69 TURN_TY1_P A VAL 70 A VAL 70 TURN_TY1_P2 ? ? +A TRP 72 A TRP 72 HELX_RH_3T_P A ALA 74 A ALA 74 HELX_RH_3T_P2 ? ? +A GLN 75 A GLN 75 TURN_TY1_P A GLY 76 A GLY 76 TURN_TY1_P3 ? ? +A GLN 77 A GLN 77 HELX_RH_AL_P A THR 80 A THR 80 HELX_RH_AL_P4 ? ? +A SER 82 A SER 82 BEND A SER 82 A SER 82 BEND2 ? ? +A HIS 83 A HIS 83 STRN A ARG 90 A ARG 90 STRN4 ? ? +A ALA 92 A ALA 92 HELX_RH_AL_P A MET 95 A MET 95 HELX_RH_AL_P5 ? ? +A ARG 96 A ARG 96 BEND A ARG 96 A ARG 96 BEND3 ? ? +A ARG 97 A ARG 97 TURN_TY1_P A ASP 98 A ASP 98 TURN_TY1_P4 ? ? +A SER 99 A SER 99 BEND A SER 99 A SER 99 BEND4 ? ? +A GLY 100 A GLY 100 HELX_RH_AL_P A ASP 104 A ASP 104 HELX_RH_AL_P6 ? ? +A GLN 105 A GLN 105 HELX_RH_PI_P A VAL 109 A VAL 109 HELX_RH_PI_P1 ? ? +A LYS 110 A LYS 110 BEND A LYS 110 A LYS 110 BEND5 ? ? +A GLU 114 A GLU 114 HELX_RH_AL_P A LEU 121 A LEU 121 HELX_RH_AL_P7 ? ? +A LYS 122 A LYS 122 BEND A LYS 122 A LYS 122 BEND6 ? ? +A GLU 123 A GLU 123 TURN_TY1_P A ASP 124 A ASP 124 TURN_TY1_P5 ? ? +A GLY 125 A GLY 125 BEND A GLY 125 A GLY 125 BEND7 ? ? +A VAL 126 A VAL 126 HELX_RH_AL_P A GLU 128 A GLU 128 HELX_RH_AL_P8 ? ? +A SER 129 A SER 129 HELX_RH_PI_P A ASP 134 A ASP 134 HELX_RH_PI_P2 ? ? +A PHE 135 A PHE 135 TURN_TY1_P A PHE 135 A PHE 135 TURN_TY1_P6 ? ? +A LEU 137 A LEU 137 HELX_RH_3T_P A GLU 139 A GLU 139 HELX_RH_3T_P3 ? ? +A ASP 141 A ASP 141 HELX_RH_AL_P A LEU 165 A LEU 165 HELX_RH_AL_P9 ? ? +A ILE 166 A ILE 166 TURN_TY1_P A GLY 167 A GLY 167 TURN_TY1_P7 ? ? +A ASP 169 A ASP 169 STRN A ILE 173 A ILE 173 STRN5 ? ? +A PHE 176 A PHE 176 BEND A PHE 176 A PHE 176 BEND8 ? ? +A TYR 178 A TYR 178 HELX_RH_AL_P A LYS 187 A LYS 187 HELX_RH_AL_P10 ? ? +A GLU 188 A GLU 188 TURN_TY1_P A ARG 195 A ARG 195 TURN_TY1_P8 ? ? +A PHE 196 A PHE 196 STRN A GLY 205 A GLY 205 STRN6 ? ? +A ARG 207 A ARG 207 STRN A ARG 207 A ARG 207 STRN7 ? ? +A VAL 208 A VAL 208 BEND A LYS 209 A LYS 209 BEND9 ? ? +A GLU 210 A GLU 210 HELX_LH_PP_P A LYS 214 A LYS 214 HELX_LH_PP_P2 ? ? +A LEU 219 A LEU 219 HELX_RH_3T_P A GLN 221 A GLN 221 HELX_RH_3T_P4 ? ? +A ILE 222 A ILE 222 TURN_TY1_P A ILE 222 A ILE 222 TURN_TY1_P9 ? ? +# +loop_ +_struct_conf_type.criteria +_struct_conf_type.id +DSSP HELX_RH_AL_P +DSSP STRN +DSSP BEND +DSSP HELX_LH_PP_P +DSSP TURN_TY1_P +DSSP HELX_RH_3T_P +DSSP HELX_RH_PI_P +# +_struct_ref.db_code Q65MG6_BACLD +_struct_ref.db_name UNP +_struct_ref.entity_id 1 +_struct_ref.id 1 +_struct_ref.pdbx_align_begin 1 +_struct_ref.pdbx_align_end 227 +_struct_ref.pdbx_db_accession Q65MG6 +_struct_ref.pdbx_db_isoform ? +_struct_ref.pdbx_seq_one_letter_code +;MTEQSKKQEILDAFQFRHATKEFDPDRKISDEDFQFILEAGRLSPSSVGLEPWQFVVVQNKELREKLRQVSWGAQGQLPT +ASHFVLLLGRTAKEMRRDSGYVADQLKHVKKMPEDIIENMLKEDGVLESFQDGDFHLYESDRAMFDWVSKQTYIALANMM +TAAALIGIDSCPIEGFNYDKVHDILEKEGVLEDGRFDISVMAAFGYRVKEPRPKTRRALDQIVKWVE +; +# +_struct_ref_seq.align_id 1 +_struct_ref_seq.db_align_beg 1 +_struct_ref_seq.db_align_end 227 +_struct_ref_seq.pdbx_PDB_id_code AF-Q65MG6-F1 +_struct_ref_seq.pdbx_auth_seq_align_beg 1 +_struct_ref_seq.pdbx_auth_seq_align_end 227 +_struct_ref_seq.pdbx_db_accession Q65MG6 +_struct_ref_seq.pdbx_db_align_beg_ins_code ? +_struct_ref_seq.pdbx_db_align_end_ins_code ? +_struct_ref_seq.pdbx_seq_align_beg_ins_code ? +_struct_ref_seq.pdbx_seq_align_end_ins_code ? +_struct_ref_seq.pdbx_strand_id A +_struct_ref_seq.ref_id 1 +_struct_ref_seq.seq_align_beg 1 +_struct_ref_seq.seq_align_end 227 +# +loop_ +_atom_site.group_PDB +_atom_site.id +_atom_site.type_symbol +_atom_site.label_atom_id +_atom_site.label_alt_id +_atom_site.label_comp_id +_atom_site.label_asym_id +_atom_site.label_entity_id +_atom_site.label_seq_id +_atom_site.pdbx_PDB_ins_code +_atom_site.Cartn_x +_atom_site.Cartn_y +_atom_site.Cartn_z +_atom_site.occupancy +_atom_site.B_iso_or_equiv +_atom_site.pdbx_formal_charge +_atom_site.auth_seq_id +_atom_site.auth_comp_id +_atom_site.auth_asym_id +_atom_site.auth_atom_id +_atom_site.pdbx_PDB_model_num +_atom_site.pdbx_sifts_xref_db_acc +_atom_site.pdbx_sifts_xref_db_name +_atom_site.pdbx_sifts_xref_db_num +_atom_site.pdbx_sifts_xref_db_res +ATOM 1 N N . MET A 1 1 ? 15.390 -1.332 27.292 1.00 73.31 ? 1 MET A N 1 Q65MG6 UNP 1 M +ATOM 2 C CA . MET A 1 1 ? 14.609 -2.490 26.803 1.00 73.31 ? 1 MET A CA 1 Q65MG6 UNP 1 M +ATOM 3 C C . MET A 1 1 ? 15.539 -3.656 26.550 1.00 73.31 ? 1 MET A C 1 Q65MG6 UNP 1 M +ATOM 4 C CB . MET A 1 1 ? 13.871 -2.171 25.503 1.00 73.31 ? 1 MET A CB 1 Q65MG6 UNP 1 M +ATOM 5 O O . MET A 1 1 ? 16.598 -3.442 25.971 1.00 73.31 ? 1 MET A O 1 Q65MG6 UNP 1 M +ATOM 6 C CG . MET A 1 1 ? 12.549 -1.458 25.758 1.00 73.31 ? 1 MET A CG 1 Q65MG6 UNP 1 M +ATOM 7 S SD . MET A 1 1 ? 11.632 -1.306 24.219 1.00 73.31 ? 1 MET A SD 1 Q65MG6 UNP 1 M +ATOM 8 C CE . MET A 1 1 ? 11.753 0.470 23.883 1.00 73.31 ? 1 MET A CE 1 Q65MG6 UNP 1 M +ATOM 9 N N . THR A 1 2 ? 15.161 -4.856 26.979 1.00 93.94 ? 2 THR A N 1 Q65MG6 UNP 2 T +ATOM 10 C CA . THR A 1 2 ? 15.893 -6.084 26.646 1.00 93.94 ? 2 THR A CA 1 Q65MG6 UNP 2 T +ATOM 11 C C . THR A 1 2 ? 15.470 -6.570 25.259 1.00 93.94 ? 2 THR A C 1 Q65MG6 UNP 2 T +ATOM 12 C CB . THR A 1 2 ? 15.665 -7.174 27.709 1.00 93.94 ? 2 THR A CB 1 Q65MG6 UNP 2 T +ATOM 13 O O . THR A 1 2 ? 14.431 -6.162 24.741 1.00 93.94 ? 2 THR A O 1 Q65MG6 UNP 2 T +ATOM 14 C CG2 . THR A 1 2 ? 16.091 -6.718 29.105 1.00 93.94 ? 2 THR A CG2 1 Q65MG6 UNP 2 T +ATOM 15 O OG1 . THR A 1 2 ? 14.302 -7.520 27.781 1.00 93.94 ? 2 THR A OG1 1 Q65MG6 UNP 2 T +ATOM 16 N N . GLU A 1 3 ? 16.254 -7.446 24.632 1.00 95.62 ? 3 GLU A N 1 Q65MG6 UNP 3 E +ATOM 17 C CA . GLU A 1 3 ? 15.840 -8.083 23.374 1.00 95.62 ? 3 GLU A CA 1 Q65MG6 UNP 3 E +ATOM 18 C C . GLU A 1 3 ? 14.509 -8.835 23.542 1.00 95.62 ? 3 GLU A C 1 Q65MG6 UNP 3 E +ATOM 19 C CB . GLU A 1 3 ? 16.953 -9.035 22.927 1.00 95.62 ? 3 GLU A CB 1 Q65MG6 UNP 3 E +ATOM 20 O O . GLU A 1 3 ? 13.622 -8.740 22.696 1.00 95.62 ? 3 GLU A O 1 Q65MG6 UNP 3 E +ATOM 21 C CG . GLU A 1 3 ? 16.705 -9.594 21.521 1.00 95.62 ? 3 GLU A CG 1 Q65MG6 UNP 3 E +ATOM 22 C CD . GLU A 1 3 ? 17.710 -10.690 21.153 1.00 95.62 ? 3 GLU A CD 1 Q65MG6 UNP 3 E +ATOM 23 O OE1 . GLU A 1 3 ? 17.310 -11.569 20.351 1.00 95.62 ? 3 GLU A OE1 1 Q65MG6 UNP 3 E +ATOM 24 O OE2 . GLU A 1 3 ? 18.817 -10.691 21.726 1.00 95.62 ? 3 GLU A OE2 1 Q65MG6 UNP 3 E +ATOM 25 N N . GLN A 1 4 ? 14.331 -9.507 24.682 1.00 95.50 ? 4 GLN A N 1 Q65MG6 UNP 4 Q +ATOM 26 C CA . GLN A 1 4 ? 13.101 -10.223 25.001 1.00 95.50 ? 4 GLN A CA 1 Q65MG6 UNP 4 Q +ATOM 27 C C . GLN A 1 4 ? 11.893 -9.288 25.121 1.00 95.50 ? 4 GLN A C 1 Q65MG6 UNP 4 Q +ATOM 28 C CB . GLN A 1 4 ? 13.315 -11.029 26.293 1.00 95.50 ? 4 GLN A CB 1 Q65MG6 UNP 4 Q +ATOM 29 O O . GLN A 1 4 ? 10.827 -9.617 24.607 1.00 95.50 ? 4 GLN A O 1 Q65MG6 UNP 4 Q +ATOM 30 C CG . GLN A 1 4 ? 12.152 -11.993 26.582 1.00 95.50 ? 4 GLN A CG 1 Q65MG6 UNP 4 Q +ATOM 31 C CD . GLN A 1 4 ? 11.967 -13.054 25.498 1.00 95.50 ? 4 GLN A CD 1 Q65MG6 UNP 4 Q +ATOM 32 N NE2 . GLN A 1 4 ? 10.786 -13.614 25.365 1.00 95.50 ? 4 GLN A NE2 1 Q65MG6 UNP 4 Q +ATOM 33 O OE1 . GLN A 1 4 ? 12.871 -13.390 24.748 1.00 95.50 ? 4 GLN A OE1 1 Q65MG6 UNP 4 Q +ATOM 34 N N . SER A 1 5 ? 12.048 -8.116 25.753 1.00 96.06 ? 5 SER A N 1 Q65MG6 UNP 5 S +ATOM 35 C CA . SER A 1 5 ? 10.939 -7.163 25.872 1.00 96.06 ? 5 SER A CA 1 Q65MG6 UNP 5 S +ATOM 36 C C . SER A 1 5 ? 10.519 -6.624 24.504 1.00 96.06 ? 5 SER A C 1 Q65MG6 UNP 5 S +ATOM 37 C CB . SER A 1 5 ? 11.253 -6.030 26.863 1.00 96.06 ? 5 SER A CB 1 Q65MG6 UNP 5 S +ATOM 38 O O . SER A 1 5 ? 9.329 -6.516 24.242 1.00 96.06 ? 5 SER A O 1 Q65MG6 UNP 5 S +ATOM 39 O OG . SER A 1 5 ? 12.177 -5.074 26.363 1.00 96.06 ? 5 SER A OG 1 Q65MG6 UNP 5 S +ATOM 40 N N . LYS A 1 6 ? 11.480 -6.371 23.604 1.00 96.94 ? 6 LYS A N 1 Q65MG6 UNP 6 K +ATOM 41 C CA . LYS A 1 6 ? 11.191 -5.940 22.226 1.00 96.94 ? 6 LYS A CA 1 Q65MG6 UNP 6 K +ATOM 42 C C . LYS A 1 6 ? 10.466 -7.020 21.422 1.00 96.94 ? 6 LYS A C 1 Q65MG6 UNP 6 K +ATOM 43 C CB . LYS A 1 6 ? 12.483 -5.555 21.498 1.00 96.94 ? 6 LYS A CB 1 Q65MG6 UNP 6 K +ATOM 44 O O . LYS A 1 6 ? 9.513 -6.721 20.714 1.00 96.94 ? 6 LYS A O 1 Q65MG6 UNP 6 K +ATOM 45 C CG . LYS A 1 6 ? 13.129 -4.285 22.059 1.00 96.94 ? 6 LYS A CG 1 Q65MG6 UNP 6 K +ATOM 46 C CD . LYS A 1 6 ? 14.383 -3.961 21.243 1.00 96.94 ? 6 LYS A CD 1 Q65MG6 UNP 6 K +ATOM 47 C CE . LYS A 1 6 ? 15.063 -2.699 21.775 1.00 96.94 ? 6 LYS A CE 1 Q65MG6 UNP 6 K +ATOM 48 N NZ . LYS A 1 6 ? 16.209 -2.315 20.913 1.00 96.94 ? 6 LYS A NZ 1 Q65MG6 UNP 6 K +ATOM 49 N N . LYS A 1 7 ? 10.897 -8.283 21.533 1.00 97.62 ? 7 LYS A N 1 Q65MG6 UNP 7 K +ATOM 50 C CA . LYS A 1 7 ? 10.212 -9.412 20.877 1.00 97.62 ? 7 LYS A CA 1 Q65MG6 UNP 7 K +ATOM 51 C C . LYS A 1 7 ? 8.759 -9.516 21.336 1.00 97.62 ? 7 LYS A C 1 Q65MG6 UNP 7 K +ATOM 52 C CB . LYS A 1 7 ? 10.950 -10.732 21.149 1.00 97.62 ? 7 LYS A CB 1 Q65MG6 UNP 7 K +ATOM 53 O O . LYS A 1 7 ? 7.883 -9.719 20.501 1.00 97.62 ? 7 LYS A O 1 Q65MG6 UNP 7 K +ATOM 54 C CG . LYS A 1 7 ? 12.250 -10.842 20.344 1.00 97.62 ? 7 LYS A CG 1 Q65MG6 UNP 7 K +ATOM 55 C CD . LYS A 1 7 ? 13.011 -12.128 20.697 1.00 97.62 ? 7 LYS A CD 1 Q65MG6 UNP 7 K +ATOM 56 C CE . LYS A 1 7 ? 14.316 -12.158 19.897 1.00 97.62 ? 7 LYS A CE 1 Q65MG6 UNP 7 K +ATOM 57 N NZ . LYS A 1 7 ? 15.239 -13.231 20.333 1.00 97.62 ? 7 LYS A NZ 1 Q65MG6 UNP 7 K +ATOM 58 N N . GLN A 1 8 ? 8.514 -9.351 22.635 1.00 97.81 ? 8 GLN A N 1 Q65MG6 UNP 8 Q +ATOM 59 C CA . GLN A 1 8 ? 7.161 -9.399 23.177 1.00 97.81 ? 8 GLN A CA 1 Q65MG6 UNP 8 Q +ATOM 60 C C . GLN A 1 8 ? 6.305 -8.230 22.679 1.00 97.81 ? 8 GLN A C 1 Q65MG6 UNP 8 Q +ATOM 61 C CB . GLN A 1 8 ? 7.214 -9.464 24.710 1.00 97.81 ? 8 GLN A CB 1 Q65MG6 UNP 8 Q +ATOM 62 O O . GLN A 1 8 ? 5.217 -8.473 22.178 1.00 97.81 ? 8 GLN A O 1 Q65MG6 UNP 8 Q +ATOM 63 C CG . GLN A 1 8 ? 5.832 -9.770 25.306 1.00 97.81 ? 8 GLN A CG 1 Q65MG6 UNP 8 Q +ATOM 64 C CD . GLN A 1 8 ? 5.271 -11.099 24.810 1.00 97.81 ? 8 GLN A CD 1 Q65MG6 UNP 8 Q +ATOM 65 N NE2 . GLN A 1 8 ? 4.078 -11.133 24.265 1.00 97.81 ? 8 GLN A NE2 1 Q65MG6 UNP 8 Q +ATOM 66 O OE1 . GLN A 1 8 ? 5.923 -12.134 24.877 1.00 97.81 ? 8 GLN A OE1 1 Q65MG6 UNP 8 Q +ATOM 67 N N . GLU A 1 9 ? 6.819 -6.999 22.715 1.00 96.81 ? 9 GLU A N 1 Q65MG6 UNP 9 E +ATOM 68 C CA . GLU A 1 9 ? 6.124 -5.808 22.203 1.00 96.81 ? 9 GLU A CA 1 Q65MG6 UNP 9 E +ATOM 69 C C . GLU A 1 9 ? 5.712 -5.963 20.729 1.00 96.81 ? 9 GLU A C 1 Q65MG6 UNP 9 E +ATOM 70 C CB . GLU A 1 9 ? 7.078 -4.620 22.388 1.00 96.81 ? 9 GLU A CB 1 Q65MG6 UNP 9 E +ATOM 71 O O . GLU A 1 9 ? 4.575 -5.676 20.352 1.00 96.81 ? 9 GLU A O 1 Q65MG6 UNP 9 E +ATOM 72 C CG . GLU A 1 9 ? 6.503 -3.261 21.963 1.00 96.81 ? 9 GLU A CG 1 Q65MG6 UNP 9 E +ATOM 73 C CD . GLU A 1 9 ? 7.525 -2.122 22.140 1.00 96.81 ? 9 GLU A CD 1 Q65MG6 UNP 9 E +ATOM 74 O OE1 . GLU A 1 9 ? 7.170 -0.972 21.809 1.00 96.81 ? 9 GLU A OE1 1 Q65MG6 UNP 9 E +ATOM 75 O OE2 . GLU A 1 9 ? 8.669 -2.396 22.587 1.00 96.81 ? 9 GLU A OE2 1 Q65MG6 UNP 9 E +ATOM 76 N N . ILE A 1 10 ? 6.608 -6.506 19.899 1.00 97.69 ? 10 ILE A N 1 Q65MG6 UNP 10 I +ATOM 77 C CA . ILE A 1 10 ? 6.310 -6.806 18.495 1.00 97.69 ? 10 ILE A CA 1 Q65MG6 UNP 10 I +ATOM 78 C C . ILE A 1 10 ? 5.172 -7.829 18.397 1.00 97.69 ? 10 ILE A C 1 Q65MG6 UNP 10 I +ATOM 79 C CB . ILE A 1 10 ? 7.593 -7.274 17.771 1.00 97.69 ? 10 ILE A CB 1 Q65MG6 UNP 10 I +ATOM 80 O O . ILE A 1 10 ? 4.199 -7.604 17.677 1.00 97.69 ? 10 ILE A O 1 Q65MG6 UNP 10 I +ATOM 81 C CG1 . ILE A 1 10 ? 8.595 -6.102 17.644 1.00 97.69 ? 10 ILE A CG1 1 Q65MG6 UNP 10 I +ATOM 82 C CG2 . ILE A 1 10 ? 7.273 -7.823 16.370 1.00 97.69 ? 10 ILE A CG2 1 Q65MG6 UNP 10 I +ATOM 83 C CD1 . ILE A 1 10 ? 10.008 -6.542 17.235 1.00 97.69 ? 10 ILE A CD1 1 Q65MG6 UNP 10 I +ATOM 84 N N . LEU A 1 11 ? 5.264 -8.951 19.119 1.00 98.12 ? 11 LEU A N 1 Q65MG6 UNP 11 L +ATOM 85 C CA . LEU A 1 11 ? 4.219 -9.978 19.108 1.00 98.12 ? 11 LEU A CA 1 Q65MG6 UNP 11 L +ATOM 86 C C . LEU A 1 11 ? 2.873 -9.442 19.609 1.00 98.12 ? 11 LEU A C 1 Q65MG6 UNP 11 L +ATOM 87 C CB . LEU A 1 11 ? 4.664 -11.193 19.938 1.00 98.12 ? 11 LEU A CB 1 Q65MG6 UNP 11 L +ATOM 88 O O . LEU A 1 11 ? 1.841 -9.778 19.027 1.00 98.12 ? 11 LEU A O 1 Q65MG6 UNP 11 L +ATOM 89 C CG . LEU A 1 11 ? 5.763 -12.052 19.288 1.00 98.12 ? 11 LEU A CG 1 Q65MG6 UNP 11 L +ATOM 90 C CD1 . LEU A 1 11 ? 6.108 -13.214 20.221 1.00 98.12 ? 11 LEU A CD1 1 Q65MG6 UNP 11 L +ATOM 91 C CD2 . LEU A 1 11 ? 5.330 -12.638 17.939 1.00 98.12 ? 11 LEU A CD2 1 Q65MG6 UNP 11 L +ATOM 92 N N . ASP A 1 12 ? 2.880 -8.576 20.618 1.00 97.94 ? 12 ASP A N 1 Q65MG6 UNP 12 D +ATOM 93 C CA . ASP A 1 12 ? 1.683 -7.931 21.152 1.00 97.94 ? 12 ASP A CA 1 Q65MG6 UNP 12 D +ATOM 94 C C . ASP A 1 12 ? 1.025 -7.040 20.093 1.00 97.94 ? 12 ASP A C 1 Q65MG6 UNP 12 D +ATOM 95 C CB . ASP A 1 12 ? 2.023 -7.136 22.423 1.00 97.94 ? 12 ASP A CB 1 Q65MG6 UNP 12 D +ATOM 96 O O . ASP A 1 12 ? -0.188 -7.123 19.904 1.00 97.94 ? 12 ASP A O 1 Q65MG6 UNP 12 D +ATOM 97 C CG . ASP A 1 12 ? 2.427 -8.018 23.613 1.00 97.94 ? 12 ASP A CG 1 Q65MG6 UNP 12 D +ATOM 98 O OD1 . ASP A 1 12 ? 2.150 -9.242 23.588 1.00 97.94 ? 12 ASP A OD1 1 Q65MG6 UNP 12 D +ATOM 99 O OD2 . ASP A 1 12 ? 3.006 -7.473 24.576 1.00 97.94 ? 12 ASP A OD2 1 Q65MG6 UNP 12 D +ATOM 100 N N . ALA A 1 13 ? 1.801 -6.286 19.307 1.00 98.25 ? 13 ALA A N 1 Q65MG6 UNP 13 A +ATOM 101 C CA . ALA A 1 13 ? 1.272 -5.524 18.175 1.00 98.25 ? 13 ALA A CA 1 Q65MG6 UNP 13 A +ATOM 102 C C . ALA A 1 13 ? 0.655 -6.436 17.097 1.00 98.25 ? 13 ALA A C 1 Q65MG6 UNP 13 A +ATOM 103 C CB . ALA A 1 13 ? 2.382 -4.638 17.607 1.00 98.25 ? 13 ALA A CB 1 Q65MG6 UNP 13 A +ATOM 104 O O . ALA A 1 13 ? -0.430 -6.151 16.581 1.00 98.25 ? 13 ALA A O 1 Q65MG6 UNP 13 A +ATOM 105 N N . PHE A 1 14 ? 1.279 -7.579 16.786 1.00 98.19 ? 14 PHE A N 1 Q65MG6 UNP 14 F +ATOM 106 C CA . PHE A 1 14 ? 0.705 -8.565 15.858 1.00 98.19 ? 14 PHE A CA 1 Q65MG6 UNP 14 F +ATOM 107 C C . PHE A 1 14 ? -0.577 -9.227 16.398 1.00 98.19 ? 14 PHE A C 1 Q65MG6 UNP 14 F +ATOM 108 C CB . PHE A 1 14 ? 1.756 -9.619 15.472 1.00 98.19 ? 14 PHE A CB 1 Q65MG6 UNP 14 F +ATOM 109 O O . PHE A 1 14 ? -1.469 -9.569 15.610 1.00 98.19 ? 14 PHE A O 1 Q65MG6 UNP 14 F +ATOM 110 C CG . PHE A 1 14 ? 2.718 -9.161 14.391 1.00 98.19 ? 14 PHE A CG 1 Q65MG6 UNP 14 F +ATOM 111 C CD1 . PHE A 1 14 ? 2.309 -9.146 13.044 1.00 98.19 ? 14 PHE A CD1 1 Q65MG6 UNP 14 F +ATOM 112 C CD2 . PHE A 1 14 ? 4.024 -8.757 14.714 1.00 98.19 ? 14 PHE A CD2 1 Q65MG6 UNP 14 F +ATOM 113 C CE1 . PHE A 1 14 ? 3.188 -8.696 12.041 1.00 98.19 ? 14 PHE A CE1 1 Q65MG6 UNP 14 F +ATOM 114 C CE2 . PHE A 1 14 ? 4.895 -8.288 13.717 1.00 98.19 ? 14 PHE A CE2 1 Q65MG6 UNP 14 F +ATOM 115 C CZ . PHE A 1 14 ? 4.476 -8.252 12.380 1.00 98.19 ? 14 PHE A CZ 1 Q65MG6 UNP 14 F +ATOM 116 N N . GLN A 1 15 ? -0.709 -9.382 17.719 1.00 97.69 ? 15 GLN A N 1 Q65MG6 UNP 15 Q +ATOM 117 C CA . GLN A 1 15 ? -1.942 -9.852 18.358 1.00 97.69 ? 15 GLN A CA 1 Q65MG6 UNP 15 Q +ATOM 118 C C . GLN A 1 15 ? -3.020 -8.764 18.401 1.00 97.69 ? 15 GLN A C 1 Q65MG6 UNP 15 Q +ATOM 119 C CB . GLN A 1 15 ? -1.653 -10.384 19.772 1.00 97.69 ? 15 GLN A CB 1 Q65MG6 UNP 15 Q +ATOM 120 O O . GLN A 1 15 ? -4.183 -9.054 18.100 1.00 97.69 ? 15 GLN A O 1 Q65MG6 UNP 15 Q +ATOM 121 C CG . GLN A 1 15 ? -0.842 -11.688 19.775 1.00 97.69 ? 15 GLN A CG 1 Q65MG6 UNP 15 Q +ATOM 122 C CD . GLN A 1 15 ? -1.531 -12.864 19.088 1.00 97.69 ? 15 GLN A CD 1 Q65MG6 UNP 15 Q +ATOM 123 N NE2 . GLN A 1 15 ? -0.790 -13.904 18.776 1.00 97.69 ? 15 GLN A NE2 1 Q65MG6 UNP 15 Q +ATOM 124 O OE1 . GLN A 1 15 ? -2.722 -12.889 18.804 1.00 97.69 ? 15 GLN A OE1 1 Q65MG6 UNP 15 Q +ATOM 125 N N . PHE A 1 16 ? -2.641 -7.517 18.684 1.00 98.06 ? 16 PHE A N 1 Q65MG6 UNP 16 F +ATOM 126 C CA . PHE A 1 16 ? -3.513 -6.343 18.686 1.00 98.06 ? 16 PHE A CA 1 Q65MG6 UNP 16 F +ATOM 127 C C . PHE A 1 16 ? -4.115 -6.091 17.301 1.00 98.06 ? 16 PHE A C 1 Q65MG6 UNP 16 F +ATOM 128 C CB . PHE A 1 16 ? -2.707 -5.121 19.158 1.00 98.06 ? 16 PHE A CB 1 Q65MG6 UNP 16 F +ATOM 129 O O . PHE A 1 16 ? -5.338 -5.950 17.164 1.00 98.06 ? 16 PHE A O 1 Q65MG6 UNP 16 F +ATOM 130 C CG . PHE A 1 16 ? -3.466 -3.811 19.053 1.00 98.06 ? 16 PHE A CG 1 Q65MG6 UNP 16 F +ATOM 131 C CD1 . PHE A 1 16 ? -3.367 -3.027 17.887 1.00 98.06 ? 16 PHE A CD1 1 Q65MG6 UNP 16 F +ATOM 132 C CD2 . PHE A 1 16 ? -4.287 -3.381 20.111 1.00 98.06 ? 16 PHE A CD2 1 Q65MG6 UNP 16 F +ATOM 133 C CE1 . PHE A 1 16 ? -4.098 -1.833 17.771 1.00 98.06 ? 16 PHE A CE1 1 Q65MG6 UNP 16 F +ATOM 134 C CE2 . PHE A 1 16 ? -5.006 -2.177 20.000 1.00 98.06 ? 16 PHE A CE2 1 Q65MG6 UNP 16 F +ATOM 135 C CZ . PHE A 1 16 ? -4.920 -1.408 18.826 1.00 98.06 ? 16 PHE A CZ 1 Q65MG6 UNP 16 F +ATOM 136 N N . ARG A 1 17 ? -3.272 -6.093 16.260 1.00 97.88 ? 17 ARG A N 1 Q65MG6 UNP 17 R +ATOM 137 C CA . ARG A 1 17 ? -3.670 -5.809 14.879 1.00 97.88 ? 17 ARG A CA 1 Q65MG6 UNP 17 R +ATOM 138 C C . ARG A 1 17 ? -4.699 -6.820 14.400 1.00 97.88 ? 17 ARG A C 1 Q65MG6 UNP 17 R +ATOM 139 C CB . ARG A 1 17 ? -2.435 -5.836 13.969 1.00 97.88 ? 17 ARG A CB 1 Q65MG6 UNP 17 R +ATOM 140 O O . ARG A 1 17 ? -4.429 -8.015 14.307 1.00 97.88 ? 17 ARG A O 1 Q65MG6 UNP 17 R +ATOM 141 C CG . ARG A 1 17 ? -2.750 -5.236 12.589 1.00 97.88 ? 17 ARG A CG 1 Q65MG6 UNP 17 R +ATOM 142 C CD . ARG A 1 17 ? -1.587 -5.452 11.617 1.00 97.88 ? 17 ARG A CD 1 Q65MG6 UNP 17 R +ATOM 143 N NE . ARG A 1 17 ? -1.434 -6.872 11.237 1.00 97.88 ? 17 ARG A NE 1 Q65MG6 UNP 17 R +ATOM 144 N NH1 . ARG A 1 17 ? -3.092 -6.951 9.647 1.00 97.88 ? 17 ARG A NH1 1 Q65MG6 UNP 17 R +ATOM 145 N NH2 . ARG A 1 17 ? -1.783 -8.732 9.974 1.00 97.88 ? 17 ARG A NH2 1 Q65MG6 UNP 17 R +ATOM 146 C CZ . ARG A 1 17 ? -2.109 -7.511 10.299 1.00 97.88 ? 17 ARG A CZ 1 Q65MG6 UNP 17 R +ATOM 147 N N . HIS A 1 18 ? -5.887 -6.370 14.041 1.00 96.56 ? 18 HIS A N 1 Q65MG6 UNP 18 H +ATOM 148 C CA . HIS A 1 18 ? -6.940 -7.196 13.454 1.00 96.56 ? 18 HIS A CA 1 Q65MG6 UNP 18 H +ATOM 149 C C . HIS A 1 18 ? -7.625 -6.408 12.338 1.00 96.56 ? 18 HIS A C 1 Q65MG6 UNP 18 H +ATOM 150 C CB . HIS A 1 18 ? -7.910 -7.639 14.555 1.00 96.56 ? 18 HIS A CB 1 Q65MG6 UNP 18 H +ATOM 151 O O . HIS A 1 18 ? -7.303 -5.250 12.133 1.00 96.56 ? 18 HIS A O 1 Q65MG6 UNP 18 H +ATOM 152 C CG . HIS A 1 18 ? -8.670 -6.495 15.150 1.00 96.56 ? 18 HIS A CG 1 Q65MG6 UNP 18 H +ATOM 153 C CD2 . HIS A 1 18 ? -9.950 -6.138 14.831 1.00 96.56 ? 18 HIS A CD2 1 Q65MG6 UNP 18 H +ATOM 154 N ND1 . HIS A 1 18 ? -8.194 -5.567 16.045 1.00 96.56 ? 18 HIS A ND1 1 Q65MG6 UNP 18 H +ATOM 155 C CE1 . HIS A 1 18 ? -9.177 -4.671 16.228 1.00 96.56 ? 18 HIS A CE1 1 Q65MG6 UNP 18 H +ATOM 156 N NE2 . HIS A 1 18 ? -10.285 -5.018 15.570 1.00 96.56 ? 18 HIS A NE2 1 Q65MG6 UNP 18 H +ATOM 157 N N . ALA A 1 19 ? -8.526 -7.037 11.582 1.00 98.00 ? 19 ALA A N 1 Q65MG6 UNP 19 A +ATOM 158 C CA . ALA A 1 19 ? -9.289 -6.333 10.557 1.00 98.00 ? 19 ALA A CA 1 Q65MG6 UNP 19 A +ATOM 159 C C . ALA A 1 19 ? -10.500 -5.637 11.198 1.00 98.00 ? 19 ALA A C 1 Q65MG6 UNP 19 A +ATOM 160 C CB . ALA A 1 19 ? -9.664 -7.332 9.454 1.00 98.00 ? 19 ALA A CB 1 Q65MG6 UNP 19 A +ATOM 161 O O . ALA A 1 19 ? -11.572 -6.242 11.296 1.00 98.00 ? 19 ALA A O 1 Q65MG6 UNP 19 A +ATOM 162 N N . THR A 1 20 ? -10.316 -4.399 11.651 1.00 98.38 ? 20 THR A N 1 Q65MG6 UNP 20 T +ATOM 163 C CA . THR A 1 20 ? -11.344 -3.607 12.339 1.00 98.38 ? 20 THR A CA 1 Q65MG6 UNP 20 T +ATOM 164 C C . THR A 1 20 ? -12.469 -3.231 11.380 1.00 98.38 ? 20 THR A C 1 Q65MG6 UNP 20 T +ATOM 165 C CB . THR A 1 20 ? -10.723 -2.354 12.964 1.00 98.38 ? 20 THR A CB 1 Q65MG6 UNP 20 T +ATOM 166 O O . THR A 1 20 ? -12.254 -2.564 10.370 1.00 98.38 ? 20 THR A O 1 Q65MG6 UNP 20 T +ATOM 167 C CG2 . THR A 1 20 ? -11.697 -1.606 13.869 1.00 98.38 ? 20 THR A CG2 1 Q65MG6 UNP 20 T +ATOM 168 O OG1 . THR A 1 20 ? -9.636 -2.773 13.742 1.00 98.38 ? 20 THR A OG1 1 Q65MG6 UNP 20 T +ATOM 169 N N . LYS A 1 21 ? -13.688 -3.704 11.655 1.00 97.69 ? 21 LYS A N 1 Q65MG6 UNP 21 K +ATOM 170 C CA . LYS A 1 21 ? -14.831 -3.534 10.738 1.00 97.69 ? 21 LYS A CA 1 Q65MG6 UNP 21 K +ATOM 171 C C . LYS A 1 21 ? -15.628 -2.257 10.972 1.00 97.69 ? 21 LYS A C 1 Q65MG6 UNP 21 K +ATOM 172 C CB . LYS A 1 21 ? -15.726 -4.786 10.767 1.00 97.69 ? 21 LYS A CB 1 Q65MG6 UNP 21 K +ATOM 173 O O . LYS A 1 21 ? -16.334 -1.820 10.074 1.00 97.69 ? 21 LYS A O 1 Q65MG6 UNP 21 K +ATOM 174 C CG . LYS A 1 21 ? -14.991 -6.089 10.396 1.00 97.69 ? 21 LYS A CG 1 Q65MG6 UNP 21 K +ATOM 175 C CD . LYS A 1 21 ? -14.250 -5.972 9.055 1.00 97.69 ? 21 LYS A CD 1 Q65MG6 UNP 21 K +ATOM 176 C CE . LYS A 1 21 ? -13.536 -7.262 8.662 1.00 97.69 ? 21 LYS A CE 1 Q65MG6 UNP 21 K +ATOM 177 N NZ . LYS A 1 21 ? -12.819 -7.068 7.375 1.00 97.69 ? 21 LYS A NZ 1 Q65MG6 UNP 21 K +ATOM 178 N N . GLU A 1 22 ? -15.495 -1.673 12.153 1.00 98.19 ? 22 GLU A N 1 Q65MG6 UNP 22 E +ATOM 179 C CA . GLU A 1 22 ? -16.209 -0.478 12.587 1.00 98.19 ? 22 GLU A CA 1 Q65MG6 UNP 22 E +ATOM 180 C C . GLU A 1 22 ? -15.309 0.288 13.560 1.00 98.19 ? 22 GLU A C 1 Q65MG6 UNP 22 E +ATOM 181 C CB . GLU A 1 22 ? -17.523 -0.919 13.244 1.00 98.19 ? 22 GLU A CB 1 Q65MG6 UNP 22 E +ATOM 182 O O . GLU A 1 22 ? -14.639 -0.317 14.405 1.00 98.19 ? 22 GLU A O 1 Q65MG6 UNP 22 E +ATOM 183 C CG . GLU A 1 22 ? -18.496 0.231 13.524 1.00 98.19 ? 22 GLU A CG 1 Q65MG6 UNP 22 E +ATOM 184 C CD . GLU A 1 22 ? -19.816 -0.275 14.144 1.00 98.19 ? 22 GLU A CD 1 Q65MG6 UNP 22 E +ATOM 185 O OE1 . GLU A 1 22 ? -20.799 0.489 14.122 1.00 98.19 ? 22 GLU A OE1 1 Q65MG6 UNP 22 E +ATOM 186 O OE2 . GLU A 1 22 ? -19.872 -1.434 14.650 1.00 98.19 ? 22 GLU A OE2 1 Q65MG6 UNP 22 E +ATOM 187 N N . PHE A 1 23 ? -15.283 1.607 13.417 1.00 98.69 ? 23 PHE A N 1 Q65MG6 UNP 23 F +ATOM 188 C CA . PHE A 1 23 ? -14.423 2.516 14.174 1.00 98.69 ? 23 PHE A CA 1 Q65MG6 UNP 23 F +ATOM 189 C C . PHE A 1 23 ? -15.265 3.555 14.911 1.00 98.69 ? 23 PHE A C 1 Q65MG6 UNP 23 F +ATOM 190 C CB . PHE A 1 23 ? -13.420 3.215 13.243 1.00 98.69 ? 23 PHE A CB 1 Q65MG6 UNP 23 F +ATOM 191 O O . PHE A 1 23 ? -16.417 3.779 14.553 1.00 98.69 ? 23 PHE A O 1 Q65MG6 UNP 23 F +ATOM 192 C CG . PHE A 1 23 ? -12.519 2.304 12.433 1.00 98.69 ? 23 PHE A CG 1 Q65MG6 UNP 23 F +ATOM 193 C CD1 . PHE A 1 23 ? -11.273 1.909 12.951 1.00 98.69 ? 23 PHE A CD1 1 Q65MG6 UNP 23 F +ATOM 194 C CD2 . PHE A 1 23 ? -12.900 1.883 11.146 1.00 98.69 ? 23 PHE A CD2 1 Q65MG6 UNP 23 F +ATOM 195 C CE1 . PHE A 1 23 ? -10.392 1.137 12.177 1.00 98.69 ? 23 PHE A CE1 1 Q65MG6 UNP 23 F +ATOM 196 C CE2 . PHE A 1 23 ? -12.028 1.087 10.383 1.00 98.69 ? 23 PHE A CE2 1 Q65MG6 UNP 23 F +ATOM 197 C CZ . PHE A 1 23 ? -10.771 0.722 10.890 1.00 98.69 ? 23 PHE A CZ 1 Q65MG6 UNP 23 F +ATOM 198 N N . ASP A 1 24 ? -14.680 4.204 15.910 1.00 98.56 ? 24 ASP A N 1 Q65MG6 UNP 24 D +ATOM 199 C CA . ASP A 1 24 ? -15.280 5.347 16.589 1.00 98.56 ? 24 ASP A CA 1 Q65MG6 UNP 24 D +ATOM 200 C C . ASP A 1 24 ? -15.189 6.579 15.663 1.00 98.56 ? 24 ASP A C 1 Q65MG6 UNP 24 D +ATOM 201 C CB . ASP A 1 24 ? -14.559 5.548 17.930 1.00 98.56 ? 24 ASP A CB 1 Q65MG6 UNP 24 D +ATOM 202 O O . ASP A 1 24 ? -14.076 7.029 15.364 1.00 98.56 ? 24 ASP A O 1 Q65MG6 UNP 24 D +ATOM 203 C CG . ASP A 1 24 ? -15.141 6.685 18.773 1.00 98.56 ? 24 ASP A CG 1 Q65MG6 UNP 24 D +ATOM 204 O OD1 . ASP A 1 24 ? -15.812 7.567 18.192 1.00 98.56 ? 24 ASP A OD1 1 Q65MG6 UNP 24 D +ATOM 205 O OD2 . ASP A 1 24 ? -14.852 6.677 19.988 1.00 98.56 ? 24 ASP A OD2 1 Q65MG6 UNP 24 D +ATOM 206 N N . PRO A 1 25 ? -16.321 7.116 15.163 1.00 97.56 ? 25 PRO A N 1 Q65MG6 UNP 25 P +ATOM 207 C CA . PRO A 1 25 ? -16.308 8.235 14.228 1.00 97.56 ? 25 PRO A CA 1 Q65MG6 UNP 25 P +ATOM 208 C C . PRO A 1 25 ? -15.882 9.561 14.874 1.00 97.56 ? 25 PRO A C 1 Q65MG6 UNP 25 P +ATOM 209 C CB . PRO A 1 25 ? -17.735 8.308 13.680 1.00 97.56 ? 25 PRO A CB 1 Q65MG6 UNP 25 P +ATOM 210 O O . PRO A 1 25 ? -15.459 10.459 14.136 1.00 97.56 ? 25 PRO A O 1 Q65MG6 UNP 25 P +ATOM 211 C CG . PRO A 1 25 ? -18.580 7.798 14.845 1.00 97.56 ? 25 PRO A CG 1 Q65MG6 UNP 25 P +ATOM 212 C CD . PRO A 1 25 ? -17.692 6.721 15.462 1.00 97.56 ? 25 PRO A CD 1 Q65MG6 UNP 25 P +ATOM 213 N N . ASP A 1 26 ? -15.952 9.680 16.202 1.00 97.75 ? 26 ASP A N 1 Q65MG6 UNP 26 D +ATOM 214 C CA . ASP A 1 26 ? -15.632 10.899 16.951 1.00 97.75 ? 26 ASP A CA 1 Q65MG6 UNP 26 D +ATOM 215 C C . ASP A 1 26 ? -14.167 10.929 17.406 1.00 97.75 ? 26 ASP A C 1 Q65MG6 UNP 26 D +ATOM 216 C CB . ASP A 1 26 ? -16.601 11.038 18.137 1.00 97.75 ? 26 ASP A CB 1 Q65MG6 UNP 26 D +ATOM 217 O O . ASP A 1 26 ? -13.608 11.997 17.669 1.00 97.75 ? 26 ASP A O 1 Q65MG6 UNP 26 D +ATOM 218 C CG . ASP A 1 26 ? -18.055 11.227 17.683 1.00 97.75 ? 26 ASP A CG 1 Q65MG6 UNP 26 D +ATOM 219 O OD1 . ASP A 1 26 ? -18.264 11.941 16.672 1.00 97.75 ? 26 ASP A OD1 1 Q65MG6 UNP 26 D +ATOM 220 O OD2 . ASP A 1 26 ? -18.958 10.675 18.349 1.00 97.75 ? 26 ASP A OD2 1 Q65MG6 UNP 26 D +ATOM 221 N N . ARG A 1 27 ? -13.492 9.774 17.420 1.00 98.25 ? 27 ARG A N 1 Q65MG6 UNP 27 R +ATOM 222 C CA . ARG A 1 27 ? -12.073 9.674 17.770 1.00 98.25 ? 27 ARG A CA 1 Q65MG6 UNP 27 R +ATOM 223 C C . ARG A 1 27 ? -11.179 9.715 16.528 1.00 98.25 ? 27 ARG A C 1 Q65MG6 UNP 27 R +ATOM 224 C CB . ARG A 1 27 ? -11.867 8.435 18.643 1.00 98.25 ? 27 ARG A CB 1 Q65MG6 UNP 27 R +ATOM 225 O O . ARG A 1 27 ? -11.124 8.768 15.741 1.00 98.25 ? 27 ARG A O 1 Q65MG6 UNP 27 R +ATOM 226 C CG . ARG A 1 27 ? -10.537 8.523 19.394 1.00 98.25 ? 27 ARG A CG 1 Q65MG6 UNP 27 R +ATOM 227 C CD . ARG A 1 27 ? -10.367 7.291 20.283 1.00 98.25 ? 27 ARG A CD 1 Q65MG6 UNP 27 R +ATOM 228 N NE . ARG A 1 27 ? -8.984 7.180 20.777 1.00 98.25 ? 27 ARG A NE 1 Q65MG6 UNP 27 R +ATOM 229 N NH1 . ARG A 1 27 ? -9.139 5.034 21.572 1.00 98.25 ? 27 ARG A NH1 1 Q65MG6 UNP 27 R +ATOM 230 N NH2 . ARG A 1 27 ? -7.185 6.115 21.673 1.00 98.25 ? 27 ARG A NH2 1 Q65MG6 UNP 27 R +ATOM 231 C CZ . ARG A 1 27 ? -8.444 6.114 21.337 1.00 98.25 ? 27 ARG A CZ 1 Q65MG6 UNP 27 R +ATOM 232 N N . LYS A 1 28 ? -10.438 10.813 16.360 1.00 98.56 ? 28 LYS A N 1 Q65MG6 UNP 28 K +ATOM 233 C CA . LYS A 1 28 ? -9.505 11.008 15.238 1.00 98.56 ? 28 LYS A CA 1 Q65MG6 UNP 28 K +ATOM 234 C C . LYS A 1 28 ? -8.064 10.682 15.610 1.00 98.56 ? 28 LYS A C 1 Q65MG6 UNP 28 K +ATOM 235 C CB . LYS A 1 28 ? -9.645 12.418 14.633 1.00 98.56 ? 28 LYS A CB 1 Q65MG6 UNP 28 K +ATOM 236 O O . LYS A 1 28 ? -7.633 10.940 16.729 1.00 98.56 ? 28 LYS A O 1 Q65MG6 UNP 28 K +ATOM 237 C CG . LYS A 1 28 ? -11.063 12.738 14.128 1.00 98.56 ? 28 LYS A CG 1 Q65MG6 UNP 28 K +ATOM 238 C CD . LYS A 1 28 ? -11.576 11.725 13.091 1.00 98.56 ? 28 LYS A CD 1 Q65MG6 UNP 28 K +ATOM 239 C CE . LYS A 1 28 ? -13.027 12.028 12.729 1.00 98.56 ? 28 LYS A CE 1 Q65MG6 UNP 28 K +ATOM 240 N NZ . LYS A 1 28 ? -13.671 10.849 12.106 1.00 98.56 ? 28 LYS A NZ 1 Q65MG6 UNP 28 K +ATOM 241 N N . ILE A 1 29 ? -7.350 10.095 14.654 1.00 98.81 ? 29 ILE A N 1 Q65MG6 UNP 29 I +ATOM 242 C CA . ILE A 1 29 ? -5.895 9.924 14.706 1.00 98.81 ? 29 ILE A CA 1 Q65MG6 UNP 29 I +ATOM 243 C C . ILE A 1 29 ? -5.266 11.313 14.559 1.00 98.81 ? 29 ILE A C 1 Q65MG6 UNP 29 I +ATOM 244 C CB . ILE A 1 29 ? -5.413 8.967 13.593 1.00 98.81 ? 29 ILE A CB 1 Q65MG6 UNP 29 I +ATOM 245 O O . ILE A 1 29 ? -5.743 12.102 13.741 1.00 98.81 ? 29 ILE A O 1 Q65MG6 UNP 29 I +ATOM 246 C CG1 . ILE A 1 29 ? -6.065 7.572 13.711 1.00 98.81 ? 29 ILE A CG1 1 Q65MG6 UNP 29 I +ATOM 247 C CG2 . ILE A 1 29 ? -3.884 8.827 13.633 1.00 98.81 ? 29 ILE A CG2 1 Q65MG6 UNP 29 I +ATOM 248 C CD1 . ILE A 1 29 ? -5.887 6.717 12.451 1.00 98.81 ? 29 ILE A CD1 1 Q65MG6 UNP 29 I +ATOM 249 N N . SER A 1 30 ? -4.231 11.601 15.347 1.00 98.81 ? 30 SER A N 1 Q65MG6 UNP 30 S +ATOM 250 C CA . SER A 1 30 ? -3.491 12.859 15.250 1.00 98.81 ? 30 SER A CA 1 Q65MG6 UNP 30 S +ATOM 251 C C . SER A 1 30 ? -2.754 12.974 13.907 1.00 98.81 ? 30 SER A C 1 Q65MG6 UNP 30 S +ATOM 252 C CB . SER A 1 30 ? -2.516 12.983 16.431 1.00 98.81 ? 30 SER A CB 1 Q65MG6 UNP 30 S +ATOM 253 O O . SER A 1 30 ? -2.421 11.964 13.283 1.00 98.81 ? 30 SER A O 1 Q65MG6 UNP 30 S +ATOM 254 O OG . SER A 1 30 ? -1.408 12.123 16.271 1.00 98.81 ? 30 SER A OG 1 Q65MG6 UNP 30 S +ATOM 255 N N . ASP A 1 31 ? -2.470 14.200 13.461 1.00 98.62 ? 31 ASP A N 1 Q65MG6 UNP 31 D +ATOM 256 C CA . ASP A 1 31 ? -1.689 14.407 12.235 1.00 98.62 ? 31 ASP A CA 1 Q65MG6 UNP 31 D +ATOM 257 C C . ASP A 1 31 ? -0.292 13.779 12.359 1.00 98.62 ? 31 ASP A C 1 Q65MG6 UNP 31 D +ATOM 258 C CB . ASP A 1 31 ? -1.572 15.907 11.918 1.00 98.62 ? 31 ASP A CB 1 Q65MG6 UNP 31 D +ATOM 259 O O . ASP A 1 31 ? 0.175 13.141 11.421 1.00 98.62 ? 31 ASP A O 1 Q65MG6 UNP 31 D +ATOM 260 C CG . ASP A 1 31 ? -2.896 16.569 11.516 1.00 98.62 ? 31 ASP A CG 1 Q65MG6 UNP 31 D +ATOM 261 O OD1 . ASP A 1 31 ? -3.809 15.853 11.048 1.00 98.62 ? 31 ASP A OD1 1 Q65MG6 UNP 31 D +ATOM 262 O OD2 . ASP A 1 31 ? -2.986 17.805 11.685 1.00 98.62 ? 31 ASP A OD2 1 Q65MG6 UNP 31 D +ATOM 263 N N . GLU A 1 32 ? 0.345 13.891 13.529 1.00 98.75 ? 32 GLU A N 1 Q65MG6 UNP 32 E +ATOM 264 C CA . GLU A 1 32 ? 1.660 13.302 13.815 1.00 98.75 ? 32 GLU A CA 1 Q65MG6 UNP 32 E +ATOM 265 C C . GLU A 1 32 ? 1.652 11.775 13.660 1.00 98.75 ? 32 GLU A C 1 Q65MG6 UNP 32 E +ATOM 266 C CB . GLU A 1 32 ? 2.088 13.723 15.231 1.00 98.75 ? 32 GLU A CB 1 Q65MG6 UNP 32 E +ATOM 267 O O . GLU A 1 32 ? 2.449 11.223 12.897 1.00 98.75 ? 32 GLU A O 1 Q65MG6 UNP 32 E +ATOM 268 C CG . GLU A 1 32 ? 3.484 13.205 15.618 1.00 98.75 ? 32 GLU A CG 1 Q65MG6 UNP 32 E +ATOM 269 C CD . GLU A 1 32 ? 3.943 13.665 17.014 1.00 98.75 ? 32 GLU A CD 1 Q65MG6 UNP 32 E +ATOM 270 O OE1 . GLU A 1 32 ? 5.107 13.357 17.363 1.00 98.75 ? 32 GLU A OE1 1 Q65MG6 UNP 32 E +ATOM 271 O OE2 . GLU A 1 32 ? 3.164 14.355 17.714 1.00 98.75 ? 32 GLU A OE2 1 Q65MG6 UNP 32 E +ATOM 272 N N . ASP A 1 33 ? 0.708 11.091 14.311 1.00 98.88 ? 33 ASP A N 1 Q65MG6 UNP 33 D +ATOM 273 C CA . ASP A 1 33 ? 0.602 9.633 14.236 1.00 98.88 ? 33 ASP A CA 1 Q65MG6 UNP 33 D +ATOM 274 C C . ASP A 1 33 ? 0.274 9.165 12.815 1.00 98.88 ? 33 ASP A C 1 Q65MG6 UNP 33 D +ATOM 275 C CB . ASP A 1 33 ? -0.510 9.127 15.158 1.00 98.88 ? 33 ASP A CB 1 Q65MG6 UNP 33 D +ATOM 276 O O . ASP A 1 33 ? 0.770 8.133 12.354 1.00 98.88 ? 33 ASP A O 1 Q65MG6 UNP 33 D +ATOM 277 C CG . ASP A 1 33 ? -0.222 9.287 16.648 1.00 98.88 ? 33 ASP A CG 1 Q65MG6 UNP 33 D +ATOM 278 O OD1 . ASP A 1 33 ? 0.932 9.059 17.060 1.00 98.88 ? 33 ASP A OD1 1 Q65MG6 UNP 33 D +ATOM 279 O OD2 . ASP A 1 33 ? -1.204 9.614 17.361 1.00 98.88 ? 33 ASP A OD2 1 Q65MG6 UNP 33 D +ATOM 280 N N . PHE A 1 34 ? -0.571 9.908 12.093 1.00 98.88 ? 34 PHE A N 1 Q65MG6 UNP 34 F +ATOM 281 C CA . PHE A 1 34 ? -0.923 9.522 10.733 1.00 98.88 ? 34 PHE A CA 1 Q65MG6 UNP 34 F +ATOM 282 C C . PHE A 1 34 ? 0.226 9.768 9.747 1.00 98.88 ? 34 PHE A C 1 Q65MG6 UNP 34 F +ATOM 283 C CB . PHE A 1 34 ? -2.238 10.174 10.301 1.00 98.88 ? 34 PHE A CB 1 Q65MG6 UNP 34 F +ATOM 284 O O . PHE A 1 34 ? 0.445 8.937 8.865 1.00 98.88 ? 34 PHE A O 1 Q65MG6 UNP 34 F +ATOM 285 C CG . PHE A 1 34 ? -2.848 9.446 9.122 1.00 98.88 ? 34 PHE A CG 1 Q65MG6 UNP 34 F +ATOM 286 C CD1 . PHE A 1 34 ? -2.872 10.047 7.854 1.00 98.88 ? 34 PHE A CD1 1 Q65MG6 UNP 34 F +ATOM 287 C CD2 . PHE A 1 34 ? -3.317 8.127 9.284 1.00 98.88 ? 34 PHE A CD2 1 Q65MG6 UNP 34 F +ATOM 288 C CE1 . PHE A 1 34 ? -3.356 9.329 6.750 1.00 98.88 ? 34 PHE A CE1 1 Q65MG6 UNP 34 F +ATOM 289 C CE2 . PHE A 1 34 ? -3.786 7.402 8.176 1.00 98.88 ? 34 PHE A CE2 1 Q65MG6 UNP 34 F +ATOM 290 C CZ . PHE A 1 34 ? -3.805 8.008 6.909 1.00 98.88 ? 34 PHE A CZ 1 Q65MG6 UNP 34 F +ATOM 291 N N . GLN A 1 35 ? 1.015 10.833 9.928 1.00 98.88 ? 35 GLN A N 1 Q65MG6 UNP 35 Q +ATOM 292 C CA . GLN A 1 35 ? 2.259 11.029 9.177 1.00 98.88 ? 35 GLN A CA 1 Q65MG6 UNP 35 Q +ATOM 293 C C . GLN A 1 35 ? 3.261 9.907 9.455 1.00 98.88 ? 35 GLN A C 1 Q65MG6 UNP 35 Q +ATOM 294 C CB . GLN A 1 35 ? 2.891 12.394 9.498 1.00 98.88 ? 35 GLN A CB 1 Q65MG6 UNP 35 Q +ATOM 295 O O . GLN A 1 35 ? 3.861 9.388 8.518 1.00 98.88 ? 35 GLN A O 1 Q65MG6 UNP 35 Q +ATOM 296 C CG . GLN A 1 35 ? 2.119 13.577 8.896 1.00 98.88 ? 35 GLN A CG 1 Q65MG6 UNP 35 Q +ATOM 297 C CD . GLN A 1 35 ? 2.000 13.535 7.379 1.00 98.88 ? 35 GLN A CD 1 Q65MG6 UNP 35 Q +ATOM 298 N NE2 . GLN A 1 35 ? 0.954 14.106 6.826 1.00 98.88 ? 35 GLN A NE2 1 Q65MG6 UNP 35 Q +ATOM 299 O OE1 . GLN A 1 35 ? 2.820 12.996 6.657 1.00 98.88 ? 35 GLN A OE1 1 Q65MG6 UNP 35 Q +ATOM 300 N N . PHE A 1 36 ? 3.386 9.455 10.705 1.00 98.88 ? 36 PHE A N 1 Q65MG6 UNP 36 F +ATOM 301 C CA . PHE A 1 36 ? 4.201 8.286 11.040 1.00 98.88 ? 36 PHE A CA 1 Q65MG6 UNP 36 F +ATOM 302 C C . PHE A 1 36 ? 3.735 7.014 10.304 1.00 98.88 ? 36 PHE A C 1 Q65MG6 UNP 36 F +ATOM 303 C CB . PHE A 1 36 ? 4.195 8.101 12.561 1.00 98.88 ? 36 PHE A CB 1 Q65MG6 UNP 36 F +ATOM 304 O O . PHE A 1 36 ? 4.557 6.273 9.760 1.00 98.88 ? 36 PHE A O 1 Q65MG6 UNP 36 F +ATOM 305 C CG . PHE A 1 36 ? 4.715 6.752 13.007 1.00 98.88 ? 36 PHE A CG 1 Q65MG6 UNP 36 F +ATOM 306 C CD1 . PHE A 1 36 ? 3.818 5.756 13.431 1.00 98.88 ? 36 PHE A CD1 1 Q65MG6 UNP 36 F +ATOM 307 C CD2 . PHE A 1 36 ? 6.093 6.478 12.954 1.00 98.88 ? 36 PHE A CD2 1 Q65MG6 UNP 36 F +ATOM 308 C CE1 . PHE A 1 36 ? 4.299 4.500 13.837 1.00 98.88 ? 36 PHE A CE1 1 Q65MG6 UNP 36 F +ATOM 309 C CE2 . PHE A 1 36 ? 6.574 5.216 13.343 1.00 98.88 ? 36 PHE A CE2 1 Q65MG6 UNP 36 F +ATOM 310 C CZ . PHE A 1 36 ? 5.678 4.229 13.791 1.00 98.88 ? 36 PHE A CZ 1 Q65MG6 UNP 36 F +ATOM 311 N N . ILE A 1 37 ? 2.421 6.772 10.222 1.00 98.94 ? 37 ILE A N 1 Q65MG6 UNP 37 I +ATOM 312 C CA . ILE A 1 37 ? 1.865 5.637 9.465 1.00 98.94 ? 37 ILE A CA 1 Q65MG6 UNP 37 I +ATOM 313 C C . ILE A 1 37 ? 2.198 5.754 7.971 1.00 98.94 ? 37 ILE A C 1 Q65MG6 UNP 37 I +ATOM 314 C CB . ILE A 1 37 ? 0.342 5.511 9.707 1.00 98.94 ? 37 ILE A CB 1 Q65MG6 UNP 37 I +ATOM 315 O O . ILE A 1 37 ? 2.620 4.767 7.364 1.00 98.94 ? 37 ILE A O 1 Q65MG6 UNP 37 I +ATOM 316 C CG1 . ILE A 1 37 ? 0.072 5.064 11.161 1.00 98.94 ? 37 ILE A CG1 1 Q65MG6 UNP 37 I +ATOM 317 C CG2 . ILE A 1 37 ? -0.307 4.505 8.732 1.00 98.94 ? 37 ILE A CG2 1 Q65MG6 UNP 37 I +ATOM 318 C CD1 . ILE A 1 37 ? -1.383 5.254 11.608 1.00 98.94 ? 37 ILE A CD1 1 Q65MG6 UNP 37 I +ATOM 319 N N . LEU A 1 38 ? 2.026 6.936 7.372 1.00 98.94 ? 38 LEU A N 1 Q65MG6 UNP 38 L +ATOM 320 C CA . LEU A 1 38 ? 2.365 7.177 5.966 1.00 98.94 ? 38 LEU A CA 1 Q65MG6 UNP 38 L +ATOM 321 C C . LEU A 1 38 ? 3.865 6.998 5.707 1.00 98.94 ? 38 LEU A C 1 Q65MG6 UNP 38 L +ATOM 322 C CB . LEU A 1 38 ? 1.916 8.589 5.552 1.00 98.94 ? 38 LEU A CB 1 Q65MG6 UNP 38 L +ATOM 323 O O . LEU A 1 38 ? 4.238 6.401 4.700 1.00 98.94 ? 38 LEU A O 1 Q65MG6 UNP 38 L +ATOM 324 C CG . LEU A 1 38 ? 0.393 8.793 5.477 1.00 98.94 ? 38 LEU A CG 1 Q65MG6 UNP 38 L +ATOM 325 C CD1 . LEU A 1 38 ? 0.095 10.269 5.215 1.00 98.94 ? 38 LEU A CD1 1 Q65MG6 UNP 38 L +ATOM 326 C CD2 . LEU A 1 38 ? -0.254 7.974 4.354 1.00 98.94 ? 38 LEU A CD2 1 Q65MG6 UNP 38 L +ATOM 327 N N . GLU A 1 39 ? 4.716 7.437 6.633 1.00 98.88 ? 39 GLU A N 1 Q65MG6 UNP 39 E +ATOM 328 C CA . GLU A 1 39 ? 6.168 7.287 6.552 1.00 98.88 ? 39 GLU A CA 1 Q65MG6 UNP 39 E +ATOM 329 C C . GLU A 1 39 ? 6.593 5.813 6.569 1.00 98.88 ? 39 GLU A C 1 Q65MG6 UNP 39 E +ATOM 330 C CB . GLU A 1 39 ? 6.812 8.082 7.702 1.00 98.88 ? 39 GLU A CB 1 Q65MG6 UNP 39 E +ATOM 331 O O . GLU A 1 39 ? 7.459 5.411 5.792 1.00 98.88 ? 39 GLU A O 1 Q65MG6 UNP 39 E +ATOM 332 C CG . GLU A 1 39 ? 8.346 8.099 7.687 1.00 98.88 ? 39 GLU A CG 1 Q65MG6 UNP 39 E +ATOM 333 C CD . GLU A 1 39 ? 8.959 8.828 6.484 1.00 98.88 ? 39 GLU A CD 1 Q65MG6 UNP 39 E +ATOM 334 O OE1 . GLU A 1 39 ? 10.206 8.857 6.387 1.00 98.88 ? 39 GLU A OE1 1 Q65MG6 UNP 39 E +ATOM 335 O OE2 . GLU A 1 39 ? 8.233 9.341 5.605 1.00 98.88 ? 39 GLU A OE2 1 Q65MG6 UNP 39 E +ATOM 336 N N . ALA A 1 40 ? 5.935 4.967 7.368 1.00 98.88 ? 40 ALA A N 1 Q65MG6 UNP 40 A +ATOM 337 C CA . ALA A 1 40 ? 6.152 3.520 7.323 1.00 98.88 ? 40 ALA A CA 1 Q65MG6 UNP 40 A +ATOM 338 C C . ALA A 1 40 ? 5.785 2.919 5.951 1.00 98.88 ? 40 ALA A C 1 Q65MG6 UNP 40 A +ATOM 339 C CB . ALA A 1 40 ? 5.352 2.867 8.454 1.00 98.88 ? 40 ALA A CB 1 Q65MG6 UNP 40 A +ATOM 340 O O . ALA A 1 40 ? 6.466 2.015 5.458 1.00 98.88 ? 40 ALA A O 1 Q65MG6 UNP 40 A +ATOM 341 N N . GLY A 1 41 ? 4.735 3.439 5.307 1.00 98.81 ? 41 GLY A N 1 Q65MG6 UNP 41 G +ATOM 342 C CA . GLY A 1 41 ? 4.407 3.116 3.918 1.00 98.81 ? 41 GLY A CA 1 Q65MG6 UNP 41 G +ATOM 343 C C . GLY A 1 41 ? 5.496 3.579 2.949 1.00 98.81 ? 41 GLY A C 1 Q65MG6 UNP 41 G +ATOM 344 O O . GLY A 1 41 ? 5.980 2.778 2.154 1.00 98.81 ? 41 GLY A O 1 Q65MG6 UNP 41 G +ATOM 345 N N . ARG A 1 42 ? 5.934 4.839 3.060 1.00 98.75 ? 42 ARG A N 1 Q65MG6 UNP 42 R +ATOM 346 C CA . ARG A 1 42 ? 6.951 5.459 2.194 1.00 98.75 ? 42 ARG A CA 1 Q65MG6 UNP 42 R +ATOM 347 C C . ARG A 1 42 ? 8.300 4.740 2.258 1.00 98.75 ? 42 ARG A C 1 Q65MG6 UNP 42 R +ATOM 348 C CB . ARG A 1 42 ? 7.106 6.937 2.591 1.00 98.75 ? 42 ARG A CB 1 Q65MG6 UNP 42 R +ATOM 349 O O . ARG A 1 42 ? 8.930 4.540 1.232 1.00 98.75 ? 42 ARG A O 1 Q65MG6 UNP 42 R +ATOM 350 C CG . ARG A 1 42 ? 7.896 7.730 1.538 1.00 98.75 ? 42 ARG A CG 1 Q65MG6 UNP 42 R +ATOM 351 C CD . ARG A 1 42 ? 8.188 9.163 2.001 1.00 98.75 ? 42 ARG A CD 1 Q65MG6 UNP 42 R +ATOM 352 N NE . ARG A 1 42 ? 9.206 9.211 3.064 1.00 98.75 ? 42 ARG A NE 1 Q65MG6 UNP 42 R +ATOM 353 N NH1 . ARG A 1 42 ? 11.073 8.868 1.778 1.00 98.75 ? 42 ARG A NH1 1 Q65MG6 UNP 42 R +ATOM 354 N NH2 . ARG A 1 42 ? 11.289 9.177 3.969 1.00 98.75 ? 42 ARG A NH2 1 Q65MG6 UNP 42 R +ATOM 355 C CZ . ARG A 1 42 ? 10.511 9.090 2.935 1.00 98.75 ? 42 ARG A CZ 1 Q65MG6 UNP 42 R +ATOM 356 N N . LEU A 1 43 ? 8.729 4.328 3.451 1.00 98.75 ? 43 LEU A N 1 Q65MG6 UNP 43 L +ATOM 357 C CA . LEU A 1 43 ? 9.998 3.625 3.680 1.00 98.75 ? 43 LEU A CA 1 Q65MG6 UNP 43 L +ATOM 358 C C . LEU A 1 43 ? 9.941 2.123 3.363 1.00 98.75 ? 43 LEU A C 1 Q65MG6 UNP 43 L +ATOM 359 C CB . LEU A 1 43 ? 10.445 3.864 5.133 1.00 98.75 ? 43 LEU A CB 1 Q65MG6 UNP 43 L +ATOM 360 O O . LEU A 1 43 ? 10.915 1.402 3.594 1.00 98.75 ? 43 LEU A O 1 Q65MG6 UNP 43 L +ATOM 361 C CG . LEU A 1 43 ? 10.835 5.315 5.461 1.00 98.75 ? 43 LEU A CG 1 Q65MG6 UNP 43 L +ATOM 362 C CD1 . LEU A 1 43 ? 11.165 5.410 6.950 1.00 98.75 ? 43 LEU A CD1 1 Q65MG6 UNP 43 L +ATOM 363 C CD2 . LEU A 1 43 ? 12.064 5.772 4.669 1.00 98.75 ? 43 LEU A CD2 1 Q65MG6 UNP 43 L +ATOM 364 N N . SER A 1 44 ? 8.808 1.623 2.869 1.00 98.81 ? 44 SER A N 1 Q65MG6 UNP 44 S +ATOM 365 C CA . SER A 1 44 ? 8.685 0.216 2.506 1.00 98.81 ? 44 SER A CA 1 Q65MG6 UNP 44 S +ATOM 366 C C . SER A 1 44 ? 9.604 -0.138 1.332 1.00 98.81 ? 44 SER A C 1 Q65MG6 UNP 44 S +ATOM 367 C CB . SER A 1 44 ? 7.237 -0.122 2.180 1.00 98.81 ? 44 SER A CB 1 Q65MG6 UNP 44 S +ATOM 368 O O . SER A 1 44 ? 9.795 0.672 0.426 1.00 98.81 ? 44 SER A O 1 Q65MG6 UNP 44 S +ATOM 369 O OG . SER A 1 44 ? 6.504 -0.017 3.385 1.00 98.81 ? 44 SER A OG 1 Q65MG6 UNP 44 S +ATOM 370 N N . PRO A 1 45 ? 10.170 -1.357 1.298 1.00 98.56 ? 45 PRO A N 1 Q65MG6 UNP 45 P +ATOM 371 C CA . PRO A 1 45 ? 10.927 -1.802 0.141 1.00 98.56 ? 45 PRO A CA 1 Q65MG6 UNP 45 P +ATOM 372 C C . PRO A 1 45 ? 9.988 -2.105 -1.031 1.00 98.56 ? 45 PRO A C 1 Q65MG6 UNP 45 P +ATOM 373 C CB . PRO A 1 45 ? 11.697 -3.034 0.614 1.00 98.56 ? 45 PRO A CB 1 Q65MG6 UNP 45 P +ATOM 374 O O . PRO A 1 45 ? 8.844 -2.524 -0.850 1.00 98.56 ? 45 PRO A O 1 Q65MG6 UNP 45 P +ATOM 375 C CG . PRO A 1 45 ? 10.766 -3.634 1.668 1.00 98.56 ? 45 PRO A CG 1 Q65MG6 UNP 45 P +ATOM 376 C CD . PRO A 1 45 ? 10.109 -2.407 2.306 1.00 98.56 ? 45 PRO A CD 1 Q65MG6 UNP 45 P +ATOM 377 N N . SER A 1 46 ? 10.503 -1.949 -2.245 1.00 98.62 ? 46 SER A N 1 Q65MG6 UNP 46 S +ATOM 378 C CA . SER A 1 46 ? 9.841 -2.347 -3.489 1.00 98.62 ? 46 SER A CA 1 Q65MG6 UNP 46 S +ATOM 379 C C . SER A 1 46 ? 10.855 -2.992 -4.427 1.00 98.62 ? 46 SER A C 1 Q65MG6 UNP 46 S +ATOM 380 C CB . SER A 1 46 ? 9.170 -1.143 -4.159 1.00 98.62 ? 46 SER A CB 1 Q65MG6 UNP 46 S +ATOM 381 O O . SER A 1 46 ? 12.053 -2.703 -4.351 1.00 98.62 ? 46 SER A O 1 Q65MG6 UNP 46 S +ATOM 382 O OG . SER A 1 46 ? 10.084 -0.074 -4.312 1.00 98.62 ? 46 SER A OG 1 Q65MG6 UNP 46 S +ATOM 383 N N . SER A 1 47 ? 10.396 -3.885 -5.306 1.00 97.62 ? 47 SER A N 1 Q65MG6 UNP 47 S +ATOM 384 C CA . SER A 1 47 ? 11.275 -4.501 -6.303 1.00 97.62 ? 47 SER A CA 1 Q65MG6 UNP 47 S +ATOM 385 C C . SER A 1 47 ? 11.969 -3.435 -7.162 1.00 97.62 ? 47 SER A C 1 Q65MG6 UNP 47 S +ATOM 386 C CB . SER A 1 47 ? 10.504 -5.495 -7.163 1.00 97.62 ? 47 SER A CB 1 Q65MG6 UNP 47 S +ATOM 387 O O . SER A 1 47 ? 11.353 -2.447 -7.565 1.00 97.62 ? 47 SER A O 1 Q65MG6 UNP 47 S +ATOM 388 O OG . SER A 1 47 ? 11.435 -6.152 -8.001 1.00 97.62 ? 47 SER A OG 1 Q65MG6 UNP 47 S +ATOM 389 N N . VAL A 1 48 ? 13.284 -3.600 -7.354 1.00 95.44 ? 48 VAL A N 1 Q65MG6 UNP 48 V +ATOM 390 C CA . VAL A 1 48 ? 14.194 -2.631 -8.002 1.00 95.44 ? 48 VAL A CA 1 Q65MG6 UNP 48 V +ATOM 391 C C . VAL A 1 48 ? 14.241 -1.255 -7.300 1.00 95.44 ? 48 VAL A C 1 Q65MG6 UNP 48 V +ATOM 392 C CB . VAL A 1 48 ? 13.915 -2.580 -9.527 1.00 95.44 ? 48 VAL A CB 1 Q65MG6 UNP 48 V +ATOM 393 O O . VAL A 1 48 ? 15.037 -0.397 -7.672 1.00 95.44 ? 48 VAL A O 1 Q65MG6 UNP 48 V +ATOM 394 C CG1 . VAL A 1 48 ? 14.857 -1.668 -10.324 1.00 95.44 ? 48 VAL A CG1 1 Q65MG6 UNP 48 V +ATOM 395 C CG2 . VAL A 1 48 ? 14.032 -3.984 -10.143 1.00 95.44 ? 48 VAL A CG2 1 Q65MG6 UNP 48 V +ATOM 396 N N . GLY A 1 49 ? 13.510 -1.052 -6.201 1.00 96.81 ? 49 GLY A N 1 Q65MG6 UNP 49 G +ATOM 397 C CA . GLY A 1 49 ? 13.376 0.237 -5.523 1.00 96.81 ? 49 GLY A CA 1 Q65MG6 UNP 49 G +ATOM 398 C C . GLY A 1 49 ? 12.602 1.260 -6.350 1.00 96.81 ? 49 GLY A C 1 Q65MG6 UNP 49 G +ATOM 399 O O . GLY A 1 49 ? 12.954 2.430 -6.311 1.00 96.81 ? 49 GLY A O 1 Q65MG6 UNP 49 G +ATOM 400 N N . LEU A 1 50 ? 11.622 0.819 -7.147 1.00 97.75 ? 50 LEU A N 1 Q65MG6 UNP 50 L +ATOM 401 C CA . LEU A 1 50 ? 10.868 1.710 -8.034 1.00 97.75 ? 50 LEU A CA 1 Q65MG6 UNP 50 L +ATOM 402 C C . LEU A 1 50 ? 9.715 2.437 -7.343 1.00 97.75 ? 50 LEU A C 1 Q65MG6 UNP 50 L +ATOM 403 C CB . LEU A 1 50 ? 10.356 0.940 -9.261 1.00 97.75 ? 50 LEU A CB 1 Q65MG6 UNP 50 L +ATOM 404 O O . LEU A 1 50 ? 9.194 3.371 -7.924 1.00 97.75 ? 50 LEU A O 1 Q65MG6 UNP 50 L +ATOM 405 C CG . LEU A 1 50 ? 11.473 0.396 -10.163 1.00 97.75 ? 50 LEU A CG 1 Q65MG6 UNP 50 L +ATOM 406 C CD1 . LEU A 1 50 ? 10.871 -0.421 -11.298 1.00 97.75 ? 50 LEU A CD1 1 Q65MG6 UNP 50 L +ATOM 407 C CD2 . LEU A 1 50 ? 12.338 1.486 -10.791 1.00 97.75 ? 50 LEU A CD2 1 Q65MG6 UNP 50 L +ATOM 408 N N . GLU A 1 51 ? 9.311 2.029 -6.139 1.00 98.50 ? 51 GLU A N 1 Q65MG6 UNP 51 E +ATOM 409 C CA . GLU A 1 51 ? 8.247 2.674 -5.349 1.00 98.50 ? 51 GLU A CA 1 Q65MG6 UNP 51 E +ATOM 410 C C . GLU A 1 51 ? 6.965 2.945 -6.165 1.00 98.50 ? 51 GLU A C 1 Q65MG6 UNP 51 E +ATOM 411 C CB . GLU A 1 51 ? 8.787 3.953 -4.686 1.00 98.50 ? 51 GLU A CB 1 Q65MG6 UNP 51 E +ATOM 412 O O . GLU A 1 51 ? 6.498 4.084 -6.224 1.00 98.50 ? 51 GLU A O 1 Q65MG6 UNP 51 E +ATOM 413 C CG . GLU A 1 51 ? 10.001 3.719 -3.782 1.00 98.50 ? 51 GLU A CG 1 Q65MG6 UNP 51 E +ATOM 414 C CD . GLU A 1 51 ? 10.565 5.068 -3.329 1.00 98.50 ? 51 GLU A CD 1 Q65MG6 UNP 51 E +ATOM 415 O OE1 . GLU A 1 51 ? 11.606 5.472 -3.894 1.00 98.50 ? 51 GLU A OE1 1 Q65MG6 UNP 51 E +ATOM 416 O OE2 . GLU A 1 51 ? 9.937 5.700 -2.448 1.00 98.50 ? 51 GLU A OE2 1 Q65MG6 UNP 51 E +ATOM 417 N N . PRO A 1 52 ? 6.370 1.925 -6.821 1.00 98.56 ? 52 PRO A N 1 Q65MG6 UNP 52 P +ATOM 418 C CA . PRO A 1 52 ? 5.356 2.125 -7.857 1.00 98.56 ? 52 PRO A CA 1 Q65MG6 UNP 52 P +ATOM 419 C C . PRO A 1 52 ? 3.963 2.431 -7.280 1.00 98.56 ? 52 PRO A C 1 Q65MG6 UNP 52 P +ATOM 420 C CB . PRO A 1 52 ? 5.413 0.833 -8.673 1.00 98.56 ? 52 PRO A CB 1 Q65MG6 UNP 52 P +ATOM 421 O O . PRO A 1 52 ? 2.950 2.001 -7.828 1.00 98.56 ? 52 PRO A O 1 Q65MG6 UNP 52 P +ATOM 422 C CG . PRO A 1 52 ? 5.646 -0.215 -7.585 1.00 98.56 ? 52 PRO A CG 1 Q65MG6 UNP 52 P +ATOM 423 C CD . PRO A 1 52 ? 6.652 0.498 -6.681 1.00 98.56 ? 52 PRO A CD 1 Q65MG6 UNP 52 P +ATOM 424 N N . TRP A 1 53 ? 3.901 3.115 -6.139 1.00 98.75 ? 53 TRP A N 1 Q65MG6 UNP 53 W +ATOM 425 C CA . TRP A 1 53 ? 2.694 3.375 -5.369 1.00 98.75 ? 53 TRP A CA 1 Q65MG6 UNP 53 W +ATOM 426 C C . TRP A 1 53 ? 2.345 4.859 -5.297 1.00 98.75 ? 53 TRP A C 1 Q65MG6 UNP 53 W +ATOM 427 C CB . TRP A 1 53 ? 2.821 2.767 -3.964 1.00 98.75 ? 53 TRP A CB 1 Q65MG6 UNP 53 W +ATOM 428 O O . TRP A 1 53 ? 3.203 5.735 -5.374 1.00 98.75 ? 53 TRP A O 1 Q65MG6 UNP 53 W +ATOM 429 C CG . TRP A 1 53 ? 4.100 3.015 -3.219 1.00 98.75 ? 53 TRP A CG 1 Q65MG6 UNP 53 W +ATOM 430 C CD1 . TRP A 1 53 ? 4.640 4.218 -2.909 1.00 98.75 ? 53 TRP A CD1 1 Q65MG6 UNP 53 W +ATOM 431 C CD2 . TRP A 1 53 ? 5.041 2.022 -2.713 1.00 98.75 ? 53 TRP A CD2 1 Q65MG6 UNP 53 W +ATOM 432 C CE2 . TRP A 1 53 ? 6.133 2.702 -2.096 1.00 98.75 ? 53 TRP A CE2 1 Q65MG6 UNP 53 W +ATOM 433 C CE3 . TRP A 1 53 ? 5.082 0.609 -2.730 1.00 98.75 ? 53 TRP A CE3 1 Q65MG6 UNP 53 W +ATOM 434 N NE1 . TRP A 1 53 ? 5.844 4.037 -2.256 1.00 98.75 ? 53 TRP A NE1 1 Q65MG6 UNP 53 W +ATOM 435 C CH2 . TRP A 1 53 ? 7.211 0.615 -1.543 1.00 98.75 ? 53 TRP A CH2 1 Q65MG6 UNP 53 W +ATOM 436 C CZ2 . TRP A 1 53 ? 7.210 2.019 -1.518 1.00 98.75 ? 53 TRP A CZ2 1 Q65MG6 UNP 53 W +ATOM 437 C CZ3 . TRP A 1 53 ? 6.154 -0.087 -2.143 1.00 98.75 ? 53 TRP A CZ3 1 Q65MG6 UNP 53 W +ATOM 438 N N . GLN A 1 54 ? 1.064 5.123 -5.059 1.00 98.69 ? 54 GLN A N 1 Q65MG6 UNP 54 Q +ATOM 439 C CA . GLN A 1 54 ? 0.561 6.404 -4.572 1.00 98.69 ? 54 GLN A CA 1 Q65MG6 UNP 54 Q +ATOM 440 C C . GLN A 1 54 ? -0.438 6.143 -3.440 1.00 98.69 ? 54 GLN A C 1 Q65MG6 UNP 54 Q +ATOM 441 C CB . GLN A 1 54 ? -0.012 7.211 -5.751 1.00 98.69 ? 54 GLN A CB 1 Q65MG6 UNP 54 Q +ATOM 442 O O . GLN A 1 54 ? -1.318 5.290 -3.562 1.00 98.69 ? 54 GLN A O 1 Q65MG6 UNP 54 Q +ATOM 443 C CG . GLN A 1 54 ? -0.724 8.511 -5.347 1.00 98.69 ? 54 GLN A CG 1 Q65MG6 UNP 54 Q +ATOM 444 C CD . GLN A 1 54 ? -0.681 9.551 -6.465 1.00 98.69 ? 54 GLN A CD 1 Q65MG6 UNP 54 Q +ATOM 445 N NE2 . GLN A 1 54 ? -1.715 9.750 -7.253 1.00 98.69 ? 54 GLN A NE2 1 Q65MG6 UNP 54 Q +ATOM 446 O OE1 . GLN A 1 54 ? 0.327 10.214 -6.623 1.00 98.69 ? 54 GLN A OE1 1 Q65MG6 UNP 54 Q +ATOM 447 N N . PHE A 1 55 ? -0.296 6.856 -2.320 1.00 98.88 ? 55 PHE A N 1 Q65MG6 UNP 55 F +ATOM 448 C CA . PHE A 1 55 ? -1.190 6.731 -1.166 1.00 98.88 ? 55 PHE A CA 1 Q65MG6 UNP 55 F +ATOM 449 C C . PHE A 1 55 ? -2.171 7.903 -1.149 1.00 98.88 ? 55 PHE A C 1 Q65MG6 UNP 55 F +ATOM 450 C CB . PHE A 1 55 ? -0.385 6.637 0.142 1.00 98.88 ? 55 PHE A CB 1 Q65MG6 UNP 55 F +ATOM 451 O O . PHE A 1 55 ? -1.820 9.019 -0.771 1.00 98.88 ? 55 PHE A O 1 Q65MG6 UNP 55 F +ATOM 452 C CG . PHE A 1 55 ? 0.726 5.601 0.170 1.00 98.88 ? 55 PHE A CG 1 Q65MG6 UNP 55 F +ATOM 453 C CD1 . PHE A 1 55 ? 0.555 4.328 -0.412 1.00 98.88 ? 55 PHE A CD1 1 Q65MG6 UNP 55 F +ATOM 454 C CD2 . PHE A 1 55 ? 1.959 5.932 0.763 1.00 98.88 ? 55 PHE A CD2 1 Q65MG6 UNP 55 F +ATOM 455 C CE1 . PHE A 1 55 ? 1.618 3.407 -0.420 1.00 98.88 ? 55 PHE A CE1 1 Q65MG6 UNP 55 F +ATOM 456 C CE2 . PHE A 1 55 ? 3.021 5.014 0.747 1.00 98.88 ? 55 PHE A CE2 1 Q65MG6 UNP 55 F +ATOM 457 C CZ . PHE A 1 55 ? 2.855 3.755 0.149 1.00 98.88 ? 55 PHE A CZ 1 Q65MG6 UNP 55 F +ATOM 458 N N . VAL A 1 56 ? -3.416 7.655 -1.552 1.00 98.88 ? 56 VAL A N 1 Q65MG6 UNP 56 V +ATOM 459 C CA . VAL A 1 56 ? -4.460 8.685 -1.592 1.00 98.88 ? 56 VAL A CA 1 Q65MG6 UNP 56 V +ATOM 460 C C . VAL A 1 56 ? -5.253 8.649 -0.295 1.00 98.88 ? 56 VAL A C 1 Q65MG6 UNP 56 V +ATOM 461 C CB . VAL A 1 56 ? -5.368 8.533 -2.822 1.00 98.88 ? 56 VAL A CB 1 Q65MG6 UNP 56 V +ATOM 462 O O . VAL A 1 56 ? -6.025 7.722 -0.048 1.00 98.88 ? 56 VAL A O 1 Q65MG6 UNP 56 V +ATOM 463 C CG1 . VAL A 1 56 ? -6.403 9.662 -2.891 1.00 98.88 ? 56 VAL A CG1 1 Q65MG6 UNP 56 V +ATOM 464 C CG2 . VAL A 1 56 ? -4.546 8.547 -4.113 1.00 98.88 ? 56 VAL A CG2 1 Q65MG6 UNP 56 V +ATOM 465 N N . VAL A 1 57 ? -5.074 9.670 0.543 1.00 98.81 ? 57 VAL A N 1 Q65MG6 UNP 57 V +ATOM 466 C CA . VAL A 1 57 ? -5.799 9.817 1.811 1.00 98.81 ? 57 VAL A CA 1 Q65MG6 UNP 57 V +ATOM 467 C C . VAL A 1 57 ? -7.160 10.464 1.549 1.00 98.81 ? 57 VAL A C 1 Q65MG6 UNP 57 V +ATOM 468 C CB . VAL A 1 57 ? -4.981 10.610 2.846 1.00 98.81 ? 57 VAL A CB 1 Q65MG6 UNP 57 V +ATOM 469 O O . VAL A 1 57 ? -7.286 11.674 1.370 1.00 98.81 ? 57 VAL A O 1 Q65MG6 UNP 57 V +ATOM 470 C CG1 . VAL A 1 57 ? -5.679 10.571 4.212 1.00 98.81 ? 57 VAL A CG1 1 Q65MG6 UNP 57 V +ATOM 471 C CG2 . VAL A 1 57 ? -3.567 10.036 3.018 1.00 98.81 ? 57 VAL A CG2 1 Q65MG6 UNP 57 V +ATOM 472 N N . VAL A 1 58 ? -8.214 9.654 1.535 1.00 98.69 ? 58 VAL A N 1 Q65MG6 UNP 58 V +ATOM 473 C CA . VAL A 1 58 ? -9.582 10.086 1.248 1.00 98.69 ? 58 VAL A CA 1 Q65MG6 UNP 58 V +ATOM 474 C C . VAL A 1 58 ? -10.258 10.543 2.537 1.00 98.69 ? 58 VAL A C 1 Q65MG6 UNP 58 V +ATOM 475 C CB . VAL A 1 58 ? -10.383 8.976 0.539 1.00 98.69 ? 58 VAL A CB 1 Q65MG6 UNP 58 V +ATOM 476 O O . VAL A 1 58 ? -10.858 9.746 3.255 1.00 98.69 ? 58 VAL A O 1 Q65MG6 UNP 58 V +ATOM 477 C CG1 . VAL A 1 58 ? -11.766 9.494 0.120 1.00 98.69 ? 58 VAL A CG1 1 Q65MG6 UNP 58 V +ATOM 478 C CG2 . VAL A 1 58 ? -9.676 8.492 -0.729 1.00 98.69 ? 58 VAL A CG2 1 Q65MG6 UNP 58 V +ATOM 479 N N . GLN A 1 59 ? -10.215 11.843 2.827 1.00 98.25 ? 59 GLN A N 1 Q65MG6 UNP 59 Q +ATOM 480 C CA . GLN A 1 59 ? -11.029 12.461 3.891 1.00 98.25 ? 59 GLN A CA 1 Q65MG6 UNP 59 Q +ATOM 481 C C . GLN A 1 59 ? -12.358 13.036 3.367 1.00 98.25 ? 59 GLN A C 1 Q65MG6 UNP 59 Q +ATOM 482 C CB . GLN A 1 59 ? -10.207 13.523 4.641 1.00 98.25 ? 59 GLN A CB 1 Q65MG6 UNP 59 Q +ATOM 483 O O . GLN A 1 59 ? -13.260 13.333 4.152 1.00 98.25 ? 59 GLN A O 1 Q65MG6 UNP 59 Q +ATOM 484 C CG . GLN A 1 59 ? -8.947 12.967 5.328 1.00 98.25 ? 59 GLN A CG 1 Q65MG6 UNP 59 Q +ATOM 485 C CD . GLN A 1 59 ? -9.257 11.841 6.306 1.00 98.25 ? 59 GLN A CD 1 Q65MG6 UNP 59 Q +ATOM 486 N NE2 . GLN A 1 59 ? -9.664 12.140 7.519 1.00 98.25 ? 59 GLN A NE2 1 Q65MG6 UNP 59 Q +ATOM 487 O OE1 . GLN A 1 59 ? -9.192 10.667 5.973 1.00 98.25 ? 59 GLN A OE1 1 Q65MG6 UNP 59 Q +ATOM 488 N N . ASN A 1 60 ? -12.504 13.163 2.043 1.00 98.50 ? 60 ASN A N 1 Q65MG6 UNP 60 N +ATOM 489 C CA . ASN A 1 60 ? -13.718 13.661 1.402 1.00 98.50 ? 60 ASN A CA 1 Q65MG6 UNP 60 N +ATOM 490 C C . ASN A 1 60 ? -14.893 12.686 1.620 1.00 98.50 ? 60 ASN A C 1 Q65MG6 UNP 60 N +ATOM 491 C CB . ASN A 1 60 ? -13.428 13.925 -0.087 1.00 98.50 ? 60 ASN A CB 1 Q65MG6 UNP 60 N +ATOM 492 O O . ASN A 1 60 ? -14.873 11.551 1.142 1.00 98.50 ? 60 ASN A O 1 Q65MG6 UNP 60 N +ATOM 493 C CG . ASN A 1 60 ? -14.650 14.484 -0.793 1.00 98.50 ? 60 ASN A CG 1 Q65MG6 UNP 60 N +ATOM 494 N ND2 . ASN A 1 60 ? -14.632 15.717 -1.231 1.00 98.50 ? 60 ASN A ND2 1 Q65MG6 UNP 60 N +ATOM 495 O OD1 . ASN A 1 60 ? -15.673 13.834 -0.881 1.00 98.50 ? 60 ASN A OD1 1 Q65MG6 UNP 60 N +ATOM 496 N N . LYS A 1 61 ? -15.927 13.141 2.338 1.00 97.94 ? 61 LYS A N 1 Q65MG6 UNP 61 K +ATOM 497 C CA . LYS A 1 61 ? -17.088 12.315 2.707 1.00 97.94 ? 61 LYS A CA 1 Q65MG6 UNP 61 K +ATOM 498 C C . LYS A 1 61 ? -17.933 11.886 1.506 1.00 97.94 ? 61 LYS A C 1 Q65MG6 UNP 61 K +ATOM 499 C CB . LYS A 1 61 ? -17.973 13.060 3.719 1.00 97.94 ? 61 LYS A CB 1 Q65MG6 UNP 61 K +ATOM 500 O O . LYS A 1 61 ? -18.462 10.780 1.518 1.00 97.94 ? 61 LYS A O 1 Q65MG6 UNP 61 K +ATOM 501 C CG . LYS A 1 61 ? -17.290 13.270 5.079 1.00 97.94 ? 61 LYS A CG 1 Q65MG6 UNP 61 K +ATOM 502 C CD . LYS A 1 61 ? -18.257 13.943 6.064 1.00 97.94 ? 61 LYS A CD 1 Q65MG6 UNP 61 K +ATOM 503 C CE . LYS A 1 61 ? -17.590 14.125 7.433 1.00 97.94 ? 61 LYS A CE 1 Q65MG6 UNP 61 K +ATOM 504 N NZ . LYS A 1 61 ? -18.512 14.756 8.413 1.00 97.94 ? 61 LYS A NZ 1 Q65MG6 UNP 61 K +ATOM 505 N N . GLU A 1 62 ? -18.052 12.732 0.486 1.00 98.50 ? 62 GLU A N 1 Q65MG6 UNP 62 E +ATOM 506 C CA . GLU A 1 62 ? -18.825 12.421 -0.720 1.00 98.50 ? 62 GLU A CA 1 Q65MG6 UNP 62 E +ATOM 507 C C . GLU A 1 62 ? -18.162 11.290 -1.513 1.00 98.50 ? 62 GLU A C 1 Q65MG6 UNP 62 E +ATOM 508 C CB . GLU A 1 62 ? -18.966 13.691 -1.570 1.00 98.50 ? 62 GLU A CB 1 Q65MG6 UNP 62 E +ATOM 509 O O . GLU A 1 62 ? -18.819 10.310 -1.862 1.00 98.50 ? 62 GLU A O 1 Q65MG6 UNP 62 E +ATOM 510 C CG . GLU A 1 62 ? -19.968 13.492 -2.713 1.00 98.50 ? 62 GLU A CG 1 Q65MG6 UNP 62 E +ATOM 511 C CD . GLU A 1 62 ? -19.931 14.639 -3.728 1.00 98.50 ? 62 GLU A CD 1 Q65MG6 UNP 62 E +ATOM 512 O OE1 . GLU A 1 62 ? -20.170 14.333 -4.922 1.00 98.50 ? 62 GLU A OE1 1 Q65MG6 UNP 62 E +ATOM 513 O OE2 . GLU A 1 62 ? -19.647 15.783 -3.310 1.00 98.50 ? 62 GLU A OE2 1 Q65MG6 UNP 62 E +ATOM 514 N N . LEU A 1 63 ? -16.843 11.367 -1.710 1.00 98.69 ? 63 LEU A N 1 Q65MG6 UNP 63 L +ATOM 515 C CA . LEU A 1 63 ? -16.073 10.309 -2.359 1.00 98.69 ? 63 LEU A CA 1 Q65MG6 UNP 63 L +ATOM 516 C C . LEU A 1 63 ? -16.132 9.005 -1.556 1.00 98.69 ? 63 LEU A C 1 Q65MG6 UNP 63 L +ATOM 517 C CB . LEU A 1 63 ? -14.629 10.789 -2.583 1.00 98.69 ? 63 LEU A CB 1 Q65MG6 UNP 63 L +ATOM 518 O O . LEU A 1 63 ? -16.343 7.940 -2.134 1.00 98.69 ? 63 LEU A O 1 Q65MG6 UNP 63 L +ATOM 519 C CG . LEU A 1 63 ? -13.727 9.748 -3.279 1.00 98.69 ? 63 LEU A CG 1 Q65MG6 UNP 63 L +ATOM 520 C CD1 . LEU A 1 63 ? -14.333 9.238 -4.585 1.00 98.69 ? 63 LEU A CD1 1 Q65MG6 UNP 63 L +ATOM 521 C CD2 . LEU A 1 63 ? -12.367 10.366 -3.598 1.00 98.69 ? 63 LEU A CD2 1 Q65MG6 UNP 63 L +ATOM 522 N N . ARG A 1 64 ? -16.026 9.067 -0.221 1.00 98.75 ? 64 ARG A N 1 Q65MG6 UNP 64 R +ATOM 523 C CA . ARG A 1 64 ? -16.210 7.871 0.618 1.00 98.75 ? 64 ARG A CA 1 Q65MG6 UNP 64 R +ATOM 524 C C . ARG A 1 64 ? -17.586 7.237 0.426 1.00 98.75 ? 64 ARG A C 1 Q65MG6 UNP 64 R +ATOM 525 C CB . ARG A 1 64 ? -15.996 8.173 2.103 1.00 98.75 ? 64 ARG A CB 1 Q65MG6 UNP 64 R +ATOM 526 O O . ARG A 1 64 ? -17.671 6.012 0.384 1.00 98.75 ? 64 ARG A O 1 Q65MG6 UNP 64 R +ATOM 527 C CG . ARG A 1 64 ? -14.530 8.443 2.461 1.00 98.75 ? 64 ARG A CG 1 Q65MG6 UNP 64 R +ATOM 528 C CD . ARG A 1 64 ? -14.396 8.339 3.978 1.00 98.75 ? 64 ARG A CD 1 Q65MG6 UNP 64 R +ATOM 529 N NE . ARG A 1 64 ? -13.080 8.755 4.474 1.00 98.75 ? 64 ARG A NE 1 Q65MG6 UNP 64 R +ATOM 530 N NH1 . ARG A 1 64 ? -13.443 8.234 6.673 1.00 98.75 ? 64 ARG A NH1 1 Q65MG6 UNP 64 R +ATOM 531 N NH2 . ARG A 1 64 ? -11.502 9.144 6.057 1.00 98.75 ? 64 ARG A NH2 1 Q65MG6 UNP 64 R +ATOM 532 C CZ . ARG A 1 64 ? -12.680 8.711 5.728 1.00 98.75 ? 64 ARG A CZ 1 Q65MG6 UNP 64 R +ATOM 533 N N . GLU A 1 65 ? -18.642 8.034 0.283 1.00 98.69 ? 65 GLU A N 1 Q65MG6 UNP 65 E +ATOM 534 C CA . GLU A 1 65 ? -19.987 7.509 0.039 1.00 98.69 ? 65 GLU A CA 1 Q65MG6 UNP 65 E +ATOM 535 C C . GLU A 1 65 ? -20.113 6.877 -1.355 1.00 98.69 ? 65 GLU A C 1 Q65MG6 UNP 65 E +ATOM 536 C CB . GLU A 1 65 ? -21.037 8.604 0.289 1.00 98.69 ? 65 GLU A CB 1 Q65MG6 UNP 65 E +ATOM 537 O O . GLU A 1 65 ? -20.633 5.765 -1.462 1.00 98.69 ? 65 GLU A O 1 Q65MG6 UNP 65 E +ATOM 538 C CG . GLU A 1 65 ? -22.488 8.126 0.098 1.00 98.69 ? 65 GLU A CG 1 Q65MG6 UNP 65 E +ATOM 539 C CD . GLU A 1 65 ? -22.880 6.908 0.956 1.00 98.69 ? 65 GLU A CD 1 Q65MG6 UNP 65 E +ATOM 540 O OE1 . GLU A 1 65 ? -23.850 6.202 0.595 1.00 98.69 ? 65 GLU A OE1 1 Q65MG6 UNP 65 E +ATOM 541 O OE2 . GLU A 1 65 ? -22.233 6.623 1.989 1.00 98.69 ? 65 GLU A OE2 1 Q65MG6 UNP 65 E +ATOM 542 N N . LYS A 1 66 ? -19.565 7.506 -2.406 1.00 98.75 ? 66 LYS A N 1 Q65MG6 UNP 66 K +ATOM 543 C CA . LYS A 1 66 ? -19.499 6.914 -3.759 1.00 98.75 ? 66 LYS A CA 1 Q65MG6 UNP 66 K +ATOM 544 C C . LYS A 1 66 ? -18.790 5.556 -3.733 1.00 98.75 ? 66 LYS A C 1 Q65MG6 UNP 66 K +ATOM 545 C CB . LYS A 1 66 ? -18.789 7.868 -4.742 1.00 98.75 ? 66 LYS A CB 1 Q65MG6 UNP 66 K +ATOM 546 O O . LYS A 1 66 ? -19.323 4.564 -4.227 1.00 98.75 ? 66 LYS A O 1 Q65MG6 UNP 66 K +ATOM 547 C CG . LYS A 1 66 ? -19.603 9.134 -5.057 1.00 98.75 ? 66 LYS A CG 1 Q65MG6 UNP 66 K +ATOM 548 C CD . LYS A 1 66 ? -18.821 10.122 -5.943 1.00 98.75 ? 66 LYS A CD 1 Q65MG6 UNP 66 K +ATOM 549 C CE . LYS A 1 66 ? -19.617 11.429 -6.073 1.00 98.75 ? 66 LYS A CE 1 Q65MG6 UNP 66 K +ATOM 550 N NZ . LYS A 1 66 ? -18.850 12.534 -6.698 1.00 98.75 ? 66 LYS A NZ 1 Q65MG6 UNP 66 K +ATOM 551 N N . LEU A 1 67 ? -17.629 5.483 -3.078 1.00 98.75 ? 67 LEU A N 1 Q65MG6 UNP 67 L +ATOM 552 C CA . LEU A 1 67 ? -16.880 4.235 -2.906 1.00 98.75 ? 67 LEU A CA 1 Q65MG6 UNP 67 L +ATOM 553 C C . LEU A 1 67 ? -17.675 3.196 -2.105 1.00 98.75 ? 67 LEU A C 1 Q65MG6 UNP 67 L +ATOM 554 C CB . LEU A 1 67 ? -15.538 4.535 -2.215 1.00 98.75 ? 67 LEU A CB 1 Q65MG6 UNP 67 L +ATOM 555 O O . LEU A 1 67 ? -17.646 2.007 -2.432 1.00 98.75 ? 67 LEU A O 1 Q65MG6 UNP 67 L +ATOM 556 C CG . LEU A 1 67 ? -14.538 5.325 -3.080 1.00 98.75 ? 67 LEU A CG 1 Q65MG6 UNP 67 L +ATOM 557 C CD1 . LEU A 1 67 ? -13.354 5.752 -2.212 1.00 98.75 ? 67 LEU A CD1 1 Q65MG6 UNP 67 L +ATOM 558 C CD2 . LEU A 1 67 ? -14.012 4.498 -4.253 1.00 98.75 ? 67 LEU A CD2 1 Q65MG6 UNP 67 L +ATOM 559 N N . ARG A 1 68 ? -18.425 3.617 -1.078 1.00 98.56 ? 68 ARG A N 1 Q65MG6 UNP 68 R +ATOM 560 C CA . ARG A 1 68 ? -19.206 2.712 -0.220 1.00 98.56 ? 68 ARG A CA 1 Q65MG6 UNP 68 R +ATOM 561 C C . ARG A 1 68 ? -20.269 1.972 -1.010 1.00 98.56 ? 68 ARG A C 1 Q65MG6 UNP 68 R +ATOM 562 C CB . ARG A 1 68 ? -19.814 3.493 0.958 1.00 98.56 ? 68 ARG A CB 1 Q65MG6 UNP 68 R +ATOM 563 O O . ARG A 1 68 ? -20.461 0.783 -0.780 1.00 98.56 ? 68 ARG A O 1 Q65MG6 UNP 68 R +ATOM 564 C CG . ARG A 1 68 ? -20.369 2.554 2.039 1.00 98.56 ? 68 ARG A CG 1 Q65MG6 UNP 68 R +ATOM 565 C CD . ARG A 1 68 ? -21.057 3.330 3.166 1.00 98.56 ? 68 ARG A CD 1 Q65MG6 UNP 68 R +ATOM 566 N NE . ARG A 1 68 ? -22.313 3.944 2.712 1.00 98.56 ? 68 ARG A NE 1 Q65MG6 UNP 68 R +ATOM 567 N NH1 . ARG A 1 68 ? -23.746 2.172 3.058 1.00 98.56 ? 68 ARG A NH1 1 Q65MG6 UNP 68 R +ATOM 568 N NH2 . ARG A 1 68 ? -24.507 4.096 2.220 1.00 98.56 ? 68 ARG A NH2 1 Q65MG6 UNP 68 R +ATOM 569 C CZ . ARG A 1 68 ? -23.511 3.400 2.678 1.00 98.56 ? 68 ARG A CZ 1 Q65MG6 UNP 68 R +ATOM 570 N N . GLN A 1 69 ? -20.902 2.619 -1.982 1.00 98.62 ? 69 GLN A N 1 Q65MG6 UNP 69 Q +ATOM 571 C CA . GLN A 1 69 ? -21.933 1.998 -2.821 1.00 98.62 ? 69 GLN A CA 1 Q65MG6 UNP 69 Q +ATOM 572 C C . GLN A 1 69 ? -21.419 0.800 -3.636 1.00 98.62 ? 69 GLN A C 1 Q65MG6 UNP 69 Q +ATOM 573 C CB . GLN A 1 69 ? -22.518 3.064 -3.751 1.00 98.62 ? 69 GLN A CB 1 Q65MG6 UNP 69 Q +ATOM 574 O O . GLN A 1 69 ? -22.205 -0.063 -4.022 1.00 98.62 ? 69 GLN A O 1 Q65MG6 UNP 69 Q +ATOM 575 C CG . GLN A 1 69 ? -23.299 4.124 -2.960 1.00 98.62 ? 69 GLN A CG 1 Q65MG6 UNP 69 Q +ATOM 576 C CD . GLN A 1 69 ? -23.784 5.279 -3.825 1.00 98.62 ? 69 GLN A CD 1 Q65MG6 UNP 69 Q +ATOM 577 N NE2 . GLN A 1 69 ? -24.430 6.253 -3.227 1.00 98.62 ? 69 GLN A NE2 1 Q65MG6 UNP 69 Q +ATOM 578 O OE1 . GLN A 1 69 ? -23.617 5.325 -5.032 1.00 98.62 ? 69 GLN A OE1 1 Q65MG6 UNP 69 Q +ATOM 579 N N . VAL A 1 70 ? -20.105 0.712 -3.864 1.00 98.75 ? 70 VAL A N 1 Q65MG6 UNP 70 V +ATOM 580 C CA . VAL A 1 70 ? -19.471 -0.346 -4.670 1.00 98.75 ? 70 VAL A CA 1 Q65MG6 UNP 70 V +ATOM 581 C C . VAL A 1 70 ? -18.497 -1.221 -3.867 1.00 98.75 ? 70 VAL A C 1 Q65MG6 UNP 70 V +ATOM 582 C CB . VAL A 1 70 ? -18.840 0.256 -5.941 1.00 98.75 ? 70 VAL A CB 1 Q65MG6 UNP 70 V +ATOM 583 O O . VAL A 1 70 ? -17.885 -2.135 -4.421 1.00 98.75 ? 70 VAL A O 1 Q65MG6 UNP 70 V +ATOM 584 C CG1 . VAL A 1 70 ? -19.911 1.000 -6.757 1.00 98.75 ? 70 VAL A CG1 1 Q65MG6 UNP 70 V +ATOM 585 C CG2 . VAL A 1 70 ? -17.698 1.226 -5.636 1.00 98.75 ? 70 VAL A CG2 1 Q65MG6 UNP 70 V +ATOM 586 N N . SER A 1 71 ? -18.397 -0.991 -2.552 1.00 98.69 ? 71 SER A N 1 Q65MG6 UNP 71 S +ATOM 587 C CA . SER A 1 71 ? -17.437 -1.644 -1.649 1.00 98.69 ? 71 SER A CA 1 Q65MG6 UNP 71 S +ATOM 588 C C . SER A 1 71 ? -18.124 -2.457 -0.549 1.00 98.69 ? 71 SER A C 1 Q65MG6 UNP 71 S +ATOM 589 C CB . SER A 1 71 ? -16.465 -0.621 -1.058 1.00 98.69 ? 71 SER A CB 1 Q65MG6 UNP 71 S +ATOM 590 O O . SER A 1 71 ? -18.242 -2.025 0.601 1.00 98.69 ? 71 SER A O 1 Q65MG6 UNP 71 S +ATOM 591 O OG . SER A 1 71 ? -15.794 0.070 -2.084 1.00 98.69 ? 71 SER A OG 1 Q65MG6 UNP 71 S +ATOM 592 N N . TRP A 1 72 ? -18.590 -3.663 -0.877 1.00 98.31 ? 72 TRP A N 1 Q65MG6 UNP 72 W +ATOM 593 C CA . TRP A 1 72 ? -19.335 -4.540 0.041 1.00 98.31 ? 72 TRP A CA 1 Q65MG6 UNP 72 W +ATOM 594 C C . TRP A 1 72 ? -18.557 -4.927 1.316 1.00 98.31 ? 72 TRP A C 1 Q65MG6 UNP 72 W +ATOM 595 C CB . TRP A 1 72 ? -19.780 -5.786 -0.738 1.00 98.31 ? 72 TRP A CB 1 Q65MG6 UNP 72 W +ATOM 596 O O . TRP A 1 72 ? -19.156 -5.120 2.370 1.00 98.31 ? 72 TRP A O 1 Q65MG6 UNP 72 W +ATOM 597 C CG . TRP A 1 72 ? -18.675 -6.586 -1.365 1.00 98.31 ? 72 TRP A CG 1 Q65MG6 UNP 72 W +ATOM 598 C CD1 . TRP A 1 72 ? -18.222 -6.456 -2.635 1.00 98.31 ? 72 TRP A CD1 1 Q65MG6 UNP 72 W +ATOM 599 C CD2 . TRP A 1 72 ? -17.858 -7.634 -0.757 1.00 98.31 ? 72 TRP A CD2 1 Q65MG6 UNP 72 W +ATOM 600 C CE2 . TRP A 1 72 ? -16.926 -8.100 -1.732 1.00 98.31 ? 72 TRP A CE2 1 Q65MG6 UNP 72 W +ATOM 601 C CE3 . TRP A 1 72 ? -17.806 -8.231 0.522 1.00 98.31 ? 72 TRP A CE3 1 Q65MG6 UNP 72 W +ATOM 602 N NE1 . TRP A 1 72 ? -17.182 -7.340 -2.851 1.00 98.31 ? 72 TRP A NE1 1 Q65MG6 UNP 72 W +ATOM 603 C CH2 . TRP A 1 72 ? -15.969 -9.685 -0.176 1.00 98.31 ? 72 TRP A CH2 1 Q65MG6 UNP 72 W +ATOM 604 C CZ2 . TRP A 1 72 ? -15.997 -9.112 -1.458 1.00 98.31 ? 72 TRP A CZ2 1 Q65MG6 UNP 72 W +ATOM 605 C CZ3 . TRP A 1 72 ? -16.870 -9.244 0.811 1.00 98.31 ? 72 TRP A CZ3 1 Q65MG6 UNP 72 W +ATOM 606 N N . GLY A 1 73 ? -17.227 -4.990 1.259 1.00 98.12 ? 73 GLY A N 1 Q65MG6 UNP 73 G +ATOM 607 C CA . GLY A 1 73 ? -16.340 -5.302 2.384 1.00 98.12 ? 73 GLY A CA 1 Q65MG6 UNP 73 G +ATOM 608 C C . GLY A 1 73 ? -15.915 -4.097 3.235 1.00 98.12 ? 73 GLY A C 1 Q65MG6 UNP 73 G +ATOM 609 O O . GLY A 1 73 ? -15.198 -4.287 4.224 1.00 98.12 ? 73 GLY A O 1 Q65MG6 UNP 73 G +ATOM 610 N N . ALA A 1 74 ? -16.343 -2.883 2.868 1.00 98.25 ? 74 ALA A N 1 Q65MG6 UNP 74 A +ATOM 611 C CA . ALA A 1 74 ? -15.937 -1.618 3.494 1.00 98.25 ? 74 ALA A CA 1 Q65MG6 UNP 74 A +ATOM 612 C C . ALA A 1 74 ? -17.107 -0.809 4.092 1.00 98.25 ? 74 ALA A C 1 Q65MG6 UNP 74 A +ATOM 613 C CB . ALA A 1 74 ? -15.150 -0.801 2.469 1.00 98.25 ? 74 ALA A CB 1 Q65MG6 UNP 74 A +ATOM 614 O O . ALA A 1 74 ? -16.956 0.380 4.376 1.00 98.25 ? 74 ALA A O 1 Q65MG6 UNP 74 A +ATOM 615 N N . GLN A 1 75 ? -18.279 -1.432 4.266 1.00 98.50 ? 75 GLN A N 1 Q65MG6 UNP 75 Q +ATOM 616 C CA . GLN A 1 75 ? -19.514 -0.741 4.662 1.00 98.50 ? 75 GLN A CA 1 Q65MG6 UNP 75 Q +ATOM 617 C C . GLN A 1 75 ? -19.433 -0.046 6.023 1.00 98.50 ? 75 GLN A C 1 Q65MG6 UNP 75 Q +ATOM 618 C CB . GLN A 1 75 ? -20.691 -1.731 4.688 1.00 98.50 ? 75 GLN A CB 1 Q65MG6 UNP 75 Q +ATOM 619 O O . GLN A 1 75 ? -20.019 1.019 6.177 1.00 98.50 ? 75 GLN A O 1 Q65MG6 UNP 75 Q +ATOM 620 C CG . GLN A 1 75 ? -21.070 -2.254 3.300 1.00 98.50 ? 75 GLN A CG 1 Q65MG6 UNP 75 Q +ATOM 621 C CD . GLN A 1 75 ? -21.453 -1.128 2.349 1.00 98.50 ? 75 GLN A CD 1 Q65MG6 UNP 75 Q +ATOM 622 N NE2 . GLN A 1 75 ? -20.778 -1.030 1.234 1.00 98.50 ? 75 GLN A NE2 1 Q65MG6 UNP 75 Q +ATOM 623 O OE1 . GLN A 1 75 ? -22.313 -0.302 2.620 1.00 98.50 ? 75 GLN A OE1 1 Q65MG6 UNP 75 Q +ATOM 624 N N . GLY A 1 76 ? -18.724 -0.632 6.993 1.00 97.94 ? 76 GLY A N 1 Q65MG6 UNP 76 G +ATOM 625 C CA . GLY A 1 76 ? -18.521 -0.013 8.306 1.00 97.94 ? 76 GLY A CA 1 Q65MG6 UNP 76 G +ATOM 626 C C . GLY A 1 76 ? -17.321 0.932 8.328 1.00 97.94 ? 76 GLY A C 1 Q65MG6 UNP 76 G +ATOM 627 O O . GLY A 1 76 ? -17.341 1.948 9.005 1.00 97.94 ? 76 GLY A O 1 Q65MG6 UNP 76 G +ATOM 628 N N . GLN A 1 77 ? -16.293 0.651 7.531 1.00 98.69 ? 77 GLN A N 1 Q65MG6 UNP 77 Q +ATOM 629 C CA . GLN A 1 77 ? -15.020 1.362 7.569 1.00 98.69 ? 77 GLN A CA 1 Q65MG6 UNP 77 Q +ATOM 630 C C . GLN A 1 77 ? -15.065 2.716 6.857 1.00 98.69 ? 77 GLN A C 1 Q65MG6 UNP 77 Q +ATOM 631 C CB . GLN A 1 77 ? -13.917 0.478 6.974 1.00 98.69 ? 77 GLN A CB 1 Q65MG6 UNP 77 Q +ATOM 632 O O . GLN A 1 77 ? -14.580 3.700 7.405 1.00 98.69 ? 77 GLN A O 1 Q65MG6 UNP 77 Q +ATOM 633 C CG . GLN A 1 77 ? -13.709 -0.853 7.721 1.00 98.69 ? 77 GLN A CG 1 Q65MG6 UNP 77 Q +ATOM 634 C CD . GLN A 1 77 ? -14.506 -2.012 7.129 1.00 98.69 ? 77 GLN A CD 1 Q65MG6 UNP 77 Q +ATOM 635 N NE2 . GLN A 1 77 ? -13.911 -3.172 6.977 1.00 98.69 ? 77 GLN A NE2 1 Q65MG6 UNP 77 Q +ATOM 636 O OE1 . GLN A 1 77 ? -15.650 -1.907 6.715 1.00 98.69 ? 77 GLN A OE1 1 Q65MG6 UNP 77 Q +ATOM 637 N N . LEU A 1 78 ? -15.652 2.793 5.659 1.00 98.62 ? 78 LEU A N 1 Q65MG6 UNP 78 L +ATOM 638 C CA . LEU A 1 78 ? -15.778 4.052 4.915 1.00 98.62 ? 78 LEU A CA 1 Q65MG6 UNP 78 L +ATOM 639 C C . LEU A 1 78 ? -16.479 5.165 5.722 1.00 98.62 ? 78 LEU A C 1 Q65MG6 UNP 78 L +ATOM 640 C CB . LEU A 1 78 ? -16.482 3.781 3.572 1.00 98.62 ? 78 LEU A CB 1 Q65MG6 UNP 78 L +ATOM 641 O O . LEU A 1 78 ? -15.928 6.268 5.795 1.00 98.62 ? 78 LEU A O 1 Q65MG6 UNP 78 L +ATOM 642 C CG . LEU A 1 78 ? -15.514 3.204 2.526 1.00 98.62 ? 78 LEU A CG 1 Q65MG6 UNP 78 L +ATOM 643 C CD1 . LEU A 1 78 ? -16.287 2.538 1.402 1.00 98.62 ? 78 LEU A CD1 1 Q65MG6 UNP 78 L +ATOM 644 C CD2 . LEU A 1 78 ? -14.663 4.308 1.895 1.00 98.62 ? 78 LEU A CD2 1 Q65MG6 UNP 78 L +ATOM 645 N N . PRO A 1 79 ? -17.633 4.916 6.375 1.00 98.25 ? 79 PRO A N 1 Q65MG6 UNP 79 P +ATOM 646 C CA . PRO A 1 79 ? -18.304 5.963 7.139 1.00 98.25 ? 79 PRO A CA 1 Q65MG6 UNP 79 P +ATOM 647 C C . PRO A 1 79 ? -17.608 6.309 8.460 1.00 98.25 ? 79 PRO A C 1 Q65MG6 UNP 79 P +ATOM 648 C CB . PRO A 1 79 ? -19.734 5.463 7.355 1.00 98.25 ? 79 PRO A CB 1 Q65MG6 UNP 79 P +ATOM 649 O O . PRO A 1 79 ? -17.662 7.470 8.863 1.00 98.25 ? 79 PRO A O 1 Q65MG6 UNP 79 P +ATOM 650 C CG . PRO A 1 79 ? -19.618 3.946 7.269 1.00 98.25 ? 79 PRO A CG 1 Q65MG6 UNP 79 P +ATOM 651 C CD . PRO A 1 79 ? -18.489 3.740 6.268 1.00 98.25 ? 79 PRO A CD 1 Q65MG6 UNP 79 P +ATOM 652 N N . THR A 1 80 ? -16.962 5.354 9.143 1.00 98.62 ? 80 THR A N 1 Q65MG6 UNP 80 T +ATOM 653 C CA . THR A 1 80 ? -16.520 5.581 10.531 1.00 98.62 ? 80 THR A CA 1 Q65MG6 UNP 80 T +ATOM 654 C C . THR A 1 80 ? -15.013 5.740 10.720 1.00 98.62 ? 80 THR A C 1 Q65MG6 UNP 80 T +ATOM 655 C CB . THR A 1 80 ? -17.033 4.496 11.483 1.00 98.62 ? 80 THR A CB 1 Q65MG6 UNP 80 T +ATOM 656 O O . THR A 1 80 ? -14.595 6.271 11.745 1.00 98.62 ? 80 THR A O 1 Q65MG6 UNP 80 T +ATOM 657 C CG2 . THR A 1 80 ? -18.521 4.182 11.351 1.00 98.62 ? 80 THR A CG2 1 Q65MG6 UNP 80 T +ATOM 658 O OG1 . THR A 1 80 ? -16.288 3.315 11.306 1.00 98.62 ? 80 THR A OG1 1 Q65MG6 UNP 80 T +ATOM 659 N N . ALA A 1 81 ? -14.171 5.286 9.787 1.00 98.75 ? 81 ALA A N 1 Q65MG6 UNP 81 A +ATOM 660 C CA . ALA A 1 81 ? -12.721 5.360 9.956 1.00 98.75 ? 81 ALA A CA 1 Q65MG6 UNP 81 A +ATOM 661 C C . ALA A 1 81 ? -12.237 6.812 10.082 1.00 98.75 ? 81 ALA A C 1 Q65MG6 UNP 81 A +ATOM 662 C CB . ALA A 1 81 ? -12.025 4.634 8.804 1.00 98.75 ? 81 ALA A CB 1 Q65MG6 UNP 81 A +ATOM 663 O O . ALA A 1 81 ? -12.709 7.709 9.372 1.00 98.75 ? 81 ALA A O 1 Q65MG6 UNP 81 A +ATOM 664 N N . SER A 1 82 ? -11.241 7.040 10.942 1.00 98.88 ? 82 SER A N 1 Q65MG6 UNP 82 S +ATOM 665 C CA . SER A 1 82 ? -10.568 8.338 11.035 1.00 98.88 ? 82 SER A CA 1 Q65MG6 UNP 82 S +ATOM 666 C C . SER A 1 82 ? -9.926 8.695 9.697 1.00 98.88 ? 82 SER A C 1 Q65MG6 UNP 82 S +ATOM 667 C CB . SER A 1 82 ? -9.501 8.322 12.130 1.00 98.88 ? 82 SER A CB 1 Q65MG6 UNP 82 S +ATOM 668 O O . SER A 1 82 ? -10.179 9.773 9.159 1.00 98.88 ? 82 SER A O 1 Q65MG6 UNP 82 S +ATOM 669 O OG . SER A 1 82 ? -8.877 9.590 12.205 1.00 98.88 ? 82 SER A OG 1 Q65MG6 UNP 82 S +ATOM 670 N N . HIS A 1 83 ? -9.161 7.760 9.134 1.00 98.88 ? 83 HIS A N 1 Q65MG6 UNP 83 H +ATOM 671 C CA . HIS A 1 83 ? -8.495 7.905 7.848 1.00 98.88 ? 83 HIS A CA 1 Q65MG6 UNP 83 H +ATOM 672 C C . HIS A 1 83 ? -8.804 6.717 6.942 1.00 98.88 ? 83 HIS A C 1 Q65MG6 UNP 83 H +ATOM 673 C CB . HIS A 1 83 ? -6.991 8.096 8.051 1.00 98.88 ? 83 HIS A CB 1 Q65MG6 UNP 83 H +ATOM 674 O O . HIS A 1 83 ? -8.881 5.576 7.400 1.00 98.88 ? 83 HIS A O 1 Q65MG6 UNP 83 H +ATOM 675 C CG . HIS A 1 83 ? -6.659 9.413 8.701 1.00 98.88 ? 83 HIS A CG 1 Q65MG6 UNP 83 H +ATOM 676 C CD2 . HIS A 1 83 ? -6.502 10.605 8.053 1.00 98.88 ? 83 HIS A CD2 1 Q65MG6 UNP 83 H +ATOM 677 N ND1 . HIS A 1 83 ? -6.463 9.651 10.045 1.00 98.88 ? 83 HIS A ND1 1 Q65MG6 UNP 83 H +ATOM 678 C CE1 . HIS A 1 83 ? -6.196 10.962 10.198 1.00 98.88 ? 83 HIS A CE1 1 Q65MG6 UNP 83 H +ATOM 679 N NE2 . HIS A 1 83 ? -6.250 11.582 9.012 1.00 98.88 ? 83 HIS A NE2 1 Q65MG6 UNP 83 H +ATOM 680 N N . PHE A 1 84 ? -8.982 6.992 5.654 1.00 98.94 ? 84 PHE A N 1 Q65MG6 UNP 84 F +ATOM 681 C CA . PHE A 1 84 ? -9.207 5.975 4.634 1.00 98.94 ? 84 PHE A CA 1 Q65MG6 UNP 84 F +ATOM 682 C C . PHE A 1 84 ? -8.211 6.207 3.506 1.00 98.94 ? 84 PHE A C 1 Q65MG6 UNP 84 F +ATOM 683 C CB . PHE A 1 84 ? -10.664 6.024 4.157 1.00 98.94 ? 84 PHE A CB 1 Q65MG6 UNP 84 F +ATOM 684 O O . PHE A 1 84 ? -8.134 7.312 2.980 1.00 98.94 ? 84 PHE A O 1 Q65MG6 UNP 84 F +ATOM 685 C CG . PHE A 1 84 ? -11.104 4.742 3.483 1.00 98.94 ? 84 PHE A CG 1 Q65MG6 UNP 84 F +ATOM 686 C CD1 . PHE A 1 84 ? -10.831 4.517 2.121 1.00 98.94 ? 84 PHE A CD1 1 Q65MG6 UNP 84 F +ATOM 687 C CD2 . PHE A 1 84 ? -11.766 3.754 4.238 1.00 98.94 ? 84 PHE A CD2 1 Q65MG6 UNP 84 F +ATOM 688 C CE1 . PHE A 1 84 ? -11.221 3.308 1.519 1.00 98.94 ? 84 PHE A CE1 1 Q65MG6 UNP 84 F +ATOM 689 C CE2 . PHE A 1 84 ? -12.153 2.546 3.634 1.00 98.94 ? 84 PHE A CE2 1 Q65MG6 UNP 84 F +ATOM 690 C CZ . PHE A 1 84 ? -11.879 2.322 2.274 1.00 98.94 ? 84 PHE A CZ 1 Q65MG6 UNP 84 F +ATOM 691 N N . VAL A 1 85 ? -7.425 5.195 3.169 1.00 98.94 ? 85 VAL A N 1 Q65MG6 UNP 85 V +ATOM 692 C CA . VAL A 1 85 ? -6.330 5.285 2.205 1.00 98.94 ? 85 VAL A CA 1 Q65MG6 UNP 85 V +ATOM 693 C C . VAL A 1 85 ? -6.621 4.357 1.041 1.00 98.94 ? 85 VAL A C 1 Q65MG6 UNP 85 V +ATOM 694 C CB . VAL A 1 85 ? -4.965 4.966 2.843 1.00 98.94 ? 85 VAL A CB 1 Q65MG6 UNP 85 V +ATOM 695 O O . VAL A 1 85 ? -6.896 3.172 1.238 1.00 98.94 ? 85 VAL A O 1 Q65MG6 UNP 85 V +ATOM 696 C CG1 . VAL A 1 85 ? -3.820 5.225 1.856 1.00 98.94 ? 85 VAL A CG1 1 Q65MG6 UNP 85 V +ATOM 697 C CG2 . VAL A 1 85 ? -4.715 5.833 4.082 1.00 98.94 ? 85 VAL A CG2 1 Q65MG6 UNP 85 V +ATOM 698 N N . LEU A 1 86 ? -6.538 4.891 -0.171 1.00 98.94 ? 86 LEU A N 1 Q65MG6 UNP 86 L +ATOM 699 C CA . LEU A 1 86 ? -6.446 4.097 -1.387 1.00 98.94 ? 86 LEU A CA 1 Q65MG6 UNP 86 L +ATOM 700 C C . LEU A 1 86 ? -4.964 3.934 -1.704 1.00 98.94 ? 86 LEU A C 1 Q65MG6 UNP 86 L +ATOM 701 C CB . LEU A 1 86 ? -7.193 4.774 -2.547 1.00 98.94 ? 86 LEU A CB 1 Q65MG6 UNP 86 L +ATOM 702 O O . LEU A 1 86 ? -4.251 4.927 -1.852 1.00 98.94 ? 86 LEU A O 1 Q65MG6 UNP 86 L +ATOM 703 C CG . LEU A 1 86 ? -8.605 5.278 -2.215 1.00 98.94 ? 86 LEU A CG 1 Q65MG6 UNP 86 L +ATOM 704 C CD1 . LEU A 1 86 ? -9.181 6.004 -3.423 1.00 98.94 ? 86 LEU A CD1 1 Q65MG6 UNP 86 L +ATOM 705 C CD2 . LEU A 1 86 ? -9.546 4.142 -1.827 1.00 98.94 ? 86 LEU A CD2 1 Q65MG6 UNP 86 L +ATOM 706 N N . LEU A 1 87 ? -4.497 2.695 -1.777 1.00 98.88 ? 87 LEU A N 1 Q65MG6 UNP 87 L +ATOM 707 C CA . LEU A 1 87 ? -3.172 2.397 -2.285 1.00 98.88 ? 87 LEU A CA 1 Q65MG6 UNP 87 L +ATOM 708 C C . LEU A 1 87 ? -3.324 2.145 -3.778 1.00 98.88 ? 87 LEU A C 1 Q65MG6 UNP 87 L +ATOM 709 C CB . LEU A 1 87 ? -2.544 1.209 -1.547 1.00 98.88 ? 87 LEU A CB 1 Q65MG6 UNP 87 L +ATOM 710 O O . LEU A 1 87 ? -3.899 1.135 -4.196 1.00 98.88 ? 87 LEU A O 1 Q65MG6 UNP 87 L +ATOM 711 C CG . LEU A 1 87 ? -2.174 1.496 -0.079 1.00 98.88 ? 87 LEU A CG 1 Q65MG6 UNP 87 L +ATOM 712 C CD1 . LEU A 1 87 ? -3.335 1.292 0.904 1.00 98.88 ? 87 LEU A CD1 1 Q65MG6 UNP 87 L +ATOM 713 C CD2 . LEU A 1 87 ? -1.045 0.553 0.331 1.00 98.88 ? 87 LEU A CD2 1 Q65MG6 UNP 87 L +ATOM 714 N N . LEU A 1 88 ? -2.846 3.095 -4.569 1.00 98.94 ? 88 LEU A N 1 Q65MG6 UNP 88 L +ATOM 715 C CA . LEU A 1 88 ? -2.803 2.979 -6.015 1.00 98.94 ? 88 LEU A CA 1 Q65MG6 UNP 88 L +ATOM 716 C C . LEU A 1 88 ? -1.469 2.381 -6.442 1.00 98.94 ? 88 LEU A C 1 Q65MG6 UNP 88 L +ATOM 717 C CB . LEU A 1 88 ? -3.037 4.336 -6.686 1.00 98.94 ? 88 LEU A CB 1 Q65MG6 UNP 88 L +ATOM 718 O O . LEU A 1 88 ? -0.441 2.624 -5.806 1.00 98.94 ? 88 LEU A O 1 Q65MG6 UNP 88 L +ATOM 719 C CG . LEU A 1 88 ? -4.250 5.139 -6.195 1.00 98.94 ? 88 LEU A CG 1 Q65MG6 UNP 88 L +ATOM 720 C CD1 . LEU A 1 88 ? -4.382 6.394 -7.051 1.00 98.94 ? 88 LEU A CD1 1 Q65MG6 UNP 88 L +ATOM 721 C CD2 . LEU A 1 88 ? -5.563 4.359 -6.271 1.00 98.94 ? 88 LEU A CD2 1 Q65MG6 UNP 88 L +ATOM 722 N N . GLY A 1 89 ? -1.500 1.611 -7.521 1.00 98.81 ? 89 GLY A N 1 Q65MG6 UNP 89 G +ATOM 723 C CA . GLY A 1 89 ? -0.320 1.149 -8.234 1.00 98.81 ? 89 GLY A CA 1 Q65MG6 UNP 89 G +ATOM 724 C C . GLY A 1 89 ? -0.154 1.923 -9.535 1.00 98.81 ? 89 GLY A C 1 Q65MG6 UNP 89 G +ATOM 725 O O . GLY A 1 89 ? -1.143 2.290 -10.164 1.00 98.81 ? 89 GLY A O 1 Q65MG6 UNP 89 G +ATOM 726 N N . ARG A 1 90 ? 1.082 2.160 -9.960 1.00 98.75 ? 90 ARG A N 1 Q65MG6 UNP 90 R +ATOM 727 C CA . ARG A 1 90 ? 1.372 2.611 -11.323 1.00 98.75 ? 90 ARG A CA 1 Q65MG6 UNP 90 R +ATOM 728 C C . ARG A 1 90 ? 0.982 1.547 -12.347 1.00 98.75 ? 90 ARG A C 1 Q65MG6 UNP 90 R +ATOM 729 C CB . ARG A 1 90 ? 2.849 2.980 -11.442 1.00 98.75 ? 90 ARG A CB 1 Q65MG6 UNP 90 R +ATOM 730 O O . ARG A 1 90 ? 1.194 0.358 -12.121 1.00 98.75 ? 90 ARG A O 1 Q65MG6 UNP 90 R +ATOM 731 C CG . ARG A 1 90 ? 3.098 4.301 -10.722 1.00 98.75 ? 90 ARG A CG 1 Q65MG6 UNP 90 R +ATOM 732 C CD . ARG A 1 90 ? 4.542 4.750 -10.885 1.00 98.75 ? 90 ARG A CD 1 Q65MG6 UNP 90 R +ATOM 733 N NE . ARG A 1 90 ? 4.733 6.056 -10.239 1.00 98.75 ? 90 ARG A NE 1 Q65MG6 UNP 90 R +ATOM 734 N NH1 . ARG A 1 90 ? 3.893 7.330 -11.942 1.00 98.75 ? 90 ARG A NH1 1 Q65MG6 UNP 90 R +ATOM 735 N NH2 . ARG A 1 90 ? 4.661 8.329 -10.100 1.00 98.75 ? 90 ARG A NH2 1 Q65MG6 UNP 90 R +ATOM 736 C CZ . ARG A 1 90 ? 4.432 7.230 -10.762 1.00 98.75 ? 90 ARG A CZ 1 Q65MG6 UNP 90 R +ATOM 737 N N . THR A 1 91 ? 0.415 1.966 -13.469 1.00 98.56 ? 91 THR A N 1 Q65MG6 UNP 91 T +ATOM 738 C CA . THR A 1 91 ? 0.015 1.054 -14.550 1.00 98.56 ? 91 THR A CA 1 Q65MG6 UNP 91 T +ATOM 739 C C . THR A 1 91 ? 1.212 0.648 -15.410 1.00 98.56 ? 91 THR A C 1 Q65MG6 UNP 91 T +ATOM 740 C CB . THR A 1 91 ? -1.101 1.661 -15.414 1.00 98.56 ? 91 THR A CB 1 Q65MG6 UNP 91 T +ATOM 741 O O . THR A 1 91 ? 2.320 1.172 -15.266 1.00 98.56 ? 91 THR A O 1 Q65MG6 UNP 91 T +ATOM 742 C CG2 . THR A 1 91 ? -2.317 2.065 -14.586 1.00 98.56 ? 91 THR A CG2 1 Q65MG6 UNP 91 T +ATOM 743 O OG1 . THR A 1 91 ? -0.604 2.783 -16.095 1.00 98.56 ? 91 THR A OG1 1 Q65MG6 UNP 91 T +ATOM 744 N N . ALA A 1 92 ? 0.995 -0.271 -16.355 1.00 97.69 ? 92 ALA A N 1 Q65MG6 UNP 92 A +ATOM 745 C CA . ALA A 1 92 ? 2.024 -0.665 -17.315 1.00 97.69 ? 92 ALA A CA 1 Q65MG6 UNP 92 A +ATOM 746 C C . ALA A 1 92 ? 2.594 0.524 -18.113 1.00 97.69 ? 92 ALA A C 1 Q65MG6 UNP 92 A +ATOM 747 C CB . ALA A 1 92 ? 1.433 -1.734 -18.236 1.00 97.69 ? 92 ALA A CB 1 Q65MG6 UNP 92 A +ATOM 748 O O . ALA A 1 92 ? 3.779 0.511 -18.439 1.00 97.69 ? 92 ALA A O 1 Q65MG6 UNP 92 A +ATOM 749 N N . LYS A 1 93 ? 1.792 1.578 -18.338 1.00 96.06 ? 93 LYS A N 1 Q65MG6 UNP 93 K +ATOM 750 C CA . LYS A 1 93 ? 2.206 2.844 -18.976 1.00 96.06 ? 93 LYS A CA 1 Q65MG6 UNP 93 K +ATOM 751 C C . LYS A 1 93 ? 3.436 3.463 -18.303 1.00 96.06 ? 93 LYS A C 1 Q65MG6 UNP 93 K +ATOM 752 C CB . LYS A 1 93 ? 1.005 3.814 -18.932 1.00 96.06 ? 93 LYS A CB 1 Q65MG6 UNP 93 K +ATOM 753 O O . LYS A 1 93 ? 4.317 3.965 -18.990 1.00 96.06 ? 93 LYS A O 1 Q65MG6 UNP 93 K +ATOM 754 C CG . LYS A 1 93 ? 1.206 5.187 -19.610 1.00 96.06 ? 93 LYS A CG 1 Q65MG6 UNP 93 K +ATOM 755 C CD . LYS A 1 93 ? -0.090 6.023 -19.494 1.00 96.06 ? 93 LYS A CD 1 Q65MG6 UNP 93 K +ATOM 756 C CE . LYS A 1 93 ? 0.020 7.472 -20.014 1.00 96.06 ? 93 LYS A CE 1 Q65MG6 UNP 93 K +ATOM 757 N NZ . LYS A 1 93 ? -1.279 8.217 -19.886 1.00 96.06 ? 93 LYS A NZ 1 Q65MG6 UNP 93 K +ATOM 758 N N . GLU A 1 94 ? 3.511 3.398 -16.975 1.00 97.94 ? 94 GLU A N 1 Q65MG6 UNP 94 E +ATOM 759 C CA . GLU A 1 94 ? 4.581 4.022 -16.185 1.00 97.94 ? 94 GLU A CA 1 Q65MG6 UNP 94 E +ATOM 760 C C . GLU A 1 94 ? 5.641 3.017 -15.709 1.00 97.94 ? 94 GLU A C 1 Q65MG6 UNP 94 E +ATOM 761 C CB . GLU A 1 94 ? 3.964 4.724 -14.963 1.00 97.94 ? 94 GLU A CB 1 Q65MG6 UNP 94 E +ATOM 762 O O . GLU A 1 94 ? 6.621 3.428 -15.099 1.00 97.94 ? 94 GLU A O 1 Q65MG6 UNP 94 E +ATOM 763 C CG . GLU A 1 94 ? 3.016 5.896 -15.253 1.00 97.94 ? 94 GLU A CG 1 Q65MG6 UNP 94 E +ATOM 764 C CD . GLU A 1 94 ? 3.731 7.202 -15.631 1.00 97.94 ? 94 GLU A CD 1 Q65MG6 UNP 94 E +ATOM 765 O OE1 . GLU A 1 94 ? 3.795 7.510 -16.835 1.00 97.94 ? 94 GLU A OE1 1 Q65MG6 UNP 94 E +ATOM 766 O OE2 . GLU A 1 94 ? 4.087 7.983 -14.706 1.00 97.94 ? 94 GLU A OE2 1 Q65MG6 UNP 94 E +ATOM 767 N N . MET A 1 95 ? 5.443 1.710 -15.910 1.00 97.94 ? 95 MET A N 1 Q65MG6 UNP 95 M +ATOM 768 C CA . MET A 1 95 ? 6.288 0.680 -15.283 1.00 97.94 ? 95 MET A CA 1 Q65MG6 UNP 95 M +ATOM 769 C C . MET A 1 95 ? 7.076 -0.188 -16.255 1.00 97.94 ? 95 MET A C 1 Q65MG6 UNP 95 M +ATOM 770 C CB . MET A 1 95 ? 5.457 -0.171 -14.316 1.00 97.94 ? 95 MET A CB 1 Q65MG6 UNP 95 M +ATOM 771 O O . MET A 1 95 ? 7.949 -0.938 -15.814 1.00 97.94 ? 95 MET A O 1 Q65MG6 UNP 95 M +ATOM 772 C CG . MET A 1 95 ? 4.975 0.659 -13.122 1.00 97.94 ? 95 MET A CG 1 Q65MG6 UNP 95 M +ATOM 773 S SD . MET A 1 95 ? 6.222 1.581 -12.176 1.00 97.94 ? 95 MET A SD 1 Q65MG6 UNP 95 M +ATOM 774 C CE . MET A 1 95 ? 7.453 0.300 -11.840 1.00 97.94 ? 95 MET A CE 1 Q65MG6 UNP 95 M +ATOM 775 N N . ARG A 1 96 ? 6.830 -0.073 -17.563 1.00 96.44 ? 96 ARG A N 1 Q65MG6 UNP 96 R +ATOM 776 C CA . ARG A 1 96 ? 7.734 -0.644 -18.569 1.00 96.44 ? 96 ARG A CA 1 Q65MG6 UNP 96 R +ATOM 777 C C . ARG A 1 96 ? 9.113 0.010 -18.469 1.00 96.44 ? 96 ARG A C 1 Q65MG6 UNP 96 R +ATOM 778 C CB . ARG A 1 96 ? 7.138 -0.505 -19.977 1.00 96.44 ? 96 ARG A CB 1 Q65MG6 UNP 96 R +ATOM 779 O O . ARG A 1 96 ? 9.235 1.176 -18.084 1.00 96.44 ? 96 ARG A O 1 Q65MG6 UNP 96 R +ATOM 780 C CG . ARG A 1 96 ? 5.932 -1.435 -20.174 1.00 96.44 ? 96 ARG A CG 1 Q65MG6 UNP 96 R +ATOM 781 C CD . ARG A 1 96 ? 5.252 -1.188 -21.526 1.00 96.44 ? 96 ARG A CD 1 Q65MG6 UNP 96 R +ATOM 782 N NE . ARG A 1 96 ? 3.986 -1.948 -21.643 1.00 96.44 ? 96 ARG A NE 1 Q65MG6 UNP 96 R +ATOM 783 N NH1 . ARG A 1 96 ? 4.830 -3.914 -22.483 1.00 96.44 ? 96 ARG A NH1 1 Q65MG6 UNP 96 R +ATOM 784 N NH2 . ARG A 1 96 ? 2.638 -3.739 -22.076 1.00 96.44 ? 96 ARG A NH2 1 Q65MG6 UNP 96 R +ATOM 785 C CZ . ARG A 1 96 ? 3.824 -3.189 -22.070 1.00 96.44 ? 96 ARG A CZ 1 Q65MG6 UNP 96 R +ATOM 786 N N . ARG A 1 97 ? 10.158 -0.756 -18.783 1.00 95.38 ? 97 ARG A N 1 Q65MG6 UNP 97 R +ATOM 787 C CA . ARG A 1 97 ? 11.560 -0.335 -18.627 1.00 95.38 ? 97 ARG A CA 1 Q65MG6 UNP 97 R +ATOM 788 C C . ARG A 1 97 ? 11.918 0.917 -19.420 1.00 95.38 ? 97 ARG A C 1 Q65MG6 UNP 97 R +ATOM 789 C CB . ARG A 1 97 ? 12.499 -1.507 -18.957 1.00 95.38 ? 97 ARG A CB 1 Q65MG6 UNP 97 R +ATOM 790 O O . ARG A 1 97 ? 12.757 1.681 -18.978 1.00 95.38 ? 97 ARG A O 1 Q65MG6 UNP 97 R +ATOM 791 C CG . ARG A 1 97 ? 12.364 -2.094 -20.371 1.00 95.38 ? 97 ARG A CG 1 Q65MG6 UNP 97 R +ATOM 792 C CD . ARG A 1 97 ? 13.460 -1.688 -21.354 1.00 95.38 ? 97 ARG A CD 1 Q65MG6 UNP 97 R +ATOM 793 N NE . ARG A 1 97 ? 13.228 -2.387 -22.621 1.00 95.38 ? 97 ARG A NE 1 Q65MG6 UNP 97 R +ATOM 794 N NH1 . ARG A 1 97 ? 13.469 -0.684 -24.117 1.00 95.38 ? 97 ARG A NH1 1 Q65MG6 UNP 97 R +ATOM 795 N NH2 . ARG A 1 97 ? 12.852 -2.731 -24.813 1.00 95.38 ? 97 ARG A NH2 1 Q65MG6 UNP 97 R +ATOM 796 C CZ . ARG A 1 97 ? 13.182 -1.924 -23.846 1.00 95.38 ? 97 ARG A CZ 1 Q65MG6 UNP 97 R +ATOM 797 N N . ASP A 1 98 ? 11.268 1.161 -20.546 1.00 91.44 ? 98 ASP A N 1 Q65MG6 UNP 98 D +ATOM 798 C CA . ASP A 1 98 ? 11.461 2.342 -21.391 1.00 91.44 ? 98 ASP A CA 1 Q65MG6 UNP 98 D +ATOM 799 C C . ASP A 1 98 ? 10.624 3.566 -20.972 1.00 91.44 ? 98 ASP A C 1 Q65MG6 UNP 98 D +ATOM 800 C CB . ASP A 1 98 ? 11.199 1.942 -22.850 1.00 91.44 ? 98 ASP A CB 1 Q65MG6 UNP 98 D +ATOM 801 O O . ASP A 1 98 ? 10.695 4.616 -21.613 1.00 91.44 ? 98 ASP A O 1 Q65MG6 UNP 98 D +ATOM 802 C CG . ASP A 1 98 ? 9.773 1.443 -23.133 1.00 91.44 ? 98 ASP A CG 1 Q65MG6 UNP 98 D +ATOM 803 O OD1 . ASP A 1 98 ? 9.075 1.023 -22.176 1.00 91.44 ? 98 ASP A OD1 1 Q65MG6 UNP 98 D +ATOM 804 O OD2 . ASP A 1 98 ? 9.409 1.439 -24.326 1.00 91.44 ? 98 ASP A OD2 1 Q65MG6 UNP 98 D +ATOM 805 N N . SER A 1 99 ? 9.844 3.470 -19.892 1.00 96.69 ? 99 SER A N 1 Q65MG6 UNP 99 S +ATOM 806 C CA . SER A 1 99 ? 9.032 4.586 -19.406 1.00 96.69 ? 99 SER A CA 1 Q65MG6 UNP 99 S +ATOM 807 C C . SER A 1 99 ? 9.871 5.694 -18.756 1.00 96.69 ? 99 SER A C 1 Q65MG6 UNP 99 S +ATOM 808 C CB . SER A 1 99 ? 7.946 4.104 -18.445 1.00 96.69 ? 99 SER A CB 1 Q65MG6 UNP 99 S +ATOM 809 O O . SER A 1 99 ? 10.885 5.458 -18.090 1.00 96.69 ? 99 SER A O 1 Q65MG6 UNP 99 S +ATOM 810 O OG . SER A 1 99 ? 8.545 3.671 -17.246 1.00 96.69 ? 99 SER A OG 1 Q65MG6 UNP 99 S +ATOM 811 N N . GLY A 1 100 ? 9.385 6.934 -18.876 1.00 96.75 ? 100 GLY A N 1 Q65MG6 UNP 100 G +ATOM 812 C CA . GLY A 1 100 ? 10.017 8.095 -18.244 1.00 96.75 ? 100 GLY A CA 1 Q65MG6 UNP 100 G +ATOM 813 C C . GLY A 1 100 ? 10.063 8.001 -16.717 1.00 96.75 ? 100 GLY A C 1 Q65MG6 UNP 100 G +ATOM 814 O O . GLY A 1 100 ? 11.022 8.468 -16.112 1.00 96.75 ? 100 GLY A O 1 Q65MG6 UNP 100 G +ATOM 815 N N . TYR A 1 101 ? 9.073 7.353 -16.094 1.00 97.88 ? 101 TYR A N 1 Q65MG6 UNP 101 Y +ATOM 816 C CA . TYR A 1 101 ? 9.050 7.160 -14.646 1.00 97.88 ? 101 TYR A CA 1 Q65MG6 UNP 101 Y +ATOM 817 C C . TYR A 1 101 ? 10.178 6.244 -14.162 1.00 97.88 ? 101 TYR A C 1 Q65MG6 UNP 101 Y +ATOM 818 C CB . TYR A 1 101 ? 7.695 6.599 -14.214 1.00 97.88 ? 101 TYR A CB 1 Q65MG6 UNP 101 Y +ATOM 819 O O . TYR A 1 101 ? 10.870 6.597 -13.210 1.00 97.88 ? 101 TYR A O 1 Q65MG6 UNP 101 Y +ATOM 820 C CG . TYR A 1 101 ? 7.667 6.247 -12.741 1.00 97.88 ? 101 TYR A CG 1 Q65MG6 UNP 101 Y +ATOM 821 C CD1 . TYR A 1 101 ? 7.757 4.906 -12.319 1.00 97.88 ? 101 TYR A CD1 1 Q65MG6 UNP 101 Y +ATOM 822 C CD2 . TYR A 1 101 ? 7.654 7.286 -11.792 1.00 97.88 ? 101 TYR A CD2 1 Q65MG6 UNP 101 Y +ATOM 823 C CE1 . TYR A 1 101 ? 7.755 4.602 -10.945 1.00 97.88 ? 101 TYR A CE1 1 Q65MG6 UNP 101 Y +ATOM 824 C CE2 . TYR A 1 101 ? 7.676 6.989 -10.419 1.00 97.88 ? 101 TYR A CE2 1 Q65MG6 UNP 101 Y +ATOM 825 O OH . TYR A 1 101 ? 7.470 5.358 -8.697 1.00 97.88 ? 101 TYR A OH 1 Q65MG6 UNP 101 Y +ATOM 826 C CZ . TYR A 1 101 ? 7.681 5.645 -10.001 1.00 97.88 ? 101 TYR A CZ 1 Q65MG6 UNP 101 Y +ATOM 827 N N . VAL A 1 102 ? 10.399 5.096 -14.816 1.00 98.00 ? 102 VAL A N 1 Q65MG6 UNP 102 V +ATOM 828 C CA . VAL A 1 102 ? 11.485 4.180 -14.432 1.00 98.00 ? 102 VAL A CA 1 Q65MG6 UNP 102 V +ATOM 829 C C . VAL A 1 102 ? 12.840 4.876 -14.573 1.00 98.00 ? 102 VAL A C 1 Q65MG6 UNP 102 V +ATOM 830 C CB . VAL A 1 102 ? 11.423 2.870 -15.243 1.00 98.00 ? 102 VAL A CB 1 Q65MG6 UNP 102 V +ATOM 831 O O . VAL A 1 102 ? 13.649 4.822 -13.647 1.00 98.00 ? 102 VAL A O 1 Q65MG6 UNP 102 V +ATOM 832 C CG1 . VAL A 1 102 ? 12.647 1.975 -14.999 1.00 98.00 ? 102 VAL A CG1 1 Q65MG6 UNP 102 V +ATOM 833 C CG2 . VAL A 1 102 ? 10.185 2.057 -14.839 1.00 98.00 ? 102 VAL A CG2 1 Q65MG6 UNP 102 V +ATOM 834 N N . ALA A 1 103 ? 13.069 5.589 -15.679 1.00 97.19 ? 103 ALA A N 1 Q65MG6 UNP 103 A +ATOM 835 C CA . ALA A 1 103 ? 14.300 6.352 -15.879 1.00 97.19 ? 103 ALA A CA 1 Q65MG6 UNP 103 A +ATOM 836 C C . ALA A 1 103 ? 14.501 7.441 -14.804 1.00 97.19 ? 103 ALA A C 1 Q65MG6 UNP 103 A +ATOM 837 C CB . ALA A 1 103 ? 14.274 6.941 -17.293 1.00 97.19 ? 103 ALA A CB 1 Q65MG6 UNP 103 A +ATOM 838 O O . ALA A 1 103 ? 15.594 7.556 -14.242 1.00 97.19 ? 103 ALA A O 1 Q65MG6 UNP 103 A +ATOM 839 N N . ASP A 1 104 ? 13.450 8.203 -14.479 1.00 97.62 ? 104 ASP A N 1 Q65MG6 UNP 104 D +ATOM 840 C CA . ASP A 1 104 ? 13.472 9.235 -13.436 1.00 97.62 ? 104 ASP A CA 1 Q65MG6 UNP 104 D +ATOM 841 C C . ASP A 1 104 ? 13.783 8.645 -12.055 1.00 97.62 ? 104 ASP A C 1 Q65MG6 UNP 104 D +ATOM 842 C CB . ASP A 1 104 ? 12.132 9.984 -13.424 1.00 97.62 ? 104 ASP A CB 1 Q65MG6 UNP 104 D +ATOM 843 O O . ASP A 1 104 ? 14.668 9.142 -11.357 1.00 97.62 ? 104 ASP A O 1 Q65MG6 UNP 104 D +ATOM 844 C CG . ASP A 1 104 ? 12.102 11.093 -12.368 1.00 97.62 ? 104 ASP A CG 1 Q65MG6 UNP 104 D +ATOM 845 O OD1 . ASP A 1 104 ? 12.721 12.148 -12.623 1.00 97.62 ? 104 ASP A OD1 1 Q65MG6 UNP 104 D +ATOM 846 O OD2 . ASP A 1 104 ? 11.462 10.885 -11.314 1.00 97.62 ? 104 ASP A OD2 1 Q65MG6 UNP 104 D +ATOM 847 N N . GLN A 1 105 ? 13.150 7.525 -11.700 1.00 97.88 ? 105 GLN A N 1 Q65MG6 UNP 105 Q +ATOM 848 C CA . GLN A 1 105 ? 13.405 6.816 -10.447 1.00 97.88 ? 105 GLN A CA 1 Q65MG6 UNP 105 Q +ATOM 849 C C . GLN A 1 105 ? 14.882 6.415 -10.315 1.00 97.88 ? 105 GLN A C 1 Q65MG6 UNP 105 Q +ATOM 850 C CB . GLN A 1 105 ? 12.480 5.580 -10.345 1.00 97.88 ? 105 GLN A CB 1 Q65MG6 UNP 105 Q +ATOM 851 O O . GLN A 1 105 ? 15.555 6.752 -9.334 1.00 97.88 ? 105 GLN A O 1 Q65MG6 UNP 105 Q +ATOM 852 C CG . GLN A 1 105 ? 11.378 5.751 -9.286 1.00 97.88 ? 105 GLN A CG 1 Q65MG6 UNP 105 Q +ATOM 853 C CD . GLN A 1 105 ? 11.933 5.776 -7.862 1.00 97.88 ? 105 GLN A CD 1 Q65MG6 UNP 105 Q +ATOM 854 N NE2 . GLN A 1 105 ? 11.110 5.722 -6.841 1.00 97.88 ? 105 GLN A NE2 1 Q65MG6 UNP 105 Q +ATOM 855 O OE1 . GLN A 1 105 ? 13.127 5.812 -7.653 1.00 97.88 ? 105 GLN A OE1 1 Q65MG6 UNP 105 Q +ATOM 856 N N . LEU A 1 106 ? 15.440 5.753 -11.333 1.00 97.44 ? 106 LEU A N 1 Q65MG6 UNP 106 L +ATOM 857 C CA . LEU A 1 106 ? 16.841 5.325 -11.306 1.00 97.44 ? 106 LEU A CA 1 Q65MG6 UNP 106 L +ATOM 858 C C . LEU A 1 106 ? 17.811 6.518 -11.219 1.00 97.44 ? 106 LEU A C 1 Q65MG6 UNP 106 L +ATOM 859 C CB . LEU A 1 106 ? 17.150 4.467 -12.541 1.00 97.44 ? 106 LEU A CB 1 Q65MG6 UNP 106 L +ATOM 860 O O . LEU A 1 106 ? 18.814 6.457 -10.497 1.00 97.44 ? 106 LEU A O 1 Q65MG6 UNP 106 L +ATOM 861 C CG . LEU A 1 106 ? 16.352 3.157 -12.669 1.00 97.44 ? 106 LEU A CG 1 Q65MG6 UNP 106 L +ATOM 862 C CD1 . LEU A 1 106 ? 16.752 2.471 -13.969 1.00 97.44 ? 106 LEU A CD1 1 Q65MG6 UNP 106 L +ATOM 863 C CD2 . LEU A 1 106 ? 16.581 2.188 -11.510 1.00 97.44 ? 106 LEU A CD2 1 Q65MG6 UNP 106 L +ATOM 864 N N . LYS A 1 107 ? 17.504 7.616 -11.916 1.00 97.75 ? 107 LYS A N 1 Q65MG6 UNP 107 K +ATOM 865 C CA . LYS A 1 107 ? 18.366 8.800 -11.986 1.00 97.75 ? 107 LYS A CA 1 Q65MG6 UNP 107 K +ATOM 866 C C . LYS A 1 107 ? 18.271 9.690 -10.754 1.00 97.75 ? 107 LYS A C 1 Q65MG6 UNP 107 K +ATOM 867 C CB . LYS A 1 107 ? 18.043 9.580 -13.270 1.00 97.75 ? 107 LYS A CB 1 Q65MG6 UNP 107 K +ATOM 868 O O . LYS A 1 107 ? 19.289 10.036 -10.162 1.00 97.75 ? 107 LYS A O 1 Q65MG6 UNP 107 K +ATOM 869 C CG . LYS A 1 107 ? 19.041 10.729 -13.474 1.00 97.75 ? 107 LYS A CG 1 Q65MG6 UNP 107 K +ATOM 870 C CD . LYS A 1 107 ? 18.920 11.352 -14.869 1.00 97.75 ? 107 LYS A CD 1 Q65MG6 UNP 107 K +ATOM 871 C CE . LYS A 1 107 ? 20.070 12.350 -15.056 1.00 97.75 ? 107 LYS A CE 1 Q65MG6 UNP 107 K +ATOM 872 N NZ . LYS A 1 107 ? 20.344 12.639 -16.484 1.00 97.75 ? 107 LYS A NZ 1 Q65MG6 UNP 107 K +ATOM 873 N N . HIS A 1 108 ? 17.073 10.103 -10.375 1.00 97.69 ? 108 HIS A N 1 Q65MG6 UNP 108 H +ATOM 874 C CA . HIS A 1 108 ? 16.876 11.201 -9.431 1.00 97.69 ? 108 HIS A CA 1 Q65MG6 UNP 108 H +ATOM 875 C C . HIS A 1 108 ? 16.670 10.724 -7.995 1.00 97.69 ? 108 HIS A C 1 Q65MG6 UNP 108 H +ATOM 876 C CB . HIS A 1 108 ? 15.740 12.092 -9.947 1.00 97.69 ? 108 HIS A CB 1 Q65MG6 UNP 108 H +ATOM 877 O O . HIS A 1 108 ? 17.137 11.381 -7.059 1.00 97.69 ? 108 HIS A O 1 Q65MG6 UNP 108 H +ATOM 878 C CG . HIS A 1 108 ? 16.151 12.815 -11.205 1.00 97.69 ? 108 HIS A CG 1 Q65MG6 UNP 108 H +ATOM 879 C CD2 . HIS A 1 108 ? 15.734 12.567 -12.485 1.00 97.69 ? 108 HIS A CD2 1 Q65MG6 UNP 108 H +ATOM 880 N ND1 . HIS A 1 108 ? 17.100 13.807 -11.279 1.00 97.69 ? 108 HIS A ND1 1 Q65MG6 UNP 108 H +ATOM 881 C CE1 . HIS A 1 108 ? 17.236 14.161 -12.565 1.00 97.69 ? 108 HIS A CE1 1 Q65MG6 UNP 108 H +ATOM 882 N NE2 . HIS A 1 108 ? 16.444 13.420 -13.345 1.00 97.69 ? 108 HIS A NE2 1 Q65MG6 UNP 108 H +ATOM 883 N N . VAL A 1 109 ? 16.054 9.558 -7.813 1.00 97.06 ? 109 VAL A N 1 Q65MG6 UNP 109 V +ATOM 884 C CA . VAL A 1 109 ? 15.820 8.981 -6.485 1.00 97.06 ? 109 VAL A CA 1 Q65MG6 UNP 109 V +ATOM 885 C C . VAL A 1 109 ? 16.950 8.022 -6.120 1.00 97.06 ? 109 VAL A C 1 Q65MG6 UNP 109 V +ATOM 886 C CB . VAL A 1 109 ? 14.464 8.281 -6.450 1.00 97.06 ? 109 VAL A CB 1 Q65MG6 UNP 109 V +ATOM 887 O O . VAL A 1 109 ? 17.602 8.210 -5.091 1.00 97.06 ? 109 VAL A O 1 Q65MG6 UNP 109 V +ATOM 888 C CG1 . VAL A 1 109 ? 14.169 7.663 -5.081 1.00 97.06 ? 109 VAL A CG1 1 Q65MG6 UNP 109 V +ATOM 889 C CG2 . VAL A 1 109 ? 13.303 9.206 -6.841 1.00 97.06 ? 109 VAL A CG2 1 Q65MG6 UNP 109 V +ATOM 890 N N . LYS A 1 110 ? 17.255 7.044 -6.986 1.00 96.62 ? 110 LYS A N 1 Q65MG6 UNP 110 K +ATOM 891 C CA . LYS A 1 110 ? 18.343 6.081 -6.741 1.00 96.62 ? 110 LYS A CA 1 Q65MG6 UNP 110 K +ATOM 892 C C . LYS A 1 110 ? 19.736 6.641 -7.008 1.00 96.62 ? 110 LYS A C 1 Q65MG6 UNP 110 K +ATOM 893 C CB . LYS A 1 110 ? 18.136 4.786 -7.527 1.00 96.62 ? 110 LYS A CB 1 Q65MG6 UNP 110 K +ATOM 894 O O . LYS A 1 110 ? 20.706 6.054 -6.529 1.00 96.62 ? 110 LYS A O 1 Q65MG6 UNP 110 K +ATOM 895 C CG . LYS A 1 110 ? 16.795 4.111 -7.210 1.00 96.62 ? 110 LYS A CG 1 Q65MG6 UNP 110 K +ATOM 896 C CD . LYS A 1 110 ? 16.800 2.649 -7.654 1.00 96.62 ? 110 LYS A CD 1 Q65MG6 UNP 110 K +ATOM 897 C CE . LYS A 1 110 ? 17.630 1.808 -6.682 1.00 96.62 ? 110 LYS A CE 1 Q65MG6 UNP 110 K +ATOM 898 N NZ . LYS A 1 110 ? 17.559 0.382 -7.052 1.00 96.62 ? 110 LYS A NZ 1 Q65MG6 UNP 110 K +ATOM 899 N N . LYS A 1 111 ? 19.843 7.764 -7.728 1.00 97.25 ? 111 LYS A N 1 Q65MG6 UNP 111 K +ATOM 900 C CA . LYS A 1 111 ? 21.109 8.468 -8.008 1.00 97.25 ? 111 LYS A CA 1 Q65MG6 UNP 111 K +ATOM 901 C C . LYS A 1 111 ? 22.160 7.561 -8.644 1.00 97.25 ? 111 LYS A C 1 Q65MG6 UNP 111 K +ATOM 902 C CB . LYS A 1 111 ? 21.605 9.205 -6.756 1.00 97.25 ? 111 LYS A CB 1 Q65MG6 UNP 111 K +ATOM 903 O O . LYS A 1 111 ? 23.341 7.630 -8.302 1.00 97.25 ? 111 LYS A O 1 Q65MG6 UNP 111 K +ATOM 904 C CG . LYS A 1 111 ? 20.563 10.202 -6.242 1.00 97.25 ? 111 LYS A CG 1 Q65MG6 UNP 111 K +ATOM 905 C CD . LYS A 1 111 ? 21.088 10.925 -5.004 1.00 97.25 ? 111 LYS A CD 1 Q65MG6 UNP 111 K +ATOM 906 C CE . LYS A 1 111 ? 19.977 11.840 -4.495 1.00 97.25 ? 111 LYS A CE 1 Q65MG6 UNP 111 K +ATOM 907 N NZ . LYS A 1 111 ? 20.406 12.587 -3.291 1.00 97.25 ? 111 LYS A NZ 1 Q65MG6 UNP 111 K +ATOM 908 N N . MET A 1 112 ? 21.717 6.684 -9.542 1.00 97.19 ? 112 MET A N 1 Q65MG6 UNP 112 M +ATOM 909 C CA . MET A 1 112 ? 22.615 5.803 -10.278 1.00 97.19 ? 112 MET A CA 1 Q65MG6 UNP 112 M +ATOM 910 C C . MET A 1 112 ? 23.407 6.593 -11.335 1.00 97.19 ? 112 MET A C 1 Q65MG6 UNP 112 M +ATOM 911 C CB . MET A 1 112 ? 21.830 4.646 -10.906 1.00 97.19 ? 112 MET A CB 1 Q65MG6 UNP 112 M +ATOM 912 O O . MET A 1 112 ? 22.879 7.560 -11.889 1.00 97.19 ? 112 MET A O 1 Q65MG6 UNP 112 M +ATOM 913 C CG . MET A 1 112 ? 21.335 3.681 -9.828 1.00 97.19 ? 112 MET A CG 1 Q65MG6 UNP 112 M +ATOM 914 S SD . MET A 1 112 ? 20.354 2.311 -10.486 1.00 97.19 ? 112 MET A SD 1 Q65MG6 UNP 112 M +ATOM 915 C CE . MET A 1 112 ? 20.329 1.233 -9.042 1.00 97.19 ? 112 MET A CE 1 Q65MG6 UNP 112 M +ATOM 916 N N . PRO A 1 113 ? 24.660 6.202 -11.628 1.00 97.50 ? 113 PRO A N 1 Q65MG6 UNP 113 P +ATOM 917 C CA . PRO A 1 113 ? 25.421 6.758 -12.746 1.00 97.50 ? 113 PRO A CA 1 Q65MG6 UNP 113 P +ATOM 918 C C . PRO A 1 113 ? 24.707 6.553 -14.090 1.00 97.50 ? 113 PRO A C 1 Q65MG6 UNP 113 P +ATOM 919 C CB . PRO A 1 113 ? 26.767 6.033 -12.713 1.00 97.50 ? 113 PRO A CB 1 Q65MG6 UNP 113 P +ATOM 920 O O . PRO A 1 113 ? 24.045 5.534 -14.287 1.00 97.50 ? 113 PRO A O 1 Q65MG6 UNP 113 P +ATOM 921 C CG . PRO A 1 113 ? 26.915 5.591 -11.263 1.00 97.50 ? 113 PRO A CG 1 Q65MG6 UNP 113 P +ATOM 922 C CD . PRO A 1 113 ? 25.478 5.253 -10.885 1.00 97.50 ? 113 PRO A CD 1 Q65MG6 UNP 113 P +ATOM 923 N N . GLU A 1 114 ? 24.845 7.506 -15.016 1.00 96.12 ? 114 GLU A N 1 Q65MG6 UNP 114 E +ATOM 924 C CA . GLU A 1 114 ? 24.134 7.483 -16.307 1.00 96.12 ? 114 GLU A CA 1 Q65MG6 UNP 114 E +ATOM 925 C C . GLU A 1 114 ? 24.475 6.240 -17.142 1.00 96.12 ? 114 GLU A C 1 Q65MG6 UNP 114 E +ATOM 926 C CB . GLU A 1 114 ? 24.410 8.777 -17.102 1.00 96.12 ? 114 GLU A CB 1 Q65MG6 UNP 114 E +ATOM 927 O O . GLU A 1 114 ? 23.571 5.600 -17.671 1.00 96.12 ? 114 GLU A O 1 Q65MG6 UNP 114 E +ATOM 928 C CG . GLU A 1 114 ? 23.773 10.002 -16.421 1.00 96.12 ? 114 GLU A CG 1 Q65MG6 UNP 114 E +ATOM 929 C CD . GLU A 1 114 ? 23.867 11.318 -17.217 1.00 96.12 ? 114 GLU A CD 1 Q65MG6 UNP 114 E +ATOM 930 O OE1 . GLU A 1 114 ? 23.002 12.198 -16.946 1.00 96.12 ? 114 GLU A OE1 1 Q65MG6 UNP 114 E +ATOM 931 O OE2 . GLU A 1 114 ? 24.794 11.476 -18.037 1.00 96.12 ? 114 GLU A OE2 1 Q65MG6 UNP 114 E +ATOM 932 N N . ASP A 1 115 ? 25.741 5.822 -17.163 1.00 96.81 ? 115 ASP A N 1 Q65MG6 UNP 115 D +ATOM 933 C CA . ASP A 1 115 ? 26.200 4.618 -17.864 1.00 96.81 ? 115 ASP A CA 1 Q65MG6 UNP 115 D +ATOM 934 C C . ASP A 1 115 ? 25.576 3.331 -17.299 1.00 96.81 ? 115 ASP A C 1 Q65MG6 UNP 115 D +ATOM 935 C CB . ASP A 1 115 ? 27.737 4.548 -17.789 1.00 96.81 ? 115 ASP A CB 1 Q65MG6 UNP 115 D +ATOM 936 O O . ASP A 1 115 ? 25.272 2.391 -18.036 1.00 96.81 ? 115 ASP A O 1 Q65MG6 UNP 115 D +ATOM 937 C CG . ASP A 1 115 ? 28.283 4.384 -16.361 1.00 96.81 ? 115 ASP A CG 1 Q65MG6 UNP 115 D +ATOM 938 O OD1 . ASP A 1 115 ? 27.899 5.198 -15.488 1.00 96.81 ? 115 ASP A OD1 1 Q65MG6 UNP 115 D +ATOM 939 O OD2 . ASP A 1 115 ? 29.082 3.448 -16.138 1.00 96.81 ? 115 ASP A OD2 1 Q65MG6 UNP 115 D +ATOM 940 N N . ILE A 1 116 ? 25.337 3.279 -15.987 1.00 96.50 ? 116 ILE A N 1 Q65MG6 UNP 116 I +ATOM 941 C CA . ILE A 1 116 ? 24.639 2.156 -15.355 1.00 96.50 ? 116 ILE A CA 1 Q65MG6 UNP 116 I +ATOM 942 C C . ILE A 1 116 ? 23.161 2.163 -15.745 1.00 96.50 ? 116 ILE A C 1 Q65MG6 UNP 116 I +ATOM 943 C CB . ILE A 1 116 ? 24.840 2.175 -13.825 1.00 96.50 ? 116 ILE A CB 1 Q65MG6 UNP 116 I +ATOM 944 O O . ILE A 1 116 ? 22.619 1.110 -16.074 1.00 96.50 ? 116 ILE A O 1 Q65MG6 UNP 116 I +ATOM 945 C CG1 . ILE A 1 116 ? 26.331 2.055 -13.432 1.00 96.50 ? 116 ILE A CG1 1 Q65MG6 UNP 116 I +ATOM 946 C CG2 . ILE A 1 116 ? 24.014 1.073 -13.134 1.00 96.50 ? 116 ILE A CG2 1 Q65MG6 UNP 116 I +ATOM 947 C CD1 . ILE A 1 116 ? 27.045 0.780 -13.905 1.00 96.50 ? 116 ILE A CD1 1 Q65MG6 UNP 116 I +ATOM 948 N N . ILE A 1 117 ? 22.516 3.331 -15.750 1.00 96.38 ? 117 ILE A N 1 Q65MG6 UNP 117 I +ATOM 949 C CA . ILE A 1 117 ? 21.107 3.471 -16.140 1.00 96.38 ? 117 ILE A CA 1 Q65MG6 UNP 117 I +ATOM 950 C C . ILE A 1 117 ? 20.908 3.032 -17.595 1.00 96.38 ? 117 ILE A C 1 Q65MG6 UNP 117 I +ATOM 951 C CB . ILE A 1 117 ? 20.622 4.917 -15.895 1.00 96.38 ? 117 ILE A CB 1 Q65MG6 UNP 117 I +ATOM 952 O O . ILE A 1 117 ? 20.032 2.211 -17.865 1.00 96.38 ? 117 ILE A O 1 Q65MG6 UNP 117 I +ATOM 953 C CG1 . ILE A 1 117 ? 20.646 5.227 -14.385 1.00 96.38 ? 117 ILE A CG1 1 Q65MG6 UNP 117 I +ATOM 954 C CG2 . ILE A 1 117 ? 19.203 5.120 -16.453 1.00 96.38 ? 117 ILE A CG2 1 Q65MG6 UNP 117 I +ATOM 955 C CD1 . ILE A 1 117 ? 20.419 6.704 -14.053 1.00 96.38 ? 117 ILE A CD1 1 Q65MG6 UNP 117 I +ATOM 956 N N . GLU A 1 118 ? 21.747 3.503 -18.517 1.00 95.75 ? 118 GLU A N 1 Q65MG6 UNP 118 E +ATOM 957 C CA . GLU A 1 118 ? 21.704 3.102 -19.929 1.00 95.75 ? 118 GLU A CA 1 Q65MG6 UNP 118 E +ATOM 958 C C . GLU A 1 118 ? 21.838 1.581 -20.090 1.00 95.75 ? 118 GLU A C 1 Q65MG6 UNP 118 E +ATOM 959 C CB . GLU A 1 118 ? 22.825 3.812 -20.703 1.00 95.75 ? 118 GLU A CB 1 Q65MG6 UNP 118 E +ATOM 960 O O . GLU A 1 118 ? 21.037 0.948 -20.781 1.00 95.75 ? 118 GLU A O 1 Q65MG6 UNP 118 E +ATOM 961 C CG . GLU A 1 118 ? 22.537 5.305 -20.924 1.00 95.75 ? 118 GLU A CG 1 Q65MG6 UNP 118 E +ATOM 962 C CD . GLU A 1 118 ? 23.677 6.042 -21.650 1.00 95.75 ? 118 GLU A CD 1 Q65MG6 UNP 118 E +ATOM 963 O OE1 . GLU A 1 118 ? 23.529 7.271 -21.836 1.00 95.75 ? 118 GLU A OE1 1 Q65MG6 UNP 118 E +ATOM 964 O OE2 . GLU A 1 118 ? 24.669 5.385 -22.046 1.00 95.75 ? 118 GLU A OE2 1 Q65MG6 UNP 118 E +ATOM 965 N N . ASN A 1 119 ? 22.789 0.965 -19.381 1.00 95.69 ? 119 ASN A N 1 Q65MG6 UNP 119 N +ATOM 966 C CA . ASN A 1 119 ? 22.971 -0.486 -19.396 1.00 95.69 ? 119 ASN A CA 1 Q65MG6 UNP 119 N +ATOM 967 C C . ASN A 1 119 ? 21.800 -1.264 -18.777 1.00 95.69 ? 119 ASN A C 1 Q65MG6 UNP 119 N +ATOM 968 C CB . ASN A 1 119 ? 24.277 -0.827 -18.670 1.00 95.69 ? 119 ASN A CB 1 Q65MG6 UNP 119 N +ATOM 969 O O . ASN A 1 119 ? 21.562 -2.412 -19.157 1.00 95.69 ? 119 ASN A O 1 Q65MG6 UNP 119 N +ATOM 970 C CG . ASN A 1 119 ? 25.495 -0.579 -19.534 1.00 95.69 ? 119 ASN A CG 1 Q65MG6 UNP 119 N +ATOM 971 N ND2 . ASN A 1 119 ? 26.509 0.047 -18.998 1.00 95.69 ? 119 ASN A ND2 1 Q65MG6 UNP 119 N +ATOM 972 O OD1 . ASN A 1 119 ? 25.566 -0.989 -20.680 1.00 95.69 ? 119 ASN A OD1 1 Q65MG6 UNP 119 N +ATOM 973 N N . MET A 1 120 ? 21.078 -0.677 -17.821 1.00 96.50 ? 120 MET A N 1 Q65MG6 UNP 120 M +ATOM 974 C CA . MET A 1 120 ? 19.903 -1.308 -17.219 1.00 96.50 ? 120 MET A CA 1 Q65MG6 UNP 120 M +ATOM 975 C C . MET A 1 120 ? 18.671 -1.260 -18.130 1.00 96.50 ? 120 MET A C 1 Q65MG6 UNP 120 M +ATOM 976 C CB . MET A 1 120 ? 19.579 -0.670 -15.859 1.00 96.50 ? 120 MET A CB 1 Q65MG6 UNP 120 M +ATOM 977 O O . MET A 1 120 ? 17.908 -2.227 -18.130 1.00 96.50 ? 120 MET A O 1 Q65MG6 UNP 120 M +ATOM 978 C CG . MET A 1 120 ? 20.565 -1.079 -14.757 1.00 96.50 ? 120 MET A CG 1 Q65MG6 UNP 120 M +ATOM 979 S SD . MET A 1 120 ? 20.175 -0.436 -13.102 1.00 96.50 ? 120 MET A SD 1 Q65MG6 UNP 120 M +ATOM 980 C CE . MET A 1 120 ? 18.673 -1.378 -12.727 1.00 96.50 ? 120 MET A CE 1 Q65MG6 UNP 120 M +ATOM 981 N N . LEU A 1 121 ? 18.476 -0.159 -18.869 1.00 96.25 ? 121 LEU A N 1 Q65MG6 UNP 121 L +ATOM 982 C CA . LEU A 1 121 ? 17.260 0.130 -19.649 1.00 96.25 ? 121 LEU A CA 1 Q65MG6 UNP 121 L +ATOM 983 C C . LEU A 1 121 ? 17.313 -0.321 -21.119 1.00 96.25 ? 121 LEU A C 1 Q65MG6 UNP 121 L +ATOM 984 C CB . LEU A 1 121 ? 16.965 1.645 -19.601 1.00 96.25 ? 121 LEU A CB 1 Q65MG6 UNP 121 L +ATOM 985 O O . LEU A 1 121 ? 16.274 -0.325 -21.782 1.00 96.25 ? 121 LEU A O 1 Q65MG6 UNP 121 L +ATOM 986 C CG . LEU A 1 121 ? 16.721 2.256 -18.210 1.00 96.25 ? 121 LEU A CG 1 Q65MG6 UNP 121 L +ATOM 987 C CD1 . LEU A 1 121 ? 16.602 3.775 -18.345 1.00 96.25 ? 121 LEU A CD1 1 Q65MG6 UNP 121 L +ATOM 988 C CD2 . LEU A 1 121 ? 15.451 1.759 -17.525 1.00 96.25 ? 121 LEU A CD2 1 Q65MG6 UNP 121 L +ATOM 989 N N . LYS A 1 122 ? 18.494 -0.663 -21.650 1.00 95.56 ? 122 LYS A N 1 Q65MG6 UNP 122 K +ATOM 990 C CA . LYS A 1 122 ? 18.646 -1.174 -23.025 1.00 95.56 ? 122 LYS A CA 1 Q65MG6 UNP 122 K +ATOM 991 C C . LYS A 1 122 ? 17.877 -2.487 -23.247 1.00 95.56 ? 122 LYS A C 1 Q65MG6 UNP 122 K +ATOM 992 C CB . LYS A 1 122 ? 20.138 -1.289 -23.385 1.00 95.56 ? 122 LYS A CB 1 Q65MG6 UNP 122 K +ATOM 993 O O . LYS A 1 122 ? 17.542 -3.188 -22.296 1.00 95.56 ? 122 LYS A O 1 Q65MG6 UNP 122 K +ATOM 994 C CG . LYS A 1 122 ? 20.868 -2.339 -22.539 1.00 95.56 ? 122 LYS A CG 1 Q65MG6 UNP 122 K +ATOM 995 C CD . LYS A 1 122 ? 22.353 -2.427 -22.901 1.00 95.56 ? 122 LYS A CD 1 Q65MG6 UNP 122 K +ATOM 996 C CE . LYS A 1 122 ? 22.986 -3.607 -22.153 1.00 95.56 ? 122 LYS A CE 1 Q65MG6 UNP 122 K +ATOM 997 N NZ . LYS A 1 122 ? 23.796 -4.435 -23.072 1.00 95.56 ? 122 LYS A NZ 1 Q65MG6 UNP 122 K +ATOM 998 N N . GLU A 1 123 ? 17.631 -2.832 -24.510 1.00 93.38 ? 123 GLU A N 1 Q65MG6 UNP 123 E +ATOM 999 C CA . GLU A 1 123 ? 16.808 -3.993 -24.902 1.00 93.38 ? 123 GLU A CA 1 Q65MG6 UNP 123 E +ATOM 1000 C C . GLU A 1 123 ? 17.368 -5.345 -24.431 1.00 93.38 ? 123 GLU A C 1 Q65MG6 UNP 123 E +ATOM 1001 C CB . GLU A 1 123 ? 16.651 -4.027 -26.431 1.00 93.38 ? 123 GLU A CB 1 Q65MG6 UNP 123 E +ATOM 1002 O O . GLU A 1 123 ? 16.612 -6.260 -24.157 1.00 93.38 ? 123 GLU A O 1 Q65MG6 UNP 123 E +ATOM 1003 C CG . GLU A 1 123 ? 15.945 -2.782 -26.990 1.00 93.38 ? 123 GLU A CG 1 Q65MG6 UNP 123 E +ATOM 1004 C CD . GLU A 1 123 ? 15.620 -2.892 -28.488 1.00 93.38 ? 123 GLU A CD 1 Q65MG6 UNP 123 E +ATOM 1005 O OE1 . GLU A 1 123 ? 14.693 -2.166 -28.913 1.00 93.38 ? 123 GLU A OE1 1 Q65MG6 UNP 123 E +ATOM 1006 O OE2 . GLU A 1 123 ? 16.319 -3.644 -29.206 1.00 93.38 ? 123 GLU A OE2 1 Q65MG6 UNP 123 E +ATOM 1007 N N . ASP A 1 124 ? 18.683 -5.486 -24.276 1.00 93.38 ? 124 ASP A N 1 Q65MG6 UNP 124 D +ATOM 1008 C CA . ASP A 1 124 ? 19.332 -6.668 -23.688 1.00 93.38 ? 124 ASP A CA 1 Q65MG6 UNP 124 D +ATOM 1009 C C . ASP A 1 124 ? 19.758 -6.425 -22.224 1.00 93.38 ? 124 ASP A C 1 Q65MG6 UNP 124 D +ATOM 1010 C CB . ASP A 1 124 ? 20.491 -7.111 -24.598 1.00 93.38 ? 124 ASP A CB 1 Q65MG6 UNP 124 D +ATOM 1011 O O . ASP A 1 124 ? 20.643 -7.094 -21.686 1.00 93.38 ? 124 ASP A O 1 Q65MG6 UNP 124 D +ATOM 1012 C CG . ASP A 1 124 ? 21.654 -6.111 -24.621 1.00 93.38 ? 124 ASP A CG 1 Q65MG6 UNP 124 D +ATOM 1013 O OD1 . ASP A 1 124 ? 21.438 -4.890 -24.461 1.00 93.38 ? 124 ASP A OD1 1 Q65MG6 UNP 124 D +ATOM 1014 O OD2 . ASP A 1 124 ? 22.833 -6.512 -24.741 1.00 93.38 ? 124 ASP A OD2 1 Q65MG6 UNP 124 D +ATOM 1015 N N . GLY A 1 125 ? 19.175 -5.406 -21.588 1.00 96.06 ? 125 GLY A N 1 Q65MG6 UNP 125 G +ATOM 1016 C CA . GLY A 1 125 ? 19.497 -4.956 -20.242 1.00 96.06 ? 125 GLY A CA 1 Q65MG6 UNP 125 G +ATOM 1017 C C . GLY A 1 125 ? 18.838 -5.801 -19.155 1.00 96.06 ? 125 GLY A C 1 Q65MG6 UNP 125 G +ATOM 1018 O O . GLY A 1 125 ? 17.948 -6.623 -19.393 1.00 96.06 ? 125 GLY A O 1 Q65MG6 UNP 125 G +ATOM 1019 N N . VAL A 1 126 ? 19.266 -5.568 -17.912 1.00 96.00 ? 126 VAL A N 1 Q65MG6 UNP 126 V +ATOM 1020 C CA . VAL A 1 126 ? 18.759 -6.319 -16.752 1.00 96.00 ? 126 VAL A CA 1 Q65MG6 UNP 126 V +ATOM 1021 C C . VAL A 1 126 ? 17.264 -6.096 -16.518 1.00 96.00 ? 126 VAL A C 1 Q65MG6 UNP 126 V +ATOM 1022 C CB . VAL A 1 126 ? 19.578 -6.006 -15.486 1.00 96.00 ? 126 VAL A CB 1 Q65MG6 UNP 126 V +ATOM 1023 O O . VAL A 1 126 ? 16.593 -7.012 -16.055 1.00 96.00 ? 126 VAL A O 1 Q65MG6 UNP 126 V +ATOM 1024 C CG1 . VAL A 1 126 ? 19.308 -4.606 -14.922 1.00 96.00 ? 126 VAL A CG1 1 Q65MG6 UNP 126 V +ATOM 1025 C CG2 . VAL A 1 126 ? 19.332 -7.027 -14.371 1.00 96.00 ? 126 VAL A CG2 1 Q65MG6 UNP 126 V +ATOM 1026 N N . LEU A 1 127 ? 16.723 -4.912 -16.839 1.00 96.19 ? 127 LEU A N 1 Q65MG6 UNP 127 L +ATOM 1027 C CA . LEU A 1 127 ? 15.296 -4.650 -16.652 1.00 96.19 ? 127 LEU A CA 1 Q65MG6 UNP 127 L +ATOM 1028 C C . LEU A 1 127 ? 14.438 -5.310 -17.724 1.00 96.19 ? 127 LEU A C 1 Q65MG6 UNP 127 L +ATOM 1029 C CB . LEU A 1 127 ? 15.010 -3.146 -16.552 1.00 96.19 ? 127 LEU A CB 1 Q65MG6 UNP 127 L +ATOM 1030 O O . LEU A 1 127 ? 13.374 -5.800 -17.368 1.00 96.19 ? 127 LEU A O 1 Q65MG6 UNP 127 L +ATOM 1031 C CG . LEU A 1 127 ? 15.606 -2.490 -15.300 1.00 96.19 ? 127 LEU A CG 1 Q65MG6 UNP 127 L +ATOM 1032 C CD1 . LEU A 1 127 ? 15.287 -1.002 -15.311 1.00 96.19 ? 127 LEU A CD1 1 Q65MG6 UNP 127 L +ATOM 1033 C CD2 . LEU A 1 127 ? 15.064 -3.066 -13.989 1.00 96.19 ? 127 LEU A CD2 1 Q65MG6 UNP 127 L +ATOM 1034 N N . GLU A 1 128 ? 14.896 -5.398 -18.975 1.00 96.62 ? 128 GLU A N 1 Q65MG6 UNP 128 E +ATOM 1035 C CA . GLU A 1 128 ? 14.191 -6.200 -19.985 1.00 96.62 ? 128 GLU A CA 1 Q65MG6 UNP 128 E +ATOM 1036 C C . GLU A 1 128 ? 14.204 -7.676 -19.593 1.00 96.62 ? 128 GLU A C 1 Q65MG6 UNP 128 E +ATOM 1037 C CB . GLU A 1 128 ? 14.831 -6.054 -21.379 1.00 96.62 ? 128 GLU A CB 1 Q65MG6 UNP 128 E +ATOM 1038 O O . GLU A 1 128 ? 13.160 -8.323 -19.534 1.00 96.62 ? 128 GLU A O 1 Q65MG6 UNP 128 E +ATOM 1039 C CG . GLU A 1 128 ? 13.915 -6.669 -22.463 1.00 96.62 ? 128 GLU A CG 1 Q65MG6 UNP 128 E +ATOM 1040 C CD . GLU A 1 128 ? 12.856 -5.668 -22.921 1.00 96.62 ? 128 GLU A CD 1 Q65MG6 UNP 128 E +ATOM 1041 O OE1 . GLU A 1 128 ? 12.580 -5.527 -24.130 1.00 96.62 ? 128 GLU A OE1 1 Q65MG6 UNP 128 E +ATOM 1042 O OE2 . GLU A 1 128 ? 12.383 -4.888 -22.072 1.00 96.62 ? 128 GLU A OE2 1 Q65MG6 UNP 128 E +ATOM 1043 N N . SER A 1 129 ? 15.390 -8.188 -19.246 1.00 97.06 ? 129 SER A N 1 Q65MG6 UNP 129 S +ATOM 1044 C CA . SER A 1 129 ? 15.568 -9.590 -18.859 1.00 97.06 ? 129 SER A CA 1 Q65MG6 UNP 129 S +ATOM 1045 C C . SER A 1 129 ? 14.672 -9.945 -17.673 1.00 97.06 ? 129 SER A C 1 Q65MG6 UNP 129 S +ATOM 1046 C CB . SER A 1 129 ? 17.027 -9.874 -18.497 1.00 97.06 ? 129 SER A CB 1 Q65MG6 UNP 129 S +ATOM 1047 O O . SER A 1 129 ? 13.977 -10.951 -17.706 1.00 97.06 ? 129 SER A O 1 Q65MG6 UNP 129 S +ATOM 1048 O OG . SER A 1 129 ? 17.897 -9.581 -19.576 1.00 97.06 ? 129 SER A OG 1 Q65MG6 UNP 129 S +ATOM 1049 N N . PHE A 1 130 ? 14.611 -9.073 -16.664 1.00 97.69 ? 130 PHE A N 1 Q65MG6 UNP 130 F +ATOM 1050 C CA . PHE A 1 130 ? 13.713 -9.233 -15.527 1.00 97.69 ? 130 PHE A CA 1 Q65MG6 UNP 130 F +ATOM 1051 C C . PHE A 1 130 ? 12.234 -9.147 -15.932 1.00 97.69 ? 130 PHE A C 1 Q65MG6 UNP 130 F +ATOM 1052 C CB . PHE A 1 130 ? 14.058 -8.172 -14.473 1.00 97.69 ? 130 PHE A CB 1 Q65MG6 UNP 130 F +ATOM 1053 O O . PHE A 1 130 ? 11.458 -10.031 -15.574 1.00 97.69 ? 130 PHE A O 1 Q65MG6 UNP 130 F +ATOM 1054 C CG . PHE A 1 130 ? 12.991 -7.973 -13.415 1.00 97.69 ? 130 PHE A CG 1 Q65MG6 UNP 130 F +ATOM 1055 C CD1 . PHE A 1 130 ? 12.231 -6.789 -13.402 1.00 97.69 ? 130 PHE A CD1 1 Q65MG6 UNP 130 F +ATOM 1056 C CD2 . PHE A 1 130 ? 12.721 -8.987 -12.481 1.00 97.69 ? 130 PHE A CD2 1 Q65MG6 UNP 130 F +ATOM 1057 C CE1 . PHE A 1 130 ? 11.186 -6.626 -12.477 1.00 97.69 ? 130 PHE A CE1 1 Q65MG6 UNP 130 F +ATOM 1058 C CE2 . PHE A 1 130 ? 11.696 -8.810 -11.536 1.00 97.69 ? 130 PHE A CE2 1 Q65MG6 UNP 130 F +ATOM 1059 C CZ . PHE A 1 130 ? 10.920 -7.641 -11.547 1.00 97.69 ? 130 PHE A CZ 1 Q65MG6 UNP 130 F +ATOM 1060 N N . GLN A 1 131 ? 11.825 -8.076 -16.624 1.00 97.31 ? 131 GLN A N 1 Q65MG6 UNP 131 Q +ATOM 1061 C CA . GLN A 1 131 ? 10.410 -7.804 -16.881 1.00 97.31 ? 131 GLN A CA 1 Q65MG6 UNP 131 Q +ATOM 1062 C C . GLN A 1 131 ? 9.811 -8.797 -17.873 1.00 97.31 ? 131 GLN A C 1 Q65MG6 UNP 131 Q +ATOM 1063 C CB . GLN A 1 131 ? 10.166 -6.355 -17.347 1.00 97.31 ? 131 GLN A CB 1 Q65MG6 UNP 131 Q +ATOM 1064 O O . GLN A 1 131 ? 8.751 -9.335 -17.581 1.00 97.31 ? 131 GLN A O 1 Q65MG6 UNP 131 Q +ATOM 1065 C CG . GLN A 1 131 ? 10.389 -5.328 -16.222 1.00 97.31 ? 131 GLN A CG 1 Q65MG6 UNP 131 Q +ATOM 1066 C CD . GLN A 1 131 ? 9.912 -3.915 -16.543 1.00 97.31 ? 131 GLN A CD 1 Q65MG6 UNP 131 Q +ATOM 1067 N NE2 . GLN A 1 131 ? 9.731 -3.091 -15.538 1.00 97.31 ? 131 GLN A NE2 1 Q65MG6 UNP 131 Q +ATOM 1068 O OE1 . GLN A 1 131 ? 9.658 -3.516 -17.668 1.00 97.31 ? 131 GLN A OE1 1 Q65MG6 UNP 131 Q +ATOM 1069 N N . ASP A 1 132 ? 10.458 -9.064 -19.004 1.00 93.88 ? 132 ASP A N 1 Q65MG6 UNP 132 D +ATOM 1070 C CA . ASP A 1 132 ? 9.914 -9.943 -20.045 1.00 93.88 ? 132 ASP A CA 1 Q65MG6 UNP 132 D +ATOM 1071 C C . ASP A 1 132 ? 10.460 -11.373 -19.958 1.00 93.88 ? 132 ASP A C 1 Q65MG6 UNP 132 D +ATOM 1072 C CB . ASP A 1 132 ? 10.195 -9.326 -21.421 1.00 93.88 ? 132 ASP A CB 1 Q65MG6 UNP 132 D +ATOM 1073 O O . ASP A 1 132 ? 9.700 -12.342 -19.998 1.00 93.88 ? 132 ASP A O 1 Q65MG6 UNP 132 D +ATOM 1074 C CG . ASP A 1 132 ? 9.343 -9.968 -22.523 1.00 93.88 ? 132 ASP A CG 1 Q65MG6 UNP 132 D +ATOM 1075 O OD1 . ASP A 1 132 ? 8.171 -10.303 -22.232 1.00 93.88 ? 132 ASP A OD1 1 Q65MG6 UNP 132 D +ATOM 1076 O OD2 . ASP A 1 132 ? 9.851 -10.093 -23.657 1.00 93.88 ? 132 ASP A OD2 1 Q65MG6 UNP 132 D +ATOM 1077 N N . GLY A 1 133 ? 11.776 -11.509 -19.773 1.00 94.12 ? 133 GLY A N 1 Q65MG6 UNP 133 G +ATOM 1078 C CA . GLY A 1 133 ? 12.454 -12.807 -19.772 1.00 94.12 ? 133 GLY A CA 1 Q65MG6 UNP 133 G +ATOM 1079 C C . GLY A 1 133 ? 12.111 -13.679 -18.563 1.00 94.12 ? 133 GLY A C 1 Q65MG6 UNP 133 G +ATOM 1080 O O . GLY A 1 133 ? 11.709 -14.828 -18.728 1.00 94.12 ? 133 GLY A O 1 Q65MG6 UNP 133 G +ATOM 1081 N N . ASP A 1 134 ? 12.254 -13.131 -17.357 1.00 96.56 ? 134 ASP A N 1 Q65MG6 UNP 134 D +ATOM 1082 C CA . ASP A 1 134 ? 12.157 -13.886 -16.104 1.00 96.56 ? 134 ASP A CA 1 Q65MG6 UNP 134 D +ATOM 1083 C C . ASP A 1 134 ? 10.741 -13.876 -15.510 1.00 96.56 ? 134 ASP A C 1 Q65MG6 UNP 134 D +ATOM 1084 C CB . ASP A 1 134 ? 13.138 -13.296 -15.078 1.00 96.56 ? 134 ASP A CB 1 Q65MG6 UNP 134 D +ATOM 1085 O O . ASP A 1 134 ? 10.291 -14.876 -14.946 1.00 96.56 ? 134 ASP A O 1 Q65MG6 UNP 134 D +ATOM 1086 C CG . ASP A 1 134 ? 14.626 -13.458 -15.400 1.00 96.56 ? 134 ASP A CG 1 Q65MG6 UNP 134 D +ATOM 1087 O OD1 . ASP A 1 134 ? 14.999 -14.462 -16.046 1.00 96.56 ? 134 ASP A OD1 1 Q65MG6 UNP 134 D +ATOM 1088 O OD2 . ASP A 1 134 ? 15.397 -12.607 -14.894 1.00 96.56 ? 134 ASP A OD2 1 Q65MG6 UNP 134 D +ATOM 1089 N N . PHE A 1 135 ? 10.046 -12.734 -15.580 1.00 97.06 ? 135 PHE A N 1 Q65MG6 UNP 135 F +ATOM 1090 C CA . PHE A 1 135 ? 8.747 -12.536 -14.921 1.00 97.06 ? 135 PHE A CA 1 Q65MG6 UNP 135 F +ATOM 1091 C C . PHE A 1 135 ? 7.559 -12.451 -15.887 1.00 97.06 ? 135 PHE A C 1 Q65MG6 UNP 135 F +ATOM 1092 C CB . PHE A 1 135 ? 8.797 -11.317 -13.982 1.00 97.06 ? 135 PHE A CB 1 Q65MG6 UNP 135 F +ATOM 1093 O O . PHE A 1 135 ? 6.424 -12.423 -15.407 1.00 97.06 ? 135 PHE A O 1 Q65MG6 UNP 135 F +ATOM 1094 C CG . PHE A 1 135 ? 9.471 -11.568 -12.647 1.00 97.06 ? 135 PHE A CG 1 Q65MG6 UNP 135 F +ATOM 1095 C CD1 . PHE A 1 135 ? 8.704 -11.601 -11.467 1.00 97.06 ? 135 PHE A CD1 1 Q65MG6 UNP 135 F +ATOM 1096 C CD2 . PHE A 1 135 ? 10.854 -11.797 -12.579 1.00 97.06 ? 135 PHE A CD2 1 Q65MG6 UNP 135 F +ATOM 1097 C CE1 . PHE A 1 135 ? 9.320 -11.869 -10.230 1.00 97.06 ? 135 PHE A CE1 1 Q65MG6 UNP 135 F +ATOM 1098 C CE2 . PHE A 1 135 ? 11.468 -12.099 -11.352 1.00 97.06 ? 135 PHE A CE2 1 Q65MG6 UNP 135 F +ATOM 1099 C CZ . PHE A 1 135 ? 10.702 -12.127 -10.174 1.00 97.06 ? 135 PHE A CZ 1 Q65MG6 UNP 135 F +ATOM 1100 N N . HIS A 1 136 ? 7.798 -12.414 -17.203 1.00 97.19 ? 136 HIS A N 1 Q65MG6 UNP 136 H +ATOM 1101 C CA . HIS A 1 136 ? 6.764 -12.356 -18.248 1.00 97.19 ? 136 HIS A CA 1 Q65MG6 UNP 136 H +ATOM 1102 C C . HIS A 1 136 ? 5.725 -11.236 -18.048 1.00 97.19 ? 136 HIS A C 1 Q65MG6 UNP 136 H +ATOM 1103 C CB . HIS A 1 136 ? 6.132 -13.742 -18.439 1.00 97.19 ? 136 HIS A CB 1 Q65MG6 UNP 136 H +ATOM 1104 O O . HIS A 1 136 ? 4.553 -11.368 -18.385 1.00 97.19 ? 136 HIS A O 1 Q65MG6 UNP 136 H +ATOM 1105 C CG . HIS A 1 136 ? 7.138 -14.832 -18.703 1.00 97.19 ? 136 HIS A CG 1 Q65MG6 UNP 136 H +ATOM 1106 C CD2 . HIS A 1 136 ? 7.208 -16.043 -18.072 1.00 97.19 ? 136 HIS A CD2 1 Q65MG6 UNP 136 H +ATOM 1107 N ND1 . HIS A 1 136 ? 8.178 -14.783 -19.601 1.00 97.19 ? 136 HIS A ND1 1 Q65MG6 UNP 136 H +ATOM 1108 C CE1 . HIS A 1 136 ? 8.854 -15.939 -19.510 1.00 97.19 ? 136 HIS A CE1 1 Q65MG6 UNP 136 H +ATOM 1109 N NE2 . HIS A 1 136 ? 8.287 -16.756 -18.605 1.00 97.19 ? 136 HIS A NE2 1 Q65MG6 UNP 136 H +ATOM 1110 N N . LEU A 1 137 ? 6.142 -10.094 -17.504 1.00 97.88 ? 137 LEU A N 1 Q65MG6 UNP 137 L +ATOM 1111 C CA . LEU A 1 137 ? 5.273 -8.964 -17.175 1.00 97.88 ? 137 LEU A CA 1 Q65MG6 UNP 137 L +ATOM 1112 C C . LEU A 1 137 ? 4.690 -8.272 -18.411 1.00 97.88 ? 137 LEU A C 1 Q65MG6 UNP 137 L +ATOM 1113 C CB . LEU A 1 137 ? 6.041 -7.943 -16.316 1.00 97.88 ? 137 LEU A CB 1 Q65MG6 UNP 137 L +ATOM 1114 O O . LEU A 1 137 ? 3.731 -7.514 -18.277 1.00 97.88 ? 137 LEU A O 1 Q65MG6 UNP 137 L +ATOM 1115 C CG . LEU A 1 137 ? 6.648 -8.496 -15.018 1.00 97.88 ? 137 LEU A CG 1 Q65MG6 UNP 137 L +ATOM 1116 C CD1 . LEU A 1 137 ? 7.301 -7.361 -14.228 1.00 97.88 ? 137 LEU A CD1 1 Q65MG6 UNP 137 L +ATOM 1117 C CD2 . LEU A 1 137 ? 5.598 -9.152 -14.120 1.00 97.88 ? 137 LEU A CD2 1 Q65MG6 UNP 137 L +ATOM 1118 N N . TYR A 1 138 ? 5.253 -8.496 -19.601 1.00 96.81 ? 138 TYR A N 1 Q65MG6 UNP 138 Y +ATOM 1119 C CA . TYR A 1 138 ? 4.746 -7.923 -20.851 1.00 96.81 ? 138 TYR A CA 1 Q65MG6 UNP 138 Y +ATOM 1120 C C . TYR A 1 138 ? 3.651 -8.760 -21.510 1.00 96.81 ? 138 TYR A C 1 Q65MG6 UNP 138 Y +ATOM 1121 C CB . TYR A 1 138 ? 5.900 -7.656 -21.821 1.00 96.81 ? 138 TYR A CB 1 Q65MG6 UNP 138 Y +ATOM 1122 O O . TYR A 1 138 ? 3.049 -8.282 -22.472 1.00 96.81 ? 138 TYR A O 1 Q65MG6 UNP 138 Y +ATOM 1123 C CG . TYR A 1 138 ? 6.944 -6.650 -21.374 1.00 96.81 ? 138 TYR A CG 1 Q65MG6 UNP 138 Y +ATOM 1124 C CD1 . TYR A 1 138 ? 6.757 -5.832 -20.237 1.00 96.81 ? 138 TYR A CD1 1 Q65MG6 UNP 138 Y +ATOM 1125 C CD2 . TYR A 1 138 ? 8.115 -6.519 -22.142 1.00 96.81 ? 138 TYR A CD2 1 Q65MG6 UNP 138 Y +ATOM 1126 C CE1 . TYR A 1 138 ? 7.760 -4.929 -19.853 1.00 96.81 ? 138 TYR A CE1 1 Q65MG6 UNP 138 Y +ATOM 1127 C CE2 . TYR A 1 138 ? 9.106 -5.594 -21.771 1.00 96.81 ? 138 TYR A CE2 1 Q65MG6 UNP 138 Y +ATOM 1128 O OH . TYR A 1 138 ? 9.895 -3.959 -20.202 1.00 96.81 ? 138 TYR A OH 1 Q65MG6 UNP 138 Y +ATOM 1129 C CZ . TYR A 1 138 ? 8.938 -4.819 -20.612 1.00 96.81 ? 138 TYR A CZ 1 Q65MG6 UNP 138 Y +ATOM 1130 N N . GLU A 1 139 ? 3.327 -9.943 -20.974 1.00 97.12 ? 139 GLU A N 1 Q65MG6 UNP 139 E +ATOM 1131 C CA . GLU A 1 139 ? 2.243 -10.783 -21.501 1.00 97.12 ? 139 GLU A CA 1 Q65MG6 UNP 139 E +ATOM 1132 C C . GLU A 1 139 ? 0.882 -10.063 -21.484 1.00 97.12 ? 139 GLU A C 1 Q65MG6 UNP 139 E +ATOM 1133 C CB . GLU A 1 139 ? 2.181 -12.114 -20.726 1.00 97.12 ? 139 GLU A CB 1 Q65MG6 UNP 139 E +ATOM 1134 O O . GLU A 1 139 ? 0.008 -10.340 -22.305 1.00 97.12 ? 139 GLU A O 1 Q65MG6 UNP 139 E +ATOM 1135 C CG . GLU A 1 139 ? 1.557 -11.990 -19.322 1.00 97.12 ? 139 GLU A CG 1 Q65MG6 UNP 139 E +ATOM 1136 C CD . GLU A 1 139 ? 1.525 -13.301 -18.518 1.00 97.12 ? 139 GLU A CD 1 Q65MG6 UNP 139 E +ATOM 1137 O OE1 . GLU A 1 139 ? 0.902 -13.267 -17.429 1.00 97.12 ? 139 GLU A OE1 1 Q65MG6 UNP 139 E +ATOM 1138 O OE2 . GLU A 1 139 ? 2.018 -14.341 -19.012 1.00 97.12 ? 139 GLU A OE2 1 Q65MG6 UNP 139 E +ATOM 1139 N N . SER A 1 140 ? 0.697 -9.123 -20.549 1.00 98.19 ? 140 SER A N 1 Q65MG6 UNP 140 S +ATOM 1140 C CA . SER A 1 140 ? -0.450 -8.219 -20.492 1.00 98.19 ? 140 SER A CA 1 Q65MG6 UNP 140 S +ATOM 1141 C C . SER A 1 140 ? -0.176 -7.036 -19.564 1.00 98.19 ? 140 SER A C 1 Q65MG6 UNP 140 S +ATOM 1142 C CB . SER A 1 140 ? -1.693 -8.971 -19.998 1.00 98.19 ? 140 SER A CB 1 Q65MG6 UNP 140 S +ATOM 1143 O O . SER A 1 140 ? 0.588 -7.143 -18.605 1.00 98.19 ? 140 SER A O 1 Q65MG6 UNP 140 S +ATOM 1144 O OG . SER A 1 140 ? -1.518 -9.444 -18.676 1.00 98.19 ? 140 SER A OG 1 Q65MG6 UNP 140 S +ATOM 1145 N N . ASP A 1 141 ? -0.887 -5.924 -19.761 1.00 97.81 ? 141 ASP A N 1 Q65MG6 UNP 141 D +ATOM 1146 C CA . ASP A 1 141 ? -0.841 -4.805 -18.809 1.00 97.81 ? 141 ASP A CA 1 Q65MG6 UNP 141 D +ATOM 1147 C C . ASP A 1 141 ? -1.311 -5.227 -17.405 1.00 97.81 ? 141 ASP A C 1 Q65MG6 UNP 141 D +ATOM 1148 C CB . ASP A 1 141 ? -1.694 -3.641 -19.328 1.00 97.81 ? 141 ASP A CB 1 Q65MG6 UNP 141 D +ATOM 1149 O O . ASP A 1 141 ? -0.849 -4.683 -16.399 1.00 97.81 ? 141 ASP A O 1 Q65MG6 UNP 141 D +ATOM 1150 C CG . ASP A 1 141 ? -1.101 -2.928 -20.552 1.00 97.81 ? 141 ASP A CG 1 Q65MG6 UNP 141 D +ATOM 1151 O OD1 . ASP A 1 141 ? 0.099 -3.138 -20.872 1.00 97.81 ? 141 ASP A OD1 1 Q65MG6 UNP 141 D +ATOM 1152 O OD2 . ASP A 1 141 ? -1.862 -2.148 -21.156 1.00 97.81 ? 141 ASP A OD2 1 Q65MG6 UNP 141 D +ATOM 1153 N N . ARG A 1 142 ? -2.173 -6.252 -17.326 1.00 98.06 ? 142 ARG A N 1 Q65MG6 UNP 142 R +ATOM 1154 C CA . ARG A 1 142 ? -2.610 -6.853 -16.065 1.00 98.06 ? 142 ARG A CA 1 Q65MG6 UNP 142 R +ATOM 1155 C C . ARG A 1 142 ? -1.460 -7.534 -15.324 1.00 98.06 ? 142 ARG A C 1 Q65MG6 UNP 142 R +ATOM 1156 C CB . ARG A 1 142 ? -3.773 -7.829 -16.325 1.00 98.06 ? 142 ARG A CB 1 Q65MG6 UNP 142 R +ATOM 1157 O O . ARG A 1 142 ? -1.350 -7.335 -14.119 1.00 98.06 ? 142 ARG A O 1 Q65MG6 UNP 142 R +ATOM 1158 C CG . ARG A 1 142 ? -4.324 -8.476 -15.043 1.00 98.06 ? 142 ARG A CG 1 Q65MG6 UNP 142 R +ATOM 1159 C CD . ARG A 1 142 ? -4.968 -7.435 -14.124 1.00 98.06 ? 142 ARG A CD 1 Q65MG6 UNP 142 R +ATOM 1160 N NE . ARG A 1 142 ? -5.230 -7.990 -12.795 1.00 98.06 ? 142 ARG A NE 1 Q65MG6 UNP 142 R +ATOM 1161 N NH1 . ARG A 1 142 ? -6.982 -6.612 -12.209 1.00 98.06 ? 142 ARG A NH1 1 Q65MG6 UNP 142 R +ATOM 1162 N NH2 . ARG A 1 142 ? -5.993 -7.928 -10.688 1.00 98.06 ? 142 ARG A NH2 1 Q65MG6 UNP 142 R +ATOM 1163 C CZ . ARG A 1 142 ? -6.085 -7.517 -11.913 1.00 98.06 ? 142 ARG A CZ 1 Q65MG6 UNP 142 R +ATOM 1164 N N . ALA A 1 143 ? -0.599 -8.284 -16.013 1.00 98.44 ? 143 ALA A N 1 Q65MG6 UNP 143 A +ATOM 1165 C CA . ALA A 1 143 ? 0.549 -8.953 -15.395 1.00 98.44 ? 143 ALA A CA 1 Q65MG6 UNP 143 A +ATOM 1166 C C . ALA A 1 143 ? 1.519 -7.941 -14.761 1.00 98.44 ? 143 ALA A C 1 Q65MG6 UNP 143 A +ATOM 1167 C CB . ALA A 1 143 ? 1.246 -9.820 -16.449 1.00 98.44 ? 143 ALA A CB 1 Q65MG6 UNP 143 A +ATOM 1168 O O . ALA A 1 143 ? 1.913 -8.091 -13.600 1.00 98.44 ? 143 ALA A O 1 Q65MG6 UNP 143 A +ATOM 1169 N N . MET A 1 144 ? 1.827 -6.858 -15.483 1.00 98.56 ? 144 MET A N 1 Q65MG6 UNP 144 M +ATOM 1170 C CA . MET A 1 144 ? 2.612 -5.740 -14.955 1.00 98.56 ? 144 MET A CA 1 Q65MG6 UNP 144 M +ATOM 1171 C C . MET A 1 144 ? 1.924 -5.077 -13.754 1.00 98.56 ? 144 MET A C 1 Q65MG6 UNP 144 M +ATOM 1172 C CB . MET A 1 144 ? 2.846 -4.723 -16.080 1.00 98.56 ? 144 MET A CB 1 Q65MG6 UNP 144 M +ATOM 1173 O O . MET A 1 144 ? 2.553 -4.868 -12.714 1.00 98.56 ? 144 MET A O 1 Q65MG6 UNP 144 M +ATOM 1174 C CG . MET A 1 144 ? 3.745 -3.558 -15.647 1.00 98.56 ? 144 MET A CG 1 Q65MG6 UNP 144 M +ATOM 1175 S SD . MET A 1 144 ? 5.435 -4.004 -15.176 1.00 98.56 ? 144 MET A SD 1 Q65MG6 UNP 144 M +ATOM 1176 C CE . MET A 1 144 ? 6.110 -4.322 -16.825 1.00 98.56 ? 144 MET A CE 1 Q65MG6 UNP 144 M +ATOM 1177 N N . PHE A 1 145 ? 0.627 -4.774 -13.861 1.00 98.62 ? 145 PHE A N 1 Q65MG6 UNP 145 F +ATOM 1178 C CA . PHE A 1 145 ? -0.114 -4.127 -12.779 1.00 98.62 ? 145 PHE A CA 1 Q65MG6 UNP 145 F +ATOM 1179 C C . PHE A 1 145 ? -0.230 -5.010 -11.527 1.00 98.62 ? 145 PHE A C 1 Q65MG6 UNP 145 F +ATOM 1180 C CB . PHE A 1 145 ? -1.495 -3.692 -13.273 1.00 98.62 ? 145 PHE A CB 1 Q65MG6 UNP 145 F +ATOM 1181 O O . PHE A 1 145 ? -0.064 -4.522 -10.412 1.00 98.62 ? 145 PHE A O 1 Q65MG6 UNP 145 F +ATOM 1182 C CG . PHE A 1 145 ? -2.235 -2.903 -12.215 1.00 98.62 ? 145 PHE A CG 1 Q65MG6 UNP 145 F +ATOM 1183 C CD1 . PHE A 1 145 ? -3.287 -3.490 -11.486 1.00 98.62 ? 145 PHE A CD1 1 Q65MG6 UNP 145 F +ATOM 1184 C CD2 . PHE A 1 145 ? -1.803 -1.603 -11.897 1.00 98.62 ? 145 PHE A CD2 1 Q65MG6 UNP 145 F +ATOM 1185 C CE1 . PHE A 1 145 ? -3.899 -2.777 -10.439 1.00 98.62 ? 145 PHE A CE1 1 Q65MG6 UNP 145 F +ATOM 1186 C CE2 . PHE A 1 145 ? -2.423 -0.891 -10.862 1.00 98.62 ? 145 PHE A CE2 1 Q65MG6 UNP 145 F +ATOM 1187 C CZ . PHE A 1 145 ? -3.463 -1.479 -10.127 1.00 98.62 ? 145 PHE A CZ 1 Q65MG6 UNP 145 F +ATOM 1188 N N . ASP A 1 146 ? -0.426 -6.320 -11.674 1.00 98.75 ? 146 ASP A N 1 Q65MG6 UNP 146 D +ATOM 1189 C CA . ASP A 1 146 ? -0.437 -7.252 -10.544 1.00 98.75 ? 146 ASP A CA 1 Q65MG6 UNP 146 D +ATOM 1190 C C . ASP A 1 146 ? 0.950 -7.347 -9.887 1.00 98.75 ? 146 ASP A C 1 Q65MG6 UNP 146 D +ATOM 1191 C CB . ASP A 1 146 ? -0.925 -8.641 -10.993 1.00 98.75 ? 146 ASP A CB 1 Q65MG6 UNP 146 D +ATOM 1192 O O . ASP A 1 146 ? 1.059 -7.458 -8.661 1.00 98.75 ? 146 ASP A O 1 Q65MG6 UNP 146 D +ATOM 1193 C CG . ASP A 1 146 ? -2.446 -8.734 -11.199 1.00 98.75 ? 146 ASP A CG 1 Q65MG6 UNP 146 D +ATOM 1194 O OD1 . ASP A 1 146 ? -3.216 -7.981 -10.562 1.00 98.75 ? 146 ASP A OD1 1 Q65MG6 UNP 146 D +ATOM 1195 O OD2 . ASP A 1 146 ? -2.908 -9.629 -11.937 1.00 98.75 ? 146 ASP A OD2 1 Q65MG6 UNP 146 D +ATOM 1196 N N . TRP A 1 147 ? 2.036 -7.260 -10.663 1.00 98.69 ? 147 TRP A N 1 Q65MG6 UNP 147 W +ATOM 1197 C CA . TRP A 1 147 ? 3.380 -7.143 -10.097 1.00 98.69 ? 147 TRP A CA 1 Q65MG6 UNP 147 W +ATOM 1198 C C . TRP A 1 147 ? 3.564 -5.850 -9.296 1.00 98.69 ? 147 TRP A C 1 Q65MG6 UNP 147 W +ATOM 1199 C CB . TRP A 1 147 ? 4.445 -7.301 -11.182 1.00 98.69 ? 147 TRP A CB 1 Q65MG6 UNP 147 W +ATOM 1200 O O . TRP A 1 147 ? 4.082 -5.906 -8.178 1.00 98.69 ? 147 TRP A O 1 Q65MG6 UNP 147 W +ATOM 1201 C CG . TRP A 1 147 ? 5.819 -6.951 -10.709 1.00 98.69 ? 147 TRP A CG 1 Q65MG6 UNP 147 W +ATOM 1202 C CD1 . TRP A 1 147 ? 6.671 -7.761 -10.044 1.00 98.69 ? 147 TRP A CD1 1 Q65MG6 UNP 147 W +ATOM 1203 C CD2 . TRP A 1 147 ? 6.509 -5.678 -10.859 1.00 98.69 ? 147 TRP A CD2 1 Q65MG6 UNP 147 W +ATOM 1204 C CE2 . TRP A 1 147 ? 7.793 -5.787 -10.251 1.00 98.69 ? 147 TRP A CE2 1 Q65MG6 UNP 147 W +ATOM 1205 C CE3 . TRP A 1 147 ? 6.192 -4.466 -11.500 1.00 98.69 ? 147 TRP A CE3 1 Q65MG6 UNP 147 W +ATOM 1206 N NE1 . TRP A 1 147 ? 7.828 -7.070 -9.750 1.00 98.69 ? 147 TRP A NE1 1 Q65MG6 UNP 147 W +ATOM 1207 C CH2 . TRP A 1 147 ? 8.380 -3.559 -10.948 1.00 98.69 ? 147 TRP A CH2 1 Q65MG6 UNP 147 W +ATOM 1208 C CZ2 . TRP A 1 147 ? 8.730 -4.749 -10.297 1.00 98.69 ? 147 TRP A CZ2 1 Q65MG6 UNP 147 W +ATOM 1209 C CZ3 . TRP A 1 147 ? 7.115 -3.410 -11.540 1.00 98.69 ? 147 TRP A CZ3 1 Q65MG6 UNP 147 W +ATOM 1210 N N . VAL A 1 148 ? 3.086 -4.713 -9.800 1.00 98.75 ? 148 VAL A N 1 Q65MG6 UNP 148 V +ATOM 1211 C CA . VAL A 1 148 ? 3.066 -3.445 -9.057 1.00 98.75 ? 148 VAL A CA 1 Q65MG6 UNP 148 V +ATOM 1212 C C . VAL A 1 148 ? 2.235 -3.566 -7.781 1.00 98.75 ? 148 VAL A C 1 Q65MG6 UNP 148 V +ATOM 1213 C CB . VAL A 1 148 ? 2.514 -2.319 -9.942 1.00 98.75 ? 148 VAL A CB 1 Q65MG6 UNP 148 V +ATOM 1214 O O . VAL A 1 148 ? 2.690 -3.182 -6.701 1.00 98.75 ? 148 VAL A O 1 Q65MG6 UNP 148 V +ATOM 1215 C CG1 . VAL A 1 148 ? 2.217 -1.061 -9.127 1.00 98.75 ? 148 VAL A CG1 1 Q65MG6 UNP 148 V +ATOM 1216 C CG2 . VAL A 1 148 ? 3.510 -1.978 -11.044 1.00 98.75 ? 148 VAL A CG2 1 Q65MG6 UNP 148 V +ATOM 1217 N N . SER A 1 149 ? 1.044 -4.159 -7.880 1.00 98.75 ? 149 SER A N 1 Q65MG6 UNP 149 S +ATOM 1218 C CA . SER A 1 149 ? 0.131 -4.367 -6.761 1.00 98.75 ? 149 SER A CA 1 Q65MG6 UNP 149 S +ATOM 1219 C C . SER A 1 149 ? 0.821 -5.120 -5.623 1.00 98.75 ? 149 SER A C 1 Q65MG6 UNP 149 S +ATOM 1220 C CB . SER A 1 149 ? -1.126 -5.098 -7.240 1.00 98.75 ? 149 SER A CB 1 Q65MG6 UNP 149 S +ATOM 1221 O O . SER A 1 149 ? 0.789 -4.643 -4.485 1.00 98.75 ? 149 SER A O 1 Q65MG6 UNP 149 S +ATOM 1222 O OG . SER A 1 149 ? -1.983 -5.329 -6.146 1.00 98.75 ? 149 SER A OG 1 Q65MG6 UNP 149 S +ATOM 1223 N N . LYS A 1 150 ? 1.575 -6.194 -5.915 1.00 98.88 ? 150 LYS A N 1 Q65MG6 UNP 150 K +ATOM 1224 C CA . LYS A 1 150 ? 2.380 -6.931 -4.913 1.00 98.88 ? 150 LYS A CA 1 Q65MG6 UNP 150 K +ATOM 1225 C C . LYS A 1 150 ? 3.301 -6.016 -4.096 1.00 98.88 ? 150 LYS A C 1 Q65MG6 UNP 150 K +ATOM 1226 C CB . LYS A 1 150 ? 3.226 -8.025 -5.590 1.00 98.88 ? 150 LYS A CB 1 Q65MG6 UNP 150 K +ATOM 1227 O O . LYS A 1 150 ? 3.496 -6.271 -2.911 1.00 98.88 ? 150 LYS A O 1 Q65MG6 UNP 150 K +ATOM 1228 C CG . LYS A 1 150 ? 2.401 -9.189 -6.160 1.00 98.88 ? 150 LYS A CG 1 Q65MG6 UNP 150 K +ATOM 1229 C CD . LYS A 1 150 ? 3.233 -10.030 -7.145 1.00 98.88 ? 150 LYS A CD 1 Q65MG6 UNP 150 K +ATOM 1230 C CE . LYS A 1 150 ? 2.317 -10.963 -7.950 1.00 98.88 ? 150 LYS A CE 1 Q65MG6 UNP 150 K +ATOM 1231 N NZ . LYS A 1 150 ? 3.003 -11.559 -9.130 1.00 98.88 ? 150 LYS A NZ 1 Q65MG6 UNP 150 K +ATOM 1232 N N . GLN A 1 151 ? 3.822 -4.938 -4.686 1.00 98.88 ? 151 GLN A N 1 Q65MG6 UNP 151 Q +ATOM 1233 C CA . GLN A 1 151 ? 4.662 -3.968 -3.973 1.00 98.88 ? 151 GLN A CA 1 Q65MG6 UNP 151 Q +ATOM 1234 C C . GLN A 1 151 ? 3.823 -3.109 -3.019 1.00 98.88 ? 151 GLN A C 1 Q65MG6 UNP 151 Q +ATOM 1235 C CB . GLN A 1 151 ? 5.458 -3.081 -4.951 1.00 98.88 ? 151 GLN A CB 1 Q65MG6 UNP 151 Q +ATOM 1236 O O . GLN A 1 151 ? 4.199 -2.905 -1.867 1.00 98.88 ? 151 GLN A O 1 Q65MG6 UNP 151 Q +ATOM 1237 C CG . GLN A 1 151 ? 6.031 -3.796 -6.187 1.00 98.88 ? 151 GLN A CG 1 Q65MG6 UNP 151 Q +ATOM 1238 C CD . GLN A 1 151 ? 6.717 -5.119 -5.870 1.00 98.88 ? 151 GLN A CD 1 Q65MG6 UNP 151 Q +ATOM 1239 N NE2 . GLN A 1 151 ? 6.289 -6.211 -6.461 1.00 98.88 ? 151 GLN A NE2 1 Q65MG6 UNP 151 Q +ATOM 1240 O OE1 . GLN A 1 151 ? 7.658 -5.190 -5.094 1.00 98.88 ? 151 GLN A OE1 1 Q65MG6 UNP 151 Q +ATOM 1241 N N . THR A 1 152 ? 2.636 -2.672 -3.450 1.00 98.88 ? 152 THR A N 1 Q65MG6 UNP 152 T +ATOM 1242 C CA . THR A 1 152 ? 1.709 -1.910 -2.592 1.00 98.88 ? 152 THR A CA 1 Q65MG6 UNP 152 T +ATOM 1243 C C . THR A 1 152 ? 1.248 -2.704 -1.362 1.00 98.88 ? 152 THR A C 1 Q65MG6 UNP 152 T +ATOM 1244 C CB . THR A 1 152 ? 0.483 -1.403 -3.367 1.00 98.88 ? 152 THR A CB 1 Q65MG6 UNP 152 T +ATOM 1245 O O . THR A 1 152 ? 1.018 -2.117 -0.306 1.00 98.88 ? 152 THR A O 1 Q65MG6 UNP 152 T +ATOM 1246 C CG2 . THR A 1 152 ? 0.820 -0.773 -4.719 1.00 98.88 ? 152 THR A CG2 1 Q65MG6 UNP 152 T +ATOM 1247 O OG1 . THR A 1 152 ? -0.416 -2.456 -3.609 1.00 98.88 ? 152 THR A OG1 1 Q65MG6 UNP 152 T +ATOM 1248 N N . TYR A 1 153 ? 1.184 -4.041 -1.446 1.00 98.94 ? 153 TYR A N 1 Q65MG6 UNP 153 Y +ATOM 1249 C CA . TYR A 1 153 ? 0.866 -4.908 -0.304 1.00 98.94 ? 153 TYR A CA 1 Q65MG6 UNP 153 Y +ATOM 1250 C C . TYR A 1 153 ? 1.946 -4.894 0.786 1.00 98.94 ? 153 TYR A C 1 Q65MG6 UNP 153 Y +ATOM 1251 C CB . TYR A 1 153 ? 0.599 -6.344 -0.776 1.00 98.94 ? 153 TYR A CB 1 Q65MG6 UNP 153 Y +ATOM 1252 O O . TYR A 1 153 ? 1.622 -5.064 1.964 1.00 98.94 ? 153 TYR A O 1 Q65MG6 UNP 153 Y +ATOM 1253 C CG . TYR A 1 153 ? -0.835 -6.541 -1.211 1.00 98.94 ? 153 TYR A CG 1 Q65MG6 UNP 153 Y +ATOM 1254 C CD1 . TYR A 1 153 ? -1.814 -6.859 -0.253 1.00 98.94 ? 153 TYR A CD1 1 Q65MG6 UNP 153 Y +ATOM 1255 C CD2 . TYR A 1 153 ? -1.205 -6.340 -2.552 1.00 98.94 ? 153 TYR A CD2 1 Q65MG6 UNP 153 Y +ATOM 1256 C CE1 . TYR A 1 153 ? -3.167 -6.897 -0.630 1.00 98.94 ? 153 TYR A CE1 1 Q65MG6 UNP 153 Y +ATOM 1257 C CE2 . TYR A 1 153 ? -2.555 -6.367 -2.932 1.00 98.94 ? 153 TYR A CE2 1 Q65MG6 UNP 153 Y +ATOM 1258 O OH . TYR A 1 153 ? -4.844 -6.532 -2.257 1.00 98.94 ? 153 TYR A OH 1 Q65MG6 UNP 153 Y +ATOM 1259 C CZ . TYR A 1 153 ? -3.535 -6.618 -1.959 1.00 98.94 ? 153 TYR A CZ 1 Q65MG6 UNP 153 Y +ATOM 1260 N N . ILE A 1 154 ? 3.210 -4.656 0.420 1.00 98.94 ? 154 ILE A N 1 Q65MG6 UNP 154 I +ATOM 1261 C CA . ILE A 1 154 ? 4.304 -4.480 1.385 1.00 98.94 ? 154 ILE A CA 1 Q65MG6 UNP 154 I +ATOM 1262 C C . ILE A 1 154 ? 4.073 -3.184 2.170 1.00 98.94 ? 154 ILE A C 1 Q65MG6 UNP 154 I +ATOM 1263 C CB . ILE A 1 154 ? 5.683 -4.485 0.685 1.00 98.94 ? 154 ILE A CB 1 Q65MG6 UNP 154 I +ATOM 1264 O O . ILE A 1 154 ? 4.052 -3.209 3.402 1.00 98.94 ? 154 ILE A O 1 Q65MG6 UNP 154 I +ATOM 1265 C CG1 . ILE A 1 154 ? 5.897 -5.784 -0.128 1.00 98.94 ? 154 ILE A CG1 1 Q65MG6 UNP 154 I +ATOM 1266 C CG2 . ILE A 1 154 ? 6.803 -4.314 1.727 1.00 98.94 ? 154 ILE A CG2 1 Q65MG6 UNP 154 I +ATOM 1267 C CD1 . ILE A 1 154 ? 7.159 -5.775 -1.001 1.00 98.94 ? 154 ILE A CD1 1 Q65MG6 UNP 154 I +ATOM 1268 N N . ALA A 1 155 ? 3.808 -2.081 1.462 1.00 98.88 ? 155 ALA A N 1 Q65MG6 UNP 155 A +ATOM 1269 C CA . ALA A 1 155 ? 3.480 -0.800 2.081 1.00 98.88 ? 155 ALA A CA 1 Q65MG6 UNP 155 A +ATOM 1270 C C . ALA A 1 155 ? 2.239 -0.898 2.977 1.00 98.88 ? 155 ALA A C 1 Q65MG6 UNP 155 A +ATOM 1271 C CB . ALA A 1 155 ? 3.335 0.267 0.993 1.00 98.88 ? 155 ALA A CB 1 Q65MG6 UNP 155 A +ATOM 1272 O O . ALA A 1 155 ? 2.289 -0.505 4.141 1.00 98.88 ? 155 ALA A O 1 Q65MG6 UNP 155 A +ATOM 1273 N N . LEU A 1 156 ? 1.163 -1.525 2.493 1.00 98.94 ? 156 LEU A N 1 Q65MG6 UNP 156 L +ATOM 1274 C CA . LEU A 1 156 ? -0.043 -1.802 3.274 1.00 98.94 ? 156 LEU A CA 1 Q65MG6 UNP 156 L +ATOM 1275 C C . LEU A 1 156 ? 0.278 -2.523 4.592 1.00 98.94 ? 156 LEU A C 1 Q65MG6 UNP 156 L +ATOM 1276 C CB . LEU A 1 156 ? -0.989 -2.659 2.412 1.00 98.94 ? 156 LEU A CB 1 Q65MG6 UNP 156 L +ATOM 1277 O O . LEU A 1 156 ? -0.184 -2.115 5.661 1.00 98.94 ? 156 LEU A O 1 Q65MG6 UNP 156 L +ATOM 1278 C CG . LEU A 1 156 ? -2.241 -3.174 3.136 1.00 98.94 ? 156 LEU A CG 1 Q65MG6 UNP 156 L +ATOM 1279 C CD1 . LEU A 1 156 ? -3.132 -2.035 3.617 1.00 98.94 ? 156 LEU A CD1 1 Q65MG6 UNP 156 L +ATOM 1280 C CD2 . LEU A 1 156 ? -3.050 -4.071 2.209 1.00 98.94 ? 156 LEU A CD2 1 Q65MG6 UNP 156 L +ATOM 1281 N N . ALA A 1 157 ? 1.053 -3.608 4.528 1.00 98.94 ? 157 ALA A N 1 Q65MG6 UNP 157 A +ATOM 1282 C CA . ALA A 1 157 ? 1.406 -4.394 5.703 1.00 98.94 ? 157 ALA A CA 1 Q65MG6 UNP 157 A +ATOM 1283 C C . ALA A 1 157 ? 2.224 -3.578 6.715 1.00 98.94 ? 157 ALA A C 1 Q65MG6 UNP 157 A +ATOM 1284 C CB . ALA A 1 157 ? 2.151 -5.653 5.247 1.00 98.94 ? 157 ALA A CB 1 Q65MG6 UNP 157 A +ATOM 1285 O O . ALA A 1 157 ? 1.941 -3.647 7.916 1.00 98.94 ? 157 ALA A O 1 Q65MG6 UNP 157 A +ATOM 1286 N N . ASN A 1 158 ? 3.182 -2.779 6.241 1.00 98.94 ? 158 ASN A N 1 Q65MG6 UNP 158 N +ATOM 1287 C CA . ASN A 1 158 ? 4.015 -1.925 7.084 1.00 98.94 ? 158 ASN A CA 1 Q65MG6 UNP 158 N +ATOM 1288 C C . ASN A 1 158 ? 3.206 -0.799 7.732 1.00 98.94 ? 158 ASN A C 1 Q65MG6 UNP 158 N +ATOM 1289 C CB . ASN A 1 158 ? 5.194 -1.400 6.253 1.00 98.94 ? 158 ASN A CB 1 Q65MG6 UNP 158 N +ATOM 1290 O O . ASN A 1 158 ? 3.284 -0.638 8.948 1.00 98.94 ? 158 ASN A O 1 Q65MG6 UNP 158 N +ATOM 1291 C CG . ASN A 1 158 ? 6.239 -2.470 5.987 1.00 98.94 ? 158 ASN A CG 1 Q65MG6 UNP 158 N +ATOM 1292 N ND2 . ASN A 1 158 ? 7.090 -2.261 5.018 1.00 98.94 ? 158 ASN A ND2 1 Q65MG6 UNP 158 N +ATOM 1293 O OD1 . ASN A 1 158 ? 6.323 -3.491 6.653 1.00 98.94 ? 158 ASN A OD1 1 Q65MG6 UNP 158 N +ATOM 1294 N N . MET A 1 159 ? 2.347 -0.107 6.978 1.00 98.94 ? 159 MET A N 1 Q65MG6 UNP 159 M +ATOM 1295 C CA . MET A 1 159 ? 1.451 0.931 7.508 1.00 98.94 ? 159 MET A CA 1 Q65MG6 UNP 159 M +ATOM 1296 C C . MET A 1 159 ? 0.550 0.386 8.623 1.00 98.94 ? 159 MET A C 1 Q65MG6 UNP 159 M +ATOM 1297 C CB . MET A 1 159 ? 0.564 1.483 6.382 1.00 98.94 ? 159 MET A CB 1 Q65MG6 UNP 159 M +ATOM 1298 O O . MET A 1 159 ? 0.449 0.971 9.699 1.00 98.94 ? 159 MET A O 1 Q65MG6 UNP 159 M +ATOM 1299 C CG . MET A 1 159 ? 1.329 2.296 5.338 1.00 98.94 ? 159 MET A CG 1 Q65MG6 UNP 159 M +ATOM 1300 S SD . MET A 1 159 ? 0.322 2.764 3.905 1.00 98.94 ? 159 MET A SD 1 Q65MG6 UNP 159 M +ATOM 1301 C CE . MET A 1 159 ? -0.706 4.041 4.674 1.00 98.94 ? 159 MET A CE 1 Q65MG6 UNP 159 M +ATOM 1302 N N . MET A 1 160 ? -0.088 -0.769 8.402 1.00 98.94 ? 160 MET A N 1 Q65MG6 UNP 160 M +ATOM 1303 C CA . MET A 1 160 ? -0.963 -1.381 9.410 1.00 98.94 ? 160 MET A CA 1 Q65MG6 UNP 160 M +ATOM 1304 C C . MET A 1 160 ? -0.202 -1.894 10.637 1.00 98.94 ? 160 MET A C 1 Q65MG6 UNP 160 M +ATOM 1305 C CB . MET A 1 160 ? -1.724 -2.556 8.802 1.00 98.94 ? 160 MET A CB 1 Q65MG6 UNP 160 M +ATOM 1306 O O . MET A 1 160 ? -0.756 -1.913 11.736 1.00 98.94 ? 160 MET A O 1 Q65MG6 UNP 160 M +ATOM 1307 C CG . MET A 1 160 ? -2.760 -2.153 7.754 1.00 98.94 ? 160 MET A CG 1 Q65MG6 UNP 160 M +ATOM 1308 S SD . MET A 1 160 ? -3.805 -3.545 7.246 1.00 98.94 ? 160 MET A SD 1 Q65MG6 UNP 160 M +ATOM 1309 C CE . MET A 1 160 ? -2.547 -4.680 6.607 1.00 98.94 ? 160 MET A CE 1 Q65MG6 UNP 160 M +ATOM 1310 N N . THR A 1 161 ? 1.036 -2.356 10.459 1.00 98.88 ? 161 THR A N 1 Q65MG6 UNP 161 T +ATOM 1311 C CA . THR A 1 161 ? 1.876 -2.836 11.566 1.00 98.88 ? 161 THR A CA 1 Q65MG6 UNP 161 T +ATOM 1312 C C . THR A 1 161 ? 2.401 -1.665 12.394 1.00 98.88 ? 161 THR A C 1 Q65MG6 UNP 161 T +ATOM 1313 C CB . THR A 1 161 ? 3.020 -3.720 11.050 1.00 98.88 ? 161 THR A CB 1 Q65MG6 UNP 161 T +ATOM 1314 O O . THR A 1 161 ? 2.326 -1.717 13.618 1.00 98.88 ? 161 THR A O 1 Q65MG6 UNP 161 T +ATOM 1315 C CG2 . THR A 1 161 ? 3.864 -4.312 12.179 1.00 98.88 ? 161 THR A CG2 1 Q65MG6 UNP 161 T +ATOM 1316 O OG1 . THR A 1 161 ? 2.464 -4.800 10.325 1.00 98.88 ? 161 THR A OG1 1 Q65MG6 UNP 161 T +ATOM 1317 N N . ALA A 1 162 ? 2.839 -0.584 11.744 1.00 98.81 ? 162 ALA A N 1 Q65MG6 UNP 162 A +ATOM 1318 C CA . ALA A 1 162 ? 3.228 0.662 12.399 1.00 98.81 ? 162 ALA A CA 1 Q65MG6 UNP 162 A +ATOM 1319 C C . ALA A 1 162 ? 2.064 1.255 13.202 1.00 98.81 ? 162 ALA A C 1 Q65MG6 UNP 162 A +ATOM 1320 C CB . ALA A 1 162 ? 3.741 1.630 11.328 1.00 98.81 ? 162 ALA A CB 1 Q65MG6 UNP 162 A +ATOM 1321 O O . ALA A 1 162 ? 2.228 1.546 14.382 1.00 98.81 ? 162 ALA A O 1 Q65MG6 UNP 162 A +ATOM 1322 N N . ALA A 1 163 ? 0.867 1.323 12.609 1.00 98.88 ? 163 ALA A N 1 Q65MG6 UNP 163 A +ATOM 1323 C CA . ALA A 1 163 ? -0.347 1.742 13.309 1.00 98.88 ? 163 ALA A CA 1 Q65MG6 UNP 163 A +ATOM 1324 C C . ALA A 1 163 ? -0.600 0.901 14.575 1.00 98.88 ? 163 ALA A C 1 Q65MG6 UNP 163 A +ATOM 1325 C CB . ALA A 1 163 ? -1.523 1.638 12.328 1.00 98.88 ? 163 ALA A CB 1 Q65MG6 UNP 163 A +ATOM 1326 O O . ALA A 1 163 ? -0.830 1.446 15.652 1.00 98.88 ? 163 ALA A O 1 Q65MG6 UNP 163 A +ATOM 1327 N N . ALA A 1 164 ? -0.495 -0.427 14.471 1.00 98.81 ? 164 ALA A N 1 Q65MG6 UNP 164 A +ATOM 1328 C CA . ALA A 1 164 ? -0.715 -1.326 15.601 1.00 98.81 ? 164 ALA A CA 1 Q65MG6 UNP 164 A +ATOM 1329 C C . ALA A 1 164 ? 0.294 -1.130 16.744 1.00 98.81 ? 164 ALA A C 1 Q65MG6 UNP 164 A +ATOM 1330 C CB . ALA A 1 164 ? -0.685 -2.763 15.077 1.00 98.81 ? 164 ALA A CB 1 Q65MG6 UNP 164 A +ATOM 1331 O O . ALA A 1 164 ? -0.096 -1.221 17.906 1.00 98.81 ? 164 ALA A O 1 Q65MG6 UNP 164 A +ATOM 1332 N N . LEU A 1 165 ? 1.560 -0.835 16.428 1.00 98.50 ? 165 LEU A N 1 Q65MG6 UNP 165 L +ATOM 1333 C CA . LEU A 1 165 ? 2.611 -0.570 17.421 1.00 98.50 ? 165 LEU A CA 1 Q65MG6 UNP 165 L +ATOM 1334 C C . LEU A 1 165 ? 2.324 0.674 18.273 1.00 98.50 ? 165 LEU A C 1 Q65MG6 UNP 165 L +ATOM 1335 C CB . LEU A 1 165 ? 3.965 -0.424 16.702 1.00 98.50 ? 165 LEU A CB 1 Q65MG6 UNP 165 L +ATOM 1336 O O . LEU A 1 165 ? 2.764 0.739 19.415 1.00 98.50 ? 165 LEU A O 1 Q65MG6 UNP 165 L +ATOM 1337 C CG . LEU A 1 165 ? 4.572 -1.764 16.255 1.00 98.50 ? 165 LEU A CG 1 Q65MG6 UNP 165 L +ATOM 1338 C CD1 . LEU A 1 165 ? 5.650 -1.532 15.195 1.00 98.50 ? 165 LEU A CD1 1 Q65MG6 UNP 165 L +ATOM 1339 C CD2 . LEU A 1 165 ? 5.228 -2.502 17.425 1.00 98.50 ? 165 LEU A CD2 1 Q65MG6 UNP 165 L +ATOM 1340 N N . ILE A 1 166 ? 1.550 1.625 17.748 1.00 98.31 ? 166 ILE A N 1 Q65MG6 UNP 166 I +ATOM 1341 C CA . ILE A 1 166 ? 1.128 2.835 18.470 1.00 98.31 ? 166 ILE A CA 1 Q65MG6 UNP 166 I +ATOM 1342 C C . ILE A 1 166 ? -0.351 2.794 18.892 1.00 98.31 ? 166 ILE A C 1 Q65MG6 UNP 166 I +ATOM 1343 C CB . ILE A 1 166 ? 1.538 4.107 17.699 1.00 98.31 ? 166 ILE A CB 1 Q65MG6 UNP 166 I +ATOM 1344 O O . ILE A 1 166 ? -0.944 3.816 19.227 1.00 98.31 ? 166 ILE A O 1 Q65MG6 UNP 166 I +ATOM 1345 C CG1 . ILE A 1 166 ? 0.813 4.223 16.342 1.00 98.31 ? 166 ILE A CG1 1 Q65MG6 UNP 166 I +ATOM 1346 C CG2 . ILE A 1 166 ? 3.072 4.124 17.521 1.00 98.31 ? 166 ILE A CG2 1 Q65MG6 UNP 166 I +ATOM 1347 C CD1 . ILE A 1 166 ? 0.969 5.608 15.710 1.00 98.31 ? 166 ILE A CD1 1 Q65MG6 UNP 166 I +ATOM 1348 N N . GLY A 1 167 ? -0.969 1.606 18.894 1.00 98.31 ? 167 GLY A N 1 Q65MG6 UNP 167 G +ATOM 1349 C CA . GLY A 1 167 ? -2.336 1.407 19.388 1.00 98.31 ? 167 GLY A CA 1 Q65MG6 UNP 167 G +ATOM 1350 C C . GLY A 1 167 ? -3.443 1.915 18.458 1.00 98.31 ? 167 GLY A C 1 Q65MG6 UNP 167 G +ATOM 1351 O O . GLY A 1 167 ? -4.557 2.174 18.918 1.00 98.31 ? 167 GLY A O 1 Q65MG6 UNP 167 G +ATOM 1352 N N . ILE A 1 168 ? -3.161 2.054 17.160 1.00 98.88 ? 168 ILE A N 1 Q65MG6 UNP 168 I +ATOM 1353 C CA . ILE A 1 168 ? -4.130 2.441 16.130 1.00 98.88 ? 168 ILE A CA 1 Q65MG6 UNP 168 I +ATOM 1354 C C . ILE A 1 168 ? -4.623 1.203 15.383 1.00 98.88 ? 168 ILE A C 1 Q65MG6 UNP 168 I +ATOM 1355 C CB . ILE A 1 168 ? -3.550 3.523 15.196 1.00 98.88 ? 168 ILE A CB 1 Q65MG6 UNP 168 I +ATOM 1356 O O . ILE A 1 168 ? -3.861 0.361 14.901 1.00 98.88 ? 168 ILE A O 1 Q65MG6 UNP 168 I +ATOM 1357 C CG1 . ILE A 1 168 ? -3.336 4.816 16.011 1.00 98.88 ? 168 ILE A CG1 1 Q65MG6 UNP 168 I +ATOM 1358 C CG2 . ILE A 1 168 ? -4.469 3.790 13.985 1.00 98.88 ? 168 ILE A CG2 1 Q65MG6 UNP 168 I +ATOM 1359 C CD1 . ILE A 1 168 ? -2.583 5.897 15.241 1.00 98.88 ? 168 ILE A CD1 1 Q65MG6 UNP 168 I +ATOM 1360 N N . ASP A 1 169 ? -5.941 1.110 15.267 1.00 98.88 ? 169 ASP A N 1 Q65MG6 UNP 169 D +ATOM 1361 C CA . ASP A 1 169 ? -6.624 0.043 14.563 1.00 98.88 ? 169 ASP A CA 1 Q65MG6 UNP 169 D +ATOM 1362 C C . ASP A 1 169 ? -6.635 0.273 13.056 1.00 98.88 ? 169 ASP A C 1 Q65MG6 UNP 169 D +ATOM 1363 C CB . ASP A 1 169 ? -8.045 -0.074 15.107 1.00 98.88 ? 169 ASP A CB 1 Q65MG6 UNP 169 D +ATOM 1364 O O . ASP A 1 169 ? -6.679 1.407 12.578 1.00 98.88 ? 169 ASP A O 1 Q65MG6 UNP 169 D +ATOM 1365 C CG . ASP A 1 169 ? -8.034 -0.706 16.485 1.00 98.88 ? 169 ASP A CG 1 Q65MG6 UNP 169 D +ATOM 1366 O OD1 . ASP A 1 169 ? -7.616 -1.878 16.566 1.00 98.88 ? 169 ASP A OD1 1 Q65MG6 UNP 169 D +ATOM 1367 O OD2 . ASP A 1 169 ? -8.546 -0.101 17.447 1.00 98.88 ? 169 ASP A OD2 1 Q65MG6 UNP 169 D +ATOM 1368 N N . SER A 1 170 ? -6.655 -0.816 12.288 1.00 98.94 ? 170 SER A N 1 Q65MG6 UNP 170 S +ATOM 1369 C CA . SER A 1 170 ? -6.700 -0.743 10.830 1.00 98.94 ? 170 SER A CA 1 Q65MG6 UNP 170 S +ATOM 1370 C C . SER A 1 170 ? -7.499 -1.880 10.195 1.00 98.94 ? 170 SER A C 1 Q65MG6 UNP 170 S +ATOM 1371 C CB . SER A 1 170 ? -5.281 -0.652 10.251 1.00 98.94 ? 170 SER A CB 1 Q65MG6 UNP 170 S +ATOM 1372 O O . SER A 1 170 ? -7.861 -2.858 10.845 1.00 98.94 ? 170 SER A O 1 Q65MG6 UNP 170 S +ATOM 1373 O OG . SER A 1 170 ? -4.474 -1.734 10.685 1.00 98.94 ? 170 SER A OG 1 Q65MG6 UNP 170 S +ATOM 1374 N N . CYS A 1 171 ? -7.815 -1.764 8.908 1.00 98.88 ? 171 CYS A N 1 Q65MG6 UNP 171 C +ATOM 1375 C CA . CYS A 1 171 ? -8.408 -2.851 8.135 1.00 98.88 ? 171 CYS A CA 1 Q65MG6 UNP 171 C +ATOM 1376 C C . CYS A 1 171 ? -7.919 -2.811 6.685 1.00 98.88 ? 171 CYS A C 1 Q65MG6 UNP 171 C +ATOM 1377 C CB . CYS A 1 171 ? -9.935 -2.739 8.198 1.00 98.88 ? 171 CYS A CB 1 Q65MG6 UNP 171 C +ATOM 1378 O O . CYS A 1 171 ? -8.203 -1.821 6.012 1.00 98.88 ? 171 CYS A O 1 Q65MG6 UNP 171 C +ATOM 1379 S SG . CYS A 1 171 ? -10.737 -4.187 7.426 1.00 98.88 ? 171 CYS A SG 1 Q65MG6 UNP 171 C +ATOM 1380 N N . PRO A 1 172 ? -7.277 -3.881 6.177 1.00 98.88 ? 172 PRO A N 1 Q65MG6 UNP 172 P +ATOM 1381 C CA . PRO A 1 172 ? -7.049 -4.040 4.746 1.00 98.88 ? 172 PRO A CA 1 Q65MG6 UNP 172 P +ATOM 1382 C C . PRO A 1 172 ? -8.363 -4.439 4.063 1.00 98.88 ? 172 PRO A C 1 Q65MG6 UNP 172 P +ATOM 1383 C CB . PRO A 1 172 ? -5.983 -5.126 4.633 1.00 98.88 ? 172 PRO A CB 1 Q65MG6 UNP 172 P +ATOM 1384 O O . PRO A 1 172 ? -9.186 -5.155 4.653 1.00 98.88 ? 172 PRO A O 1 Q65MG6 UNP 172 P +ATOM 1385 C CG . PRO A 1 172 ? -6.279 -6.032 5.827 1.00 98.88 ? 172 PRO A CG 1 Q65MG6 UNP 172 P +ATOM 1386 C CD . PRO A 1 172 ? -6.869 -5.092 6.883 1.00 98.88 ? 172 PRO A CD 1 Q65MG6 UNP 172 P +ATOM 1387 N N . ILE A 1 173 ? -8.590 -3.944 2.850 1.00 98.88 ? 173 ILE A N 1 Q65MG6 UNP 173 I +ATOM 1388 C CA . ILE A 1 173 ? -9.875 -4.034 2.157 1.00 98.88 ? 173 ILE A CA 1 Q65MG6 UNP 173 I +ATOM 1389 C C . ILE A 1 173 ? -9.632 -4.317 0.665 1.00 98.88 ? 173 ILE A C 1 Q65MG6 UNP 173 I +ATOM 1390 C CB . ILE A 1 173 ? -10.656 -2.713 2.377 1.00 98.88 ? 173 ILE A CB 1 Q65MG6 UNP 173 I +ATOM 1391 O O . ILE A 1 173 ? -9.156 -3.453 -0.064 1.00 98.88 ? 173 ILE A O 1 Q65MG6 UNP 173 I +ATOM 1392 C CG1 . ILE A 1 173 ? -11.039 -2.434 3.851 1.00 98.88 ? 173 ILE A CG1 1 Q65MG6 UNP 173 I +ATOM 1393 C CG2 . ILE A 1 173 ? -11.926 -2.645 1.506 1.00 98.88 ? 173 ILE A CG2 1 Q65MG6 UNP 173 I +ATOM 1394 C CD1 . ILE A 1 173 ? -11.334 -0.955 4.130 1.00 98.88 ? 173 ILE A CD1 1 Q65MG6 UNP 173 I +ATOM 1395 N N . GLU A 1 174 ? -10.050 -5.504 0.221 1.00 98.69 ? 174 GLU A N 1 Q65MG6 UNP 174 E +ATOM 1396 C CA . GLU A 1 174 ? -10.209 -5.894 -1.197 1.00 98.69 ? 174 GLU A CA 1 Q65MG6 UNP 174 E +ATOM 1397 C C . GLU A 1 174 ? -11.683 -6.137 -1.567 1.00 98.69 ? 174 GLU A C 1 Q65MG6 UNP 174 E +ATOM 1398 C CB . GLU A 1 174 ? -9.430 -7.184 -1.472 1.00 98.69 ? 174 GLU A CB 1 Q65MG6 UNP 174 E +ATOM 1399 O O . GLU A 1 174 ? -12.018 -6.451 -2.703 1.00 98.69 ? 174 GLU A O 1 Q65MG6 UNP 174 E +ATOM 1400 C CG . GLU A 1 174 ? -7.910 -7.022 -1.413 1.00 98.69 ? 174 GLU A CG 1 Q65MG6 UNP 174 E +ATOM 1401 C CD . GLU A 1 174 ? -7.259 -8.396 -1.626 1.00 98.69 ? 174 GLU A CD 1 Q65MG6 UNP 174 E +ATOM 1402 O OE1 . GLU A 1 174 ? -6.531 -8.581 -2.621 1.00 98.69 ? 174 GLU A OE1 1 Q65MG6 UNP 174 E +ATOM 1403 O OE2 . GLU A 1 174 ? -7.543 -9.283 -0.785 1.00 98.69 ? 174 GLU A OE2 1 Q65MG6 UNP 174 E +ATOM 1404 N N . GLY A 1 175 ? -12.594 -6.033 -0.591 1.00 98.38 ? 175 GLY A N 1 Q65MG6 UNP 175 G +ATOM 1405 C CA . GLY A 1 175 ? -14.018 -6.319 -0.774 1.00 98.38 ? 175 GLY A CA 1 Q65MG6 UNP 175 G +ATOM 1406 C C . GLY A 1 175 ? -14.751 -5.203 -1.515 1.00 98.38 ? 175 GLY A C 1 Q65MG6 UNP 175 G +ATOM 1407 O O . GLY A 1 175 ? -15.648 -4.576 -0.955 1.00 98.38 ? 175 GLY A O 1 Q65MG6 UNP 175 G +ATOM 1408 N N . PHE A 1 176 ? -14.364 -4.926 -2.752 1.00 98.75 ? 176 PHE A N 1 Q65MG6 UNP 176 F +ATOM 1409 C CA . PHE A 1 176 ? -14.987 -3.940 -3.623 1.00 98.75 ? 176 PHE A CA 1 Q65MG6 UNP 176 F +ATOM 1410 C C . PHE A 1 176 ? -15.065 -4.453 -5.058 1.00 98.75 ? 176 PHE A C 1 Q65MG6 UNP 176 F +ATOM 1411 C CB . PHE A 1 176 ? -14.254 -2.593 -3.505 1.00 98.75 ? 176 PHE A CB 1 Q65MG6 UNP 176 F +ATOM 1412 O O . PHE A 1 176 ? -14.407 -5.421 -5.427 1.00 98.75 ? 176 PHE A O 1 Q65MG6 UNP 176 F +ATOM 1413 C CG . PHE A 1 176 ? -12.780 -2.615 -3.873 1.00 98.75 ? 176 PHE A CG 1 Q65MG6 UNP 176 F +ATOM 1414 C CD1 . PHE A 1 176 ? -11.805 -2.798 -2.873 1.00 98.75 ? 176 PHE A CD1 1 Q65MG6 UNP 176 F +ATOM 1415 C CD2 . PHE A 1 176 ? -12.375 -2.423 -5.208 1.00 98.75 ? 176 PHE A CD2 1 Q65MG6 UNP 176 F +ATOM 1416 C CE1 . PHE A 1 176 ? -10.439 -2.801 -3.210 1.00 98.75 ? 176 PHE A CE1 1 Q65MG6 UNP 176 F +ATOM 1417 C CE2 . PHE A 1 176 ? -11.009 -2.428 -5.542 1.00 98.75 ? 176 PHE A CE2 1 Q65MG6 UNP 176 F +ATOM 1418 C CZ . PHE A 1 176 ? -10.041 -2.627 -4.545 1.00 98.75 ? 176 PHE A CZ 1 Q65MG6 UNP 176 F +ATOM 1419 N N . ASN A 1 177 ? -15.931 -3.843 -5.863 1.00 98.75 ? 177 ASN A N 1 Q65MG6 UNP 177 N +ATOM 1420 C CA . ASN A 1 177 ? -15.941 -4.090 -7.298 1.00 98.75 ? 177 ASN A CA 1 Q65MG6 UNP 177 N +ATOM 1421 C C . ASN A 1 177 ? -14.860 -3.219 -7.953 1.00 98.75 ? 177 ASN A C 1 Q65MG6 UNP 177 N +ATOM 1422 C CB . ASN A 1 177 ? -17.350 -3.822 -7.838 1.00 98.75 ? 177 ASN A CB 1 Q65MG6 UNP 177 N +ATOM 1423 O O . ASN A 1 177 ? -14.972 -1.996 -7.917 1.00 98.75 ? 177 ASN A O 1 Q65MG6 UNP 177 N +ATOM 1424 C CG . ASN A 1 177 ? -17.403 -4.077 -9.330 1.00 98.75 ? 177 ASN A CG 1 Q65MG6 UNP 177 N +ATOM 1425 N ND2 . ASN A 1 177 ? -18.010 -5.147 -9.781 1.00 98.75 ? 177 ASN A ND2 1 Q65MG6 UNP 177 N +ATOM 1426 O OD1 . ASN A 1 177 ? -16.892 -3.319 -10.120 1.00 98.75 ? 177 ASN A OD1 1 Q65MG6 UNP 177 N +ATOM 1427 N N . TYR A 1 178 ? -13.829 -3.860 -8.507 1.00 98.56 ? 178 TYR A N 1 Q65MG6 UNP 178 Y +ATOM 1428 C CA . TYR A 1 178 ? -12.662 -3.193 -9.084 1.00 98.56 ? 178 TYR A CA 1 Q65MG6 UNP 178 Y +ATOM 1429 C C . TYR A 1 178 ? -13.047 -2.180 -10.167 1.00 98.56 ? 178 TYR A C 1 Q65MG6 UNP 178 Y +ATOM 1430 C CB . TYR A 1 178 ? -11.703 -4.259 -9.620 1.00 98.56 ? 178 TYR A CB 1 Q65MG6 UNP 178 Y +ATOM 1431 O O . TYR A 1 178 ? -12.796 -0.994 -9.983 1.00 98.56 ? 178 TYR A O 1 Q65MG6 UNP 178 Y +ATOM 1432 C CG . TYR A 1 178 ? -10.406 -3.690 -10.149 1.00 98.56 ? 178 TYR A CG 1 Q65MG6 UNP 178 Y +ATOM 1433 C CD1 . TYR A 1 178 ? -10.300 -3.284 -11.495 1.00 98.56 ? 178 TYR A CD1 1 Q65MG6 UNP 178 Y +ATOM 1434 C CD2 . TYR A 1 178 ? -9.297 -3.585 -9.291 1.00 98.56 ? 178 TYR A CD2 1 Q65MG6 UNP 178 Y +ATOM 1435 C CE1 . TYR A 1 178 ? -9.088 -2.759 -11.979 1.00 98.56 ? 178 TYR A CE1 1 Q65MG6 UNP 178 Y +ATOM 1436 C CE2 . TYR A 1 178 ? -8.080 -3.094 -9.787 1.00 98.56 ? 178 TYR A CE2 1 Q65MG6 UNP 178 Y +ATOM 1437 O OH . TYR A 1 178 ? -6.783 -2.236 -11.601 1.00 98.56 ? 178 TYR A OH 1 Q65MG6 UNP 178 Y +ATOM 1438 C CZ . TYR A 1 178 ? -7.975 -2.659 -11.123 1.00 98.56 ? 178 TYR A CZ 1 Q65MG6 UNP 178 Y +ATOM 1439 N N . ASP A 1 179 ? -13.745 -2.624 -11.216 1.00 98.62 ? 179 ASP A N 1 Q65MG6 UNP 179 D +ATOM 1440 C CA . ASP A 1 179 ? -14.096 -1.788 -12.373 1.00 98.62 ? 179 ASP A CA 1 Q65MG6 UNP 179 D +ATOM 1441 C C . ASP A 1 179 ? -14.918 -0.559 -11.965 1.00 98.62 ? 179 ASP A C 1 Q65MG6 UNP 179 D +ATOM 1442 C CB . ASP A 1 179 ? -14.898 -2.616 -13.394 1.00 98.62 ? 179 ASP A CB 1 Q65MG6 UNP 179 D +ATOM 1443 O O . ASP A 1 179 ? -14.666 0.558 -12.402 1.00 98.62 ? 179 ASP A O 1 Q65MG6 UNP 179 D +ATOM 1444 C CG . ASP A 1 179 ? -14.237 -3.939 -13.791 1.00 98.62 ? 179 ASP A CG 1 Q65MG6 UNP 179 D +ATOM 1445 O OD1 . ASP A 1 179 ? -12.991 -4.013 -13.772 1.00 98.62 ? 179 ASP A OD1 1 Q65MG6 UNP 179 D +ATOM 1446 O OD2 . ASP A 1 179 ? -15.002 -4.910 -13.998 1.00 98.62 ? 179 ASP A OD2 1 Q65MG6 UNP 179 D +ATOM 1447 N N . LYS A 1 180 ? -15.876 -0.730 -11.047 1.00 98.81 ? 180 LYS A N 1 Q65MG6 UNP 180 K +ATOM 1448 C CA . LYS A 1 180 ? -16.684 0.395 -10.564 1.00 98.81 ? 180 LYS A CA 1 Q65MG6 UNP 180 K +ATOM 1449 C C . LYS A 1 180 ? -15.890 1.371 -9.702 1.00 98.81 ? 180 LYS A C 1 Q65MG6 UNP 180 K +ATOM 1450 C CB . LYS A 1 180 ? -17.889 -0.104 -9.777 1.00 98.81 ? 180 LYS A CB 1 Q65MG6 UNP 180 K +ATOM 1451 O O . LYS A 1 180 ? -16.199 2.559 -9.711 1.00 98.81 ? 180 LYS A O 1 Q65MG6 UNP 180 K +ATOM 1452 C CG . LYS A 1 180 ? -18.913 -0.831 -10.649 1.00 98.81 ? 180 LYS A CG 1 Q65MG6 UNP 180 K +ATOM 1453 C CD . LYS A 1 180 ? -20.095 -1.258 -9.778 1.00 98.81 ? 180 LYS A CD 1 Q65MG6 UNP 180 K +ATOM 1454 C CE . LYS A 1 180 ? -21.019 -2.154 -10.598 1.00 98.81 ? 180 LYS A CE 1 Q65MG6 UNP 180 K +ATOM 1455 N NZ . LYS A 1 180 ? -22.271 -2.443 -9.862 1.00 98.81 ? 180 LYS A NZ 1 Q65MG6 UNP 180 K +ATOM 1456 N N . VAL A 1 181 ? -14.926 0.892 -8.914 1.00 98.81 ? 181 VAL A N 1 Q65MG6 UNP 181 V +ATOM 1457 C CA . VAL A 1 181 ? -14.031 1.780 -8.159 1.00 98.81 ? 181 VAL A CA 1 Q65MG6 UNP 181 V +ATOM 1458 C C . VAL A 1 181 ? -13.120 2.526 -9.123 1.00 98.81 ? 181 VAL A C 1 Q65MG6 UNP 181 V +ATOM 1459 C CB . VAL A 1 181 ? -13.226 1.019 -7.092 1.00 98.81 ? 181 VAL A CB 1 Q65MG6 UNP 181 V +ATOM 1460 O O . VAL A 1 181 ? -13.037 3.744 -9.007 1.00 98.81 ? 181 VAL A O 1 Q65MG6 UNP 181 V +ATOM 1461 C CG1 . VAL A 1 181 ? -12.087 1.861 -6.502 1.00 98.81 ? 181 VAL A CG1 1 Q65MG6 UNP 181 V +ATOM 1462 C CG2 . VAL A 1 181 ? -14.154 0.630 -5.933 1.00 98.81 ? 181 VAL A CG2 1 Q65MG6 UNP 181 V +ATOM 1463 N N . HIS A 1 182 ? -12.512 1.830 -10.084 1.00 98.62 ? 182 HIS A N 1 Q65MG6 UNP 182 H +ATOM 1464 C CA . HIS A 1 182 ? -11.727 2.431 -11.159 1.00 98.62 ? 182 HIS A CA 1 Q65MG6 UNP 182 H +ATOM 1465 C C . HIS A 1 182 ? -12.508 3.566 -11.838 1.00 98.62 ? 182 HIS A C 1 Q65MG6 UNP 182 H +ATOM 1466 C CB . HIS A 1 182 ? -11.328 1.332 -12.152 1.00 98.62 ? 182 HIS A CB 1 Q65MG6 UNP 182 H +ATOM 1467 O O . HIS A 1 182 ? -12.061 4.709 -11.817 1.00 98.62 ? 182 HIS A O 1 Q65MG6 UNP 182 H +ATOM 1468 C CG . HIS A 1 182 ? -10.625 1.876 -13.361 1.00 98.62 ? 182 HIS A CG 1 Q65MG6 UNP 182 H +ATOM 1469 C CD2 . HIS A 1 182 ? -11.192 2.428 -14.480 1.00 98.62 ? 182 HIS A CD2 1 Q65MG6 UNP 182 H +ATOM 1470 N ND1 . HIS A 1 182 ? -9.268 1.919 -13.534 1.00 98.62 ? 182 HIS A ND1 1 Q65MG6 UNP 182 H +ATOM 1471 C CE1 . HIS A 1 182 ? -9.013 2.496 -14.715 1.00 98.62 ? 182 HIS A CE1 1 Q65MG6 UNP 182 H +ATOM 1472 N NE2 . HIS A 1 182 ? -10.158 2.822 -15.335 1.00 98.62 ? 182 HIS A NE2 1 Q65MG6 UNP 182 H +ATOM 1473 N N . ASP A 1 183 ? -13.733 3.296 -12.305 1.00 98.69 ? 183 ASP A N 1 Q65MG6 UNP 183 D +ATOM 1474 C CA . ASP A 1 183 ? -14.598 4.288 -12.957 1.00 98.69 ? 183 ASP A CA 1 Q65MG6 UNP 183 D +ATOM 1475 C C . ASP A 1 183 ? -14.876 5.523 -12.088 1.00 98.69 ? 183 ASP A C 1 Q65MG6 UNP 183 D +ATOM 1476 C CB . ASP A 1 183 ? -15.969 3.661 -13.255 1.00 98.69 ? 183 ASP A CB 1 Q65MG6 UNP 183 D +ATOM 1477 O O . ASP A 1 183 ? -14.999 6.638 -12.601 1.00 98.69 ? 183 ASP A O 1 Q65MG6 UNP 183 D +ATOM 1478 C CG . ASP A 1 183 ? -16.042 2.736 -14.466 1.00 98.69 ? 183 ASP A CG 1 Q65MG6 UNP 183 D +ATOM 1479 O OD1 . ASP A 1 183 ? -15.087 2.713 -15.266 1.00 98.69 ? 183 ASP A OD1 1 Q65MG6 UNP 183 D +ATOM 1480 O OD2 . ASP A 1 183 ? -17.152 2.174 -14.632 1.00 98.69 ? 183 ASP A OD2 1 Q65MG6 UNP 183 D +ATOM 1481 N N . ILE A 1 184 ? -15.056 5.335 -10.776 1.00 98.81 ? 184 ILE A N 1 Q65MG6 UNP 184 I +ATOM 1482 C CA . ILE A 1 184 ? -15.251 6.447 -9.837 1.00 98.81 ? 184 ILE A CA 1 Q65MG6 UNP 184 I +ATOM 1483 C C . ILE A 1 184 ? -13.965 7.267 -9.747 1.00 98.81 ? 184 ILE A C 1 Q65MG6 UNP 184 I +ATOM 1484 C CB . ILE A 1 184 ? -15.718 5.939 -8.451 1.00 98.81 ? 184 ILE A CB 1 Q65MG6 UNP 184 I +ATOM 1485 O O . ILE A 1 184 ? -14.020 8.485 -9.869 1.00 98.81 ? 184 ILE A O 1 Q65MG6 UNP 184 I +ATOM 1486 C CG1 . ILE A 1 184 ? -17.175 5.431 -8.532 1.00 98.81 ? 184 ILE A CG1 1 Q65MG6 UNP 184 I +ATOM 1487 C CG2 . ILE A 1 184 ? -15.617 7.039 -7.372 1.00 98.81 ? 184 ILE A CG2 1 Q65MG6 UNP 184 I +ATOM 1488 C CD1 . ILE A 1 184 ? -17.586 4.573 -7.327 1.00 98.81 ? 184 ILE A CD1 1 Q65MG6 UNP 184 I +ATOM 1489 N N . LEU A 1 185 ? -12.819 6.618 -9.544 1.00 98.69 ? 185 LEU A N 1 Q65MG6 UNP 185 L +ATOM 1490 C CA . LEU A 1 185 ? -11.538 7.299 -9.367 1.00 98.69 ? 185 LEU A CA 1 Q65MG6 UNP 185 L +ATOM 1491 C C . LEU A 1 185 ? -11.088 8.030 -10.635 1.00 98.69 ? 185 LEU A C 1 Q65MG6 UNP 185 L +ATOM 1492 C CB . LEU A 1 185 ? -10.484 6.283 -8.901 1.00 98.69 ? 185 LEU A CB 1 Q65MG6 UNP 185 L +ATOM 1493 O O . LEU A 1 185 ? -10.571 9.139 -10.528 1.00 98.69 ? 185 LEU A O 1 Q65MG6 UNP 185 L +ATOM 1494 C CG . LEU A 1 185 ? -10.756 5.649 -7.527 1.00 98.69 ? 185 LEU A CG 1 Q65MG6 UNP 185 L +ATOM 1495 C CD1 . LEU A 1 185 ? -9.608 4.701 -7.179 1.00 98.69 ? 185 LEU A CD1 1 Q65MG6 UNP 185 L +ATOM 1496 C CD2 . LEU A 1 185 ? -10.920 6.671 -6.401 1.00 98.69 ? 185 LEU A CD2 1 Q65MG6 UNP 185 L +ATOM 1497 N N . GLU A 1 186 ? -11.343 7.462 -11.812 1.00 98.31 ? 186 GLU A N 1 Q65MG6 UNP 186 E +ATOM 1498 C CA . GLU A 1 186 ? -11.085 8.105 -13.102 1.00 98.31 ? 186 GLU A CA 1 Q65MG6 UNP 186 E +ATOM 1499 C C . GLU A 1 186 ? -11.917 9.388 -13.250 1.00 98.31 ? 186 GLU A C 1 Q65MG6 UNP 186 E +ATOM 1500 C CB . GLU A 1 186 ? -11.394 7.098 -14.225 1.00 98.31 ? 186 GLU A CB 1 Q65MG6 UNP 186 E +ATOM 1501 O O . GLU A 1 186 ? -11.378 10.459 -13.523 1.00 98.31 ? 186 GLU A O 1 Q65MG6 UNP 186 E +ATOM 1502 C CG . GLU A 1 186 ? -11.060 7.615 -15.634 1.00 98.31 ? 186 GLU A CG 1 Q65MG6 UNP 186 E +ATOM 1503 C CD . GLU A 1 186 ? -9.575 7.969 -15.842 1.00 98.31 ? 186 GLU A CD 1 Q65MG6 UNP 186 E +ATOM 1504 O OE1 . GLU A 1 186 ? -9.305 8.790 -16.745 1.00 98.31 ? 186 GLU A OE1 1 Q65MG6 UNP 186 E +ATOM 1505 O OE2 . GLU A 1 186 ? -8.718 7.461 -15.086 1.00 98.31 ? 186 GLU A OE2 1 Q65MG6 UNP 186 E +ATOM 1506 N N . LYS A 1 187 ? -13.227 9.327 -12.967 1.00 98.31 ? 187 LYS A N 1 Q65MG6 UNP 187 K +ATOM 1507 C CA . LYS A 1 187 ? -14.123 10.503 -13.026 1.00 98.31 ? 187 LYS A CA 1 Q65MG6 UNP 187 K +ATOM 1508 C C . LYS A 1 187 ? -13.748 11.599 -12.032 1.00 98.31 ? 187 LYS A C 1 Q65MG6 UNP 187 K +ATOM 1509 C CB . LYS A 1 187 ? -15.568 10.069 -12.767 1.00 98.31 ? 187 LYS A CB 1 Q65MG6 UNP 187 K +ATOM 1510 O O . LYS A 1 187 ? -13.996 12.771 -12.298 1.00 98.31 ? 187 LYS A O 1 Q65MG6 UNP 187 K +ATOM 1511 C CG . LYS A 1 187 ? -16.144 9.319 -13.969 1.00 98.31 ? 187 LYS A CG 1 Q65MG6 UNP 187 K +ATOM 1512 C CD . LYS A 1 187 ? -17.463 8.645 -13.590 1.00 98.31 ? 187 LYS A CD 1 Q65MG6 UNP 187 K +ATOM 1513 C CE . LYS A 1 187 ? -17.874 7.743 -14.753 1.00 98.31 ? 187 LYS A CE 1 Q65MG6 UNP 187 K +ATOM 1514 N NZ . LYS A 1 187 ? -18.871 6.736 -14.331 1.00 98.31 ? 187 LYS A NZ 1 Q65MG6 UNP 187 K +ATOM 1515 N N . GLU A 1 188 ? -13.185 11.218 -10.892 1.00 97.75 ? 188 GLU A N 1 Q65MG6 UNP 188 E +ATOM 1516 C CA . GLU A 1 188 ? -12.703 12.138 -9.857 1.00 97.75 ? 188 GLU A CA 1 Q65MG6 UNP 188 E +ATOM 1517 C C . GLU A 1 188 ? -11.264 12.624 -10.133 1.00 97.75 ? 188 GLU A C 1 Q65MG6 UNP 188 E +ATOM 1518 C CB . GLU A 1 188 ? -12.837 11.459 -8.484 1.00 97.75 ? 188 GLU A CB 1 Q65MG6 UNP 188 E +ATOM 1519 O O . GLU A 1 188 ? -10.718 13.400 -9.352 1.00 97.75 ? 188 GLU A O 1 Q65MG6 UNP 188 E +ATOM 1520 C CG . GLU A 1 188 ? -14.288 11.092 -8.108 1.00 97.75 ? 188 GLU A CG 1 Q65MG6 UNP 188 E +ATOM 1521 C CD . GLU A 1 188 ? -15.188 12.249 -7.652 1.00 97.75 ? 188 GLU A CD 1 Q65MG6 UNP 188 E +ATOM 1522 O OE1 . GLU A 1 188 ? -16.428 12.034 -7.621 1.00 97.75 ? 188 GLU A OE1 1 Q65MG6 UNP 188 E +ATOM 1523 O OE2 . GLU A 1 188 ? -14.684 13.313 -7.241 1.00 97.75 ? 188 GLU A OE2 1 Q65MG6 UNP 188 E +ATOM 1524 N N . GLY A 1 189 ? -10.635 12.179 -11.231 1.00 97.88 ? 189 GLY A N 1 Q65MG6 UNP 189 G +ATOM 1525 C CA . GLY A 1 189 ? -9.281 12.570 -11.635 1.00 97.88 ? 189 GLY A CA 1 Q65MG6 UNP 189 G +ATOM 1526 C C . GLY A 1 189 ? -8.163 11.982 -10.769 1.00 97.88 ? 189 GLY A C 1 Q65MG6 UNP 189 G +ATOM 1527 O O . GLY A 1 189 ? -7.022 12.428 -10.851 1.00 97.88 ? 189 GLY A O 1 Q65MG6 UNP 189 G +ATOM 1528 N N . VAL A 1 190 ? -8.468 10.986 -9.935 1.00 98.44 ? 190 VAL A N 1 Q65MG6 UNP 190 V +ATOM 1529 C CA . VAL A 1 190 ? -7.533 10.394 -8.964 1.00 98.44 ? 190 VAL A CA 1 Q65MG6 UNP 190 V +ATOM 1530 C C . VAL A 1 190 ? -6.496 9.485 -9.639 1.00 98.44 ? 190 VAL A C 1 Q65MG6 UNP 190 V +ATOM 1531 C CB . VAL A 1 190 ? -8.331 9.643 -7.875 1.00 98.44 ? 190 VAL A CB 1 Q65MG6 UNP 190 V +ATOM 1532 O O . VAL A 1 190 ? -5.409 9.293 -9.096 1.00 98.44 ? 190 VAL A O 1 Q65MG6 UNP 190 V +ATOM 1533 C CG1 . VAL A 1 190 ? -7.440 8.899 -6.877 1.00 98.44 ? 190 VAL A CG1 1 Q65MG6 UNP 190 V +ATOM 1534 C CG2 . VAL A 1 190 ? -9.213 10.602 -7.063 1.00 98.44 ? 190 VAL A CG2 1 Q65MG6 UNP 190 V +ATOM 1535 N N . LEU A 1 191 ? -6.812 8.931 -10.814 1.00 98.44 ? 191 LEU A N 1 Q65MG6 UNP 191 L +ATOM 1536 C CA . LEU A 1 191 ? -5.940 8.005 -11.551 1.00 98.44 ? 191 LEU A CA 1 Q65MG6 UNP 191 L +ATOM 1537 C C . LEU A 1 191 ? -4.922 8.695 -12.478 1.00 98.44 ? 191 LEU A C 1 Q65MG6 UNP 191 L +ATOM 1538 C CB . LEU A 1 191 ? -6.813 7.003 -12.321 1.00 98.44 ? 191 LEU A CB 1 Q65MG6 UNP 191 L +ATOM 1539 O O . LEU A 1 191 ? -4.071 8.024 -13.066 1.00 98.44 ? 191 LEU A O 1 Q65MG6 UNP 191 L +ATOM 1540 C CG . LEU A 1 191 ? -7.758 6.139 -11.466 1.00 98.44 ? 191 LEU A CG 1 Q65MG6 UNP 191 L +ATOM 1541 C CD1 . LEU A 1 191 ? -8.342 5.011 -12.308 1.00 98.44 ? 191 LEU A CD1 1 Q65MG6 UNP 191 L +ATOM 1542 C CD2 . LEU A 1 191 ? -7.079 5.528 -10.234 1.00 98.44 ? 191 LEU A CD2 1 Q65MG6 UNP 191 L +ATOM 1543 N N . GLU A 1 192 ? -4.979 10.027 -12.575 1.00 97.25 ? 192 GLU A N 1 Q65MG6 UNP 192 E +ATOM 1544 C CA . GLU A 1 192 ? -4.061 10.860 -13.364 1.00 97.25 ? 192 GLU A CA 1 Q65MG6 UNP 192 E +ATOM 1545 C C . GLU A 1 192 ? -3.887 10.386 -14.821 1.00 97.25 ? 192 GLU A C 1 Q65MG6 UNP 192 E +ATOM 1546 C CB . GLU A 1 192 ? -2.698 11.007 -12.659 1.00 97.25 ? 192 GLU A CB 1 Q65MG6 UNP 192 E +ATOM 1547 O O . GLU A 1 192 ? -2.767 10.123 -15.253 1.00 97.25 ? 192 GLU A O 1 Q65MG6 UNP 192 E +ATOM 1548 C CG . GLU A 1 192 ? -2.734 11.671 -11.281 1.00 97.25 ? 192 GLU A CG 1 Q65MG6 UNP 192 E +ATOM 1549 C CD . GLU A 1 192 ? -1.325 11.764 -10.667 1.00 97.25 ? 192 GLU A CD 1 Q65MG6 UNP 192 E +ATOM 1550 O OE1 . GLU A 1 192 ? -1.259 11.801 -9.417 1.00 97.25 ? 192 GLU A OE1 1 Q65MG6 UNP 192 E +ATOM 1551 O OE2 . GLU A 1 192 ? -0.318 11.787 -11.431 1.00 97.25 ? 192 GLU A OE2 1 Q65MG6 UNP 192 E +ATOM 1552 N N . ASP A 1 193 ? -4.978 10.277 -15.591 1.00 94.12 ? 193 ASP A N 1 Q65MG6 UNP 193 D +ATOM 1553 C CA . ASP A 1 193 ? -4.939 9.862 -17.009 1.00 94.12 ? 193 ASP A CA 1 Q65MG6 UNP 193 D +ATOM 1554 C C . ASP A 1 193 ? -4.314 8.460 -17.199 1.00 94.12 ? 193 ASP A C 1 Q65MG6 UNP 193 D +ATOM 1555 C CB . ASP A 1 193 ? -4.307 10.980 -17.864 1.00 94.12 ? 193 ASP A CB 1 Q65MG6 UNP 193 D +ATOM 1556 O O . ASP A 1 193 ? -3.357 8.238 -17.956 1.00 94.12 ? 193 ASP A O 1 Q65MG6 UNP 193 D +ATOM 1557 C CG . ASP A 1 193 ? -4.315 10.657 -19.361 1.00 94.12 ? 193 ASP A CG 1 Q65MG6 UNP 193 D +ATOM 1558 O OD1 . ASP A 1 193 ? -5.417 10.418 -19.897 1.00 94.12 ? 193 ASP A OD1 1 Q65MG6 UNP 193 D +ATOM 1559 O OD2 . ASP A 1 193 ? -3.212 10.647 -19.969 1.00 94.12 ? 193 ASP A OD2 1 Q65MG6 UNP 193 D +ATOM 1560 N N . GLY A 1 194 ? -4.821 7.497 -16.422 1.00 95.12 ? 194 GLY A N 1 Q65MG6 UNP 194 G +ATOM 1561 C CA . GLY A 1 194 ? -4.404 6.094 -16.472 1.00 95.12 ? 194 GLY A CA 1 Q65MG6 UNP 194 G +ATOM 1562 C C . GLY A 1 194 ? -2.956 5.830 -16.045 1.00 95.12 ? 194 GLY A C 1 Q65MG6 UNP 194 G +ATOM 1563 O O . GLY A 1 194 ? -2.421 4.757 -16.334 1.00 95.12 ? 194 GLY A O 1 Q65MG6 UNP 194 G +ATOM 1564 N N . ARG A 1 195 ? -2.286 6.783 -15.382 1.00 98.12 ? 195 ARG A N 1 Q65MG6 UNP 195 R +ATOM 1565 C CA . ARG A 1 195 ? -0.955 6.561 -14.784 1.00 98.12 ? 195 ARG A CA 1 Q65MG6 UNP 195 R +ATOM 1566 C C . ARG A 1 195 ? -1.029 5.629 -13.584 1.00 98.12 ? 195 ARG A C 1 Q65MG6 UNP 195 R +ATOM 1567 C CB . ARG A 1 195 ? -0.352 7.892 -14.334 1.00 98.12 ? 195 ARG A CB 1 Q65MG6 UNP 195 R +ATOM 1568 O O . ARG A 1 195 ? -0.093 4.866 -13.341 1.00 98.12 ? 195 ARG A O 1 Q65MG6 UNP 195 R +ATOM 1569 C CG . ARG A 1 195 ? 0.023 8.779 -15.525 1.00 98.12 ? 195 ARG A CG 1 Q65MG6 UNP 195 R +ATOM 1570 C CD . ARG A 1 195 ? 0.530 10.125 -15.011 1.00 98.12 ? 195 ARG A CD 1 Q65MG6 UNP 195 R +ATOM 1571 N NE . ARG A 1 195 ? 1.915 9.995 -14.535 1.00 98.12 ? 195 ARG A NE 1 Q65MG6 UNP 195 R +ATOM 1572 N NH1 . ARG A 1 195 ? 2.038 11.923 -13.291 1.00 98.12 ? 195 ARG A NH1 1 Q65MG6 UNP 195 R +ATOM 1573 N NH2 . ARG A 1 195 ? 3.867 10.658 -13.697 1.00 98.12 ? 195 ARG A NH2 1 Q65MG6 UNP 195 R +ATOM 1574 C CZ . ARG A 1 195 ? 2.591 10.875 -13.839 1.00 98.12 ? 195 ARG A CZ 1 Q65MG6 UNP 195 R +ATOM 1575 N N . PHE A 1 196 ? -2.140 5.685 -12.859 1.00 98.81 ? 196 PHE A N 1 Q65MG6 UNP 196 F +ATOM 1576 C CA . PHE A 1 196 ? -2.409 4.859 -11.697 1.00 98.81 ? 196 PHE A CA 1 Q65MG6 UNP 196 F +ATOM 1577 C C . PHE A 1 196 ? -3.692 4.054 -11.865 1.00 98.81 ? 196 PHE A C 1 Q65MG6 UNP 196 F +ATOM 1578 C CB . PHE A 1 196 ? -2.484 5.745 -10.453 1.00 98.81 ? 196 PHE A CB 1 Q65MG6 UNP 196 F +ATOM 1579 O O . PHE A 1 196 ? -4.583 4.427 -12.620 1.00 98.81 ? 196 PHE A O 1 Q65MG6 UNP 196 F +ATOM 1580 C CG . PHE A 1 196 ? -1.182 6.427 -10.097 1.00 98.81 ? 196 PHE A CG 1 Q65MG6 UNP 196 F +ATOM 1581 C CD1 . PHE A 1 196 ? -0.186 5.724 -9.394 1.00 98.81 ? 196 PHE A CD1 1 Q65MG6 UNP 196 F +ATOM 1582 C CD2 . PHE A 1 196 ? -0.978 7.773 -10.445 1.00 98.81 ? 196 PHE A CD2 1 Q65MG6 UNP 196 F +ATOM 1583 C CE1 . PHE A 1 196 ? 1.003 6.374 -9.021 1.00 98.81 ? 196 PHE A CE1 1 Q65MG6 UNP 196 F +ATOM 1584 C CE2 . PHE A 1 196 ? 0.212 8.421 -10.077 1.00 98.81 ? 196 PHE A CE2 1 Q65MG6 UNP 196 F +ATOM 1585 C CZ . PHE A 1 196 ? 1.198 7.724 -9.359 1.00 98.81 ? 196 PHE A CZ 1 Q65MG6 UNP 196 F +ATOM 1586 N N . ASP A 1 197 ? -3.798 2.974 -11.101 1.00 98.69 ? 197 ASP A N 1 Q65MG6 UNP 197 D +ATOM 1587 C CA . ASP A 1 197 ? -5.053 2.269 -10.873 1.00 98.69 ? 197 ASP A CA 1 Q65MG6 UNP 197 D +ATOM 1588 C C . ASP A 1 197 ? -5.126 1.782 -9.417 1.00 98.69 ? 197 ASP A C 1 Q65MG6 UNP 197 D +ATOM 1589 C CB . ASP A 1 197 ? -5.222 1.146 -11.908 1.00 98.69 ? 197 ASP A CB 1 Q65MG6 UNP 197 D +ATOM 1590 O O . ASP A 1 197 ? -4.117 1.731 -8.702 1.00 98.69 ? 197 ASP A O 1 Q65MG6 UNP 197 D +ATOM 1591 C CG . ASP A 1 197 ? -6.685 0.810 -12.182 1.00 98.69 ? 197 ASP A CG 1 Q65MG6 UNP 197 D +ATOM 1592 O OD1 . ASP A 1 197 ? -7.559 1.156 -11.353 1.00 98.69 ? 197 ASP A OD1 1 Q65MG6 UNP 197 D +ATOM 1593 O OD2 . ASP A 1 197 ? -6.955 0.247 -13.258 1.00 98.69 ? 197 ASP A OD2 1 Q65MG6 UNP 197 D +ATOM 1594 N N . ILE A 1 198 ? -6.323 1.451 -8.939 1.00 98.75 ? 198 ILE A N 1 Q65MG6 UNP 198 I +ATOM 1595 C CA . ILE A 1 198 ? -6.535 0.975 -7.573 1.00 98.75 ? 198 ILE A CA 1 Q65MG6 UNP 198 I +ATOM 1596 C C . ILE A 1 198 ? -5.881 -0.395 -7.377 1.00 98.75 ? 198 ILE A C 1 Q65MG6 UNP 198 I +ATOM 1597 C CB . ILE A 1 198 ? -8.036 1.002 -7.198 1.00 98.75 ? 198 ILE A CB 1 Q65MG6 UNP 198 I +ATOM 1598 O O . ILE A 1 198 ? -6.127 -1.325 -8.133 1.00 98.75 ? 198 ILE A O 1 Q65MG6 UNP 198 I +ATOM 1599 C CG1 . ILE A 1 198 ? -8.285 0.592 -5.729 1.00 98.75 ? 198 ILE A CG1 1 Q65MG6 UNP 198 I +ATOM 1600 C CG2 . ILE A 1 198 ? -8.917 0.127 -8.108 1.00 98.75 ? 198 ILE A CG2 1 Q65MG6 UNP 198 I +ATOM 1601 C CD1 . ILE A 1 198 ? -7.659 1.546 -4.707 1.00 98.75 ? 198 ILE A CD1 1 Q65MG6 UNP 198 I +ATOM 1602 N N . SER A 1 199 ? -5.058 -0.546 -6.338 1.00 98.81 ? 199 SER A N 1 Q65MG6 UNP 199 S +ATOM 1603 C CA . SER A 1 199 ? -4.525 -1.852 -5.934 1.00 98.81 ? 199 SER A CA 1 Q65MG6 UNP 199 S +ATOM 1604 C C . SER A 1 199 ? -5.316 -2.411 -4.753 1.00 98.81 ? 199 SER A C 1 Q65MG6 UNP 199 S +ATOM 1605 C CB . SER A 1 199 ? -3.034 -1.725 -5.618 1.00 98.81 ? 199 SER A CB 1 Q65MG6 UNP 199 S +ATOM 1606 O O . SER A 1 199 ? -5.924 -3.475 -4.838 1.00 98.81 ? 199 SER A O 1 Q65MG6 UNP 199 S +ATOM 1607 O OG . SER A 1 199 ? -2.555 -2.940 -5.097 1.00 98.81 ? 199 SER A OG 1 Q65MG6 UNP 199 S +ATOM 1608 N N . VAL A 1 200 ? -5.351 -1.667 -3.645 1.00 98.94 ? 200 VAL A N 1 Q65MG6 UNP 200 V +ATOM 1609 C CA . VAL A 1 200 ? -5.970 -2.105 -2.388 1.00 98.94 ? 200 VAL A CA 1 Q65MG6 UNP 200 V +ATOM 1610 C C . VAL A 1 200 ? -6.385 -0.897 -1.551 1.00 98.94 ? 200 VAL A C 1 Q65MG6 UNP 200 V +ATOM 1611 C CB . VAL A 1 200 ? -5.013 -3.063 -1.642 1.00 98.94 ? 200 VAL A CB 1 Q65MG6 UNP 200 V +ATOM 1612 O O . VAL A 1 200 ? -5.859 0.201 -1.719 1.00 98.94 ? 200 VAL A O 1 Q65MG6 UNP 200 V +ATOM 1613 C CG1 . VAL A 1 200 ? -3.699 -2.406 -1.202 1.00 98.94 ? 200 VAL A CG1 1 Q65MG6 UNP 200 V +ATOM 1614 C CG2 . VAL A 1 200 ? -5.674 -3.738 -0.434 1.00 98.94 ? 200 VAL A CG2 1 Q65MG6 UNP 200 V +ATOM 1615 N N . MET A 1 201 ? -7.341 -1.072 -0.640 1.00 98.88 ? 201 MET A N 1 Q65MG6 UNP 201 M +ATOM 1616 C CA . MET A 1 201 ? -7.773 -0.021 0.283 1.00 98.88 ? 201 MET A CA 1 Q65MG6 UNP 201 M +ATOM 1617 C C . MET A 1 201 ? -7.387 -0.354 1.727 1.00 98.88 ? 201 MET A C 1 Q65MG6 UNP 201 M +ATOM 1618 C CB . MET A 1 201 ? -9.282 0.208 0.160 1.00 98.88 ? 201 MET A CB 1 Q65MG6 UNP 201 M +ATOM 1619 O O . MET A 1 201 ? -7.277 -1.521 2.113 1.00 98.88 ? 201 MET A O 1 Q65MG6 UNP 201 M +ATOM 1620 C CG . MET A 1 201 ? -9.764 0.542 -1.247 1.00 98.88 ? 201 MET A CG 1 Q65MG6 UNP 201 M +ATOM 1621 S SD . MET A 1 201 ? -11.560 0.774 -1.284 1.00 98.88 ? 201 MET A SD 1 Q65MG6 UNP 201 M +ATOM 1622 C CE . MET A 1 201 ? -11.782 0.950 -3.067 1.00 98.88 ? 201 MET A CE 1 Q65MG6 UNP 201 M +ATOM 1623 N N . ALA A 1 202 ? -7.242 0.679 2.554 1.00 98.94 ? 202 ALA A N 1 Q65MG6 UNP 202 A +ATOM 1624 C CA . ALA A 1 202 ? -6.998 0.545 3.981 1.00 98.94 ? 202 ALA A CA 1 Q65MG6 UNP 202 A +ATOM 1625 C C . ALA A 1 202 ? -7.774 1.588 4.785 1.00 98.94 ? 202 ALA A C 1 Q65MG6 UNP 202 A +ATOM 1626 C CB . ALA A 1 202 ? -5.496 0.644 4.246 1.00 98.94 ? 202 ALA A CB 1 Q65MG6 UNP 202 A +ATOM 1627 O O . ALA A 1 202 ? -7.825 2.761 4.431 1.00 98.94 ? 202 ALA A O 1 Q65MG6 UNP 202 A +ATOM 1628 N N . ALA A 1 203 ? -8.344 1.169 5.907 1.00 98.94 ? 203 ALA A N 1 Q65MG6 UNP 203 A +ATOM 1629 C CA . ALA A 1 203 ? -8.958 2.068 6.877 1.00 98.94 ? 203 ALA A CA 1 Q65MG6 UNP 203 A +ATOM 1630 C C . ALA A 1 203 ? -8.135 2.104 8.163 1.00 98.94 ? 203 ALA A C 1 Q65MG6 UNP 203 A +ATOM 1631 C CB . ALA A 1 203 ? -10.387 1.597 7.117 1.00 98.94 ? 203 ALA A CB 1 Q65MG6 UNP 203 A +ATOM 1632 O O . ALA A 1 203 ? -7.583 1.073 8.544 1.00 98.94 ? 203 ALA A O 1 Q65MG6 UNP 203 A +ATOM 1633 N N . PHE A 1 204 ? -8.101 3.253 8.839 1.00 98.94 ? 204 PHE A N 1 Q65MG6 UNP 204 F +ATOM 1634 C CA . PHE A 1 204 ? -7.402 3.464 10.107 1.00 98.94 ? 204 PHE A CA 1 Q65MG6 UNP 204 F +ATOM 1635 C C . PHE A 1 204 ? -8.278 4.253 11.088 1.00 98.94 ? 204 PHE A C 1 Q65MG6 UNP 204 F +ATOM 1636 C CB . PHE A 1 204 ? -6.069 4.190 9.878 1.00 98.94 ? 204 PHE A CB 1 Q65MG6 UNP 204 F +ATOM 1637 O O . PHE A 1 204 ? -8.969 5.203 10.705 1.00 98.94 ? 204 PHE A O 1 Q65MG6 UNP 204 F +ATOM 1638 C CG . PHE A 1 204 ? -5.105 3.480 8.948 1.00 98.94 ? 204 PHE A CG 1 Q65MG6 UNP 204 F +ATOM 1639 C CD1 . PHE A 1 204 ? -4.093 2.656 9.475 1.00 98.94 ? 204 PHE A CD1 1 Q65MG6 UNP 204 F +ATOM 1640 C CD2 . PHE A 1 204 ? -5.207 3.659 7.555 1.00 98.94 ? 204 PHE A CD2 1 Q65MG6 UNP 204 F +ATOM 1641 C CE1 . PHE A 1 204 ? -3.199 1.999 8.611 1.00 98.94 ? 204 PHE A CE1 1 Q65MG6 UNP 204 F +ATOM 1642 C CE2 . PHE A 1 204 ? -4.315 2.999 6.693 1.00 98.94 ? 204 PHE A CE2 1 Q65MG6 UNP 204 F +ATOM 1643 C CZ . PHE A 1 204 ? -3.316 2.162 7.220 1.00 98.94 ? 204 PHE A CZ 1 Q65MG6 UNP 204 F +ATOM 1644 N N . GLY A 1 205 ? -8.240 3.889 12.366 1.00 98.81 ? 205 GLY A N 1 Q65MG6 UNP 205 G +ATOM 1645 C CA . GLY A 1 205 ? -8.986 4.572 13.421 1.00 98.81 ? 205 GLY A CA 1 Q65MG6 UNP 205 G +ATOM 1646 C C . GLY A 1 205 ? -8.850 3.865 14.761 1.00 98.81 ? 205 GLY A C 1 Q65MG6 UNP 205 G +ATOM 1647 O O . GLY A 1 205 ? -7.837 3.230 15.029 1.00 98.81 ? 205 GLY A O 1 Q65MG6 UNP 205 G +ATOM 1648 N N . TYR A 1 206 ? -9.892 3.943 15.583 1.00 98.81 ? 206 TYR A N 1 Q65MG6 UNP 206 Y +ATOM 1649 C CA . TYR A 1 206 ? -9.968 3.238 16.861 1.00 98.81 ? 206 TYR A CA 1 Q65MG6 UNP 206 Y +ATOM 1650 C C . TYR A 1 206 ? -11.213 2.356 16.883 1.00 98.81 ? 206 TYR A C 1 Q65MG6 UNP 206 Y +ATOM 1651 C CB . TYR A 1 206 ? -9.962 4.266 17.993 1.00 98.81 ? 206 TYR A CB 1 Q65MG6 UNP 206 Y +ATOM 1652 O O . TYR A 1 206 ? -12.295 2.818 16.526 1.00 98.81 ? 206 TYR A O 1 Q65MG6 UNP 206 Y +ATOM 1653 C CG . TYR A 1 206 ? -8.729 5.151 17.977 1.00 98.81 ? 206 TYR A CG 1 Q65MG6 UNP 206 Y +ATOM 1654 C CD1 . TYR A 1 206 ? -7.517 4.682 18.524 1.00 98.81 ? 206 TYR A CD1 1 Q65MG6 UNP 206 Y +ATOM 1655 C CD2 . TYR A 1 206 ? -8.778 6.421 17.371 1.00 98.81 ? 206 TYR A CD2 1 Q65MG6 UNP 206 Y +ATOM 1656 C CE1 . TYR A 1 206 ? -6.365 5.492 18.496 1.00 98.81 ? 206 TYR A CE1 1 Q65MG6 UNP 206 Y +ATOM 1657 C CE2 . TYR A 1 206 ? -7.632 7.238 17.357 1.00 98.81 ? 206 TYR A CE2 1 Q65MG6 UNP 206 Y +ATOM 1658 O OH . TYR A 1 206 ? -5.335 7.588 17.886 1.00 98.81 ? 206 TYR A OH 1 Q65MG6 UNP 206 Y +ATOM 1659 C CZ . TYR A 1 206 ? -6.424 6.778 17.918 1.00 98.81 ? 206 TYR A CZ 1 Q65MG6 UNP 206 Y +ATOM 1660 N N . ARG A 1 207 ? -11.064 1.077 17.237 1.00 98.25 ? 207 ARG A N 1 Q65MG6 UNP 207 R +ATOM 1661 C CA . ARG A 1 207 ? -12.165 0.104 17.285 1.00 98.25 ? 207 ARG A CA 1 Q65MG6 UNP 207 R +ATOM 1662 C C . ARG A 1 207 ? -13.245 0.534 18.284 1.00 98.25 ? 207 ARG A C 1 Q65MG6 UNP 207 R +ATOM 1663 C CB . ARG A 1 207 ? -11.606 -1.296 17.624 1.00 98.25 ? 207 ARG A CB 1 Q65MG6 UNP 207 R +ATOM 1664 O O . ARG A 1 207 ? -12.937 1.075 19.341 1.00 98.25 ? 207 ARG A O 1 Q65MG6 UNP 207 R +ATOM 1665 C CG . ARG A 1 207 ? -11.123 -1.415 19.087 1.00 98.25 ? 207 ARG A CG 1 Q65MG6 UNP 207 R +ATOM 1666 C CD . ARG A 1 207 ? -10.430 -2.738 19.417 1.00 98.25 ? 207 ARG A CD 1 Q65MG6 UNP 207 R +ATOM 1667 N NE . ARG A 1 207 ? -9.066 -2.797 18.875 1.00 98.25 ? 207 ARG A NE 1 Q65MG6 UNP 207 R +ATOM 1668 N NH1 . ARG A 1 207 ? -8.447 -4.800 19.827 1.00 98.25 ? 207 ARG A NH1 1 Q65MG6 UNP 207 R +ATOM 1669 N NH2 . ARG A 1 207 ? -7.105 -3.789 18.351 1.00 98.25 ? 207 ARG A NH2 1 Q65MG6 UNP 207 R +ATOM 1670 C CZ . ARG A 1 207 ? -8.212 -3.790 19.033 1.00 98.25 ? 207 ARG A CZ 1 Q65MG6 UNP 207 R +ATOM 1671 N N . VAL A 1 208 ? -14.500 0.195 17.990 1.00 98.00 ? 208 VAL A N 1 Q65MG6 UNP 208 V +ATOM 1672 C CA . VAL A 1 208 ? -15.630 0.315 18.944 1.00 98.00 ? 208 VAL A CA 1 Q65MG6 UNP 208 V +ATOM 1673 C C . VAL A 1 208 ? -15.968 -0.999 19.651 1.00 98.00 ? 208 VAL A C 1 Q65MG6 UNP 208 V +ATOM 1674 C CB . VAL A 1 208 ? -16.897 0.862 18.260 1.00 98.00 ? 208 VAL A CB 1 Q65MG6 UNP 208 V +ATOM 1675 O O . VAL A 1 208 ? -16.737 -1.018 20.608 1.00 98.00 ? 208 VAL A O 1 Q65MG6 UNP 208 V +ATOM 1676 C CG1 . VAL A 1 208 ? -16.696 2.328 17.898 1.00 98.00 ? 208 VAL A CG1 1 Q65MG6 UNP 208 V +ATOM 1677 C CG2 . VAL A 1 208 ? -17.276 0.080 16.994 1.00 98.00 ? 208 VAL A CG2 1 Q65MG6 UNP 208 V +ATOM 1678 N N . LYS A 1 209 ? -15.435 -2.120 19.157 1.00 95.50 ? 209 LYS A N 1 Q65MG6 UNP 209 K +ATOM 1679 C CA . LYS A 1 209 ? -15.705 -3.474 19.656 1.00 95.50 ? 209 LYS A CA 1 Q65MG6 UNP 209 K +ATOM 1680 C C . LYS A 1 209 ? -14.403 -4.255 19.715 1.00 95.50 ? 209 LYS A C 1 Q65MG6 UNP 209 K +ATOM 1681 C CB . LYS A 1 209 ? -16.717 -4.191 18.742 1.00 95.50 ? 209 LYS A CB 1 Q65MG6 UNP 209 K +ATOM 1682 O O . LYS A 1 209 ? -13.584 -4.149 18.803 1.00 95.50 ? 209 LYS A O 1 Q65MG6 UNP 209 K +ATOM 1683 C CG . LYS A 1 209 ? -18.134 -3.599 18.831 1.00 95.50 ? 209 LYS A CG 1 Q65MG6 UNP 209 K +ATOM 1684 C CD . LYS A 1 209 ? -19.041 -4.101 17.699 1.00 95.50 ? 209 LYS A CD 1 Q65MG6 UNP 209 K +ATOM 1685 C CE . LYS A 1 209 ? -20.378 -3.348 17.755 1.00 95.50 ? 209 LYS A CE 1 Q65MG6 UNP 209 K +ATOM 1686 N NZ . LYS A 1 209 ? -21.008 -3.210 16.418 1.00 95.50 ? 209 LYS A NZ 1 Q65MG6 UNP 209 K +ATOM 1687 N N . GLU A 1 210 ? -14.250 -5.080 20.745 1.00 95.88 ? 210 GLU A N 1 Q65MG6 UNP 210 E +ATOM 1688 C CA . GLU A 1 210 ? -13.115 -5.997 20.812 1.00 95.88 ? 210 GLU A CA 1 Q65MG6 UNP 210 E +ATOM 1689 C C . GLU A 1 210 ? -13.208 -7.079 19.726 1.00 95.88 ? 210 GLU A C 1 Q65MG6 UNP 210 E +ATOM 1690 C CB . GLU A 1 210 ? -12.964 -6.633 22.203 1.00 95.88 ? 210 GLU A CB 1 Q65MG6 UNP 210 E +ATOM 1691 O O . GLU A 1 210 ? -14.298 -7.598 19.443 1.00 95.88 ? 210 GLU A O 1 Q65MG6 UNP 210 E +ATOM 1692 C CG . GLU A 1 210 ? -12.489 -5.639 23.273 1.00 95.88 ? 210 GLU A CG 1 Q65MG6 UNP 210 E +ATOM 1693 C CD . GLU A 1 210 ? -11.193 -4.894 22.890 1.00 95.88 ? 210 GLU A CD 1 Q65MG6 UNP 210 E +ATOM 1694 O OE1 . GLU A 1 210 ? -11.071 -3.722 23.288 1.00 95.88 ? 210 GLU A OE1 1 Q65MG6 UNP 210 E +ATOM 1695 O OE2 . GLU A 1 210 ? -10.360 -5.445 22.124 1.00 95.88 ? 210 GLU A OE2 1 Q65MG6 UNP 210 E +ATOM 1696 N N . PRO A 1 211 ? -12.080 -7.437 19.091 1.00 94.12 ? 211 PRO A N 1 Q65MG6 UNP 211 P +ATOM 1697 C CA . PRO A 1 211 ? -12.063 -8.462 18.073 1.00 94.12 ? 211 PRO A CA 1 Q65MG6 UNP 211 P +ATOM 1698 C C . PRO A 1 211 ? -12.232 -9.847 18.676 1.00 94.12 ? 211 PRO A C 1 Q65MG6 UNP 211 P +ATOM 1699 C CB . PRO A 1 211 ? -10.714 -8.320 17.381 1.00 94.12 ? 211 PRO A CB 1 Q65MG6 UNP 211 P +ATOM 1700 O O . PRO A 1 211 ? -11.897 -10.125 19.826 1.00 94.12 ? 211 PRO A O 1 Q65MG6 UNP 211 P +ATOM 1701 C CG . PRO A 1 211 ? -9.799 -7.808 18.488 1.00 94.12 ? 211 PRO A CG 1 Q65MG6 UNP 211 P +ATOM 1702 C CD . PRO A 1 211 ? -10.735 -6.927 19.309 1.00 94.12 ? 211 PRO A CD 1 Q65MG6 UNP 211 P +ATOM 1703 N N . ARG A 1 212 ? -12.669 -10.773 17.825 1.00 93.50 ? 212 ARG A N 1 Q65MG6 UNP 212 R +ATOM 1704 C CA . ARG A 1 212 ? -12.575 -12.197 18.138 1.00 93.50 ? 212 ARG A CA 1 Q65MG6 UNP 212 R +ATOM 1705 C C . ARG A 1 212 ? -11.101 -12.611 18.263 1.00 93.50 ? 212 ARG A C 1 Q65MG6 UNP 212 R +ATOM 1706 C CB . ARG A 1 212 ? -13.294 -13.032 17.075 1.00 93.50 ? 212 ARG A CB 1 Q65MG6 UNP 212 R +ATOM 1707 O O . ARG A 1 212 ? -10.252 -12.021 17.582 1.00 93.50 ? 212 ARG A O 1 Q65MG6 UNP 212 R +ATOM 1708 C CG . ARG A 1 212 ? -14.790 -12.701 17.023 1.00 93.50 ? 212 ARG A CG 1 Q65MG6 UNP 212 R +ATOM 1709 C CD . ARG A 1 212 ? -15.474 -13.557 15.959 1.00 93.50 ? 212 ARG A CD 1 Q65MG6 UNP 212 R +ATOM 1710 N NE . ARG A 1 212 ? -16.880 -13.157 15.783 1.00 93.50 ? 212 ARG A NE 1 Q65MG6 UNP 212 R +ATOM 1711 N NH1 . ARG A 1 212 ? -17.352 -14.526 14.002 1.00 93.50 ? 212 ARG A NH1 1 Q65MG6 UNP 212 R +ATOM 1712 N NH2 . ARG A 1 212 ? -18.932 -13.165 14.798 1.00 93.50 ? 212 ARG A NH2 1 Q65MG6 UNP 212 R +ATOM 1713 C CZ . ARG A 1 212 ? -17.711 -13.616 14.865 1.00 93.50 ? 212 ARG A CZ 1 Q65MG6 UNP 212 R +ATOM 1714 N N . PRO A 1 213 ? -10.800 -13.658 19.053 1.00 94.69 ? 213 PRO A N 1 Q65MG6 UNP 213 P +ATOM 1715 C CA . PRO A 1 213 ? -9.460 -14.227 19.120 1.00 94.69 ? 213 PRO A CA 1 Q65MG6 UNP 213 P +ATOM 1716 C C . PRO A 1 213 ? -8.892 -14.543 17.733 1.00 94.69 ? 213 PRO A C 1 Q65MG6 UNP 213 P +ATOM 1717 C CB . PRO A 1 213 ? -9.588 -15.489 19.976 1.00 94.69 ? 213 PRO A CB 1 Q65MG6 UNP 213 P +ATOM 1718 O O . PRO A 1 213 ? -9.622 -14.918 16.809 1.00 94.69 ? 213 PRO A O 1 Q65MG6 UNP 213 P +ATOM 1719 C CG . PRO A 1 213 ? -10.781 -15.177 20.878 1.00 94.69 ? 213 PRO A CG 1 Q65MG6 UNP 213 P +ATOM 1720 C CD . PRO A 1 213 ? -11.693 -14.363 19.965 1.00 94.69 ? 213 PRO A CD 1 Q65MG6 UNP 213 P +ATOM 1721 N N . LYS A 1 214 ? -7.572 -14.397 17.579 1.00 95.56 ? 214 LYS A N 1 Q65MG6 UNP 214 K +ATOM 1722 C CA . LYS A 1 214 ? -6.887 -14.732 16.329 1.00 95.56 ? 214 LYS A CA 1 Q65MG6 UNP 214 K +ATOM 1723 C C . LYS A 1 214 ? -7.026 -16.221 16.035 1.00 95.56 ? 214 LYS A C 1 Q65MG6 UNP 214 K +ATOM 1724 C CB . LYS A 1 214 ? -5.396 -14.360 16.404 1.00 95.56 ? 214 LYS A CB 1 Q65MG6 UNP 214 K +ATOM 1725 O O . LYS A 1 214 ? -6.695 -17.064 16.858 1.00 95.56 ? 214 LYS A O 1 Q65MG6 UNP 214 K +ATOM 1726 C CG . LYS A 1 214 ? -5.114 -12.856 16.342 1.00 95.56 ? 214 LYS A CG 1 Q65MG6 UNP 214 K +ATOM 1727 C CD . LYS A 1 214 ? -5.445 -12.249 14.971 1.00 95.56 ? 214 LYS A CD 1 Q65MG6 UNP 214 K +ATOM 1728 C CE . LYS A 1 214 ? -4.903 -10.824 14.879 1.00 95.56 ? 214 LYS A CE 1 Q65MG6 UNP 214 K +ATOM 1729 N NZ . LYS A 1 214 ? -5.500 -9.921 15.888 1.00 95.56 ? 214 LYS A NZ 1 Q65MG6 UNP 214 K +ATOM 1730 N N . THR A 1 215 ? -7.426 -16.529 14.810 1.00 96.62 ? 215 THR A N 1 Q65MG6 UNP 215 T +ATOM 1731 C CA . THR A 1 215 ? -7.402 -17.886 14.266 1.00 96.62 ? 215 THR A CA 1 Q65MG6 UNP 215 T +ATOM 1732 C C . THR A 1 215 ? -6.402 -17.944 13.121 1.00 96.62 ? 215 THR A C 1 Q65MG6 UNP 215 T +ATOM 1733 C CB . THR A 1 215 ? -8.799 -18.317 13.802 1.00 96.62 ? 215 THR A CB 1 Q65MG6 UNP 215 T +ATOM 1734 O O . THR A 1 215 ? -6.463 -17.128 12.198 1.00 96.62 ? 215 THR A O 1 Q65MG6 UNP 215 T +ATOM 1735 C CG2 . THR A 1 215 ? -9.795 -18.340 14.962 1.00 96.62 ? 215 THR A CG2 1 Q65MG6 UNP 215 T +ATOM 1736 O OG1 . THR A 1 215 ? -9.293 -17.415 12.833 1.00 96.62 ? 215 THR A OG1 1 Q65MG6 UNP 215 T +ATOM 1737 N N . ARG A 1 216 ? -5.467 -18.891 13.159 1.00 97.62 ? 216 ARG A N 1 Q65MG6 UNP 216 R +ATOM 1738 C CA . ARG A 1 216 ? -4.498 -19.158 12.089 1.00 97.62 ? 216 ARG A CA 1 Q65MG6 UNP 216 R +ATOM 1739 C C . ARG A 1 216 ? -4.310 -20.665 11.959 1.00 97.62 ? 216 ARG A C 1 Q65MG6 UNP 216 R +ATOM 1740 C CB . ARG A 1 216 ? -3.150 -18.468 12.390 1.00 97.62 ? 216 ARG A CB 1 Q65MG6 UNP 216 R +ATOM 1741 O O . ARG A 1 216 ? -4.558 -21.393 12.916 1.00 97.62 ? 216 ARG A O 1 Q65MG6 UNP 216 R +ATOM 1742 C CG . ARG A 1 216 ? -3.192 -16.930 12.382 1.00 97.62 ? 216 ARG A CG 1 Q65MG6 UNP 216 R +ATOM 1743 C CD . ARG A 1 216 ? -3.536 -16.359 10.997 1.00 97.62 ? 216 ARG A CD 1 Q65MG6 UNP 216 R +ATOM 1744 N NE . ARG A 1 216 ? -3.550 -14.885 11.003 1.00 97.62 ? 216 ARG A NE 1 Q65MG6 UNP 216 R +ATOM 1745 N NH1 . ARG A 1 216 ? -5.744 -14.546 11.637 1.00 97.62 ? 216 ARG A NH1 1 Q65MG6 UNP 216 R +ATOM 1746 N NH2 . ARG A 1 216 ? -4.454 -12.806 11.159 1.00 97.62 ? 216 ARG A NH2 1 Q65MG6 UNP 216 R +ATOM 1747 C CZ . ARG A 1 216 ? -4.579 -14.098 11.267 1.00 97.62 ? 216 ARG A CZ 1 Q65MG6 UNP 216 R +ATOM 1748 N N . ARG A 1 217 ? -3.878 -21.115 10.778 1.00 97.81 ? 217 ARG A N 1 Q65MG6 UNP 217 R +ATOM 1749 C CA . ARG A 1 217 ? -3.316 -22.463 10.624 1.00 97.81 ? 217 ARG A CA 1 Q65MG6 UNP 217 R +ATOM 1750 C C . ARG A 1 217 ? -2.132 -22.631 11.577 1.00 97.81 ? 217 ARG A C 1 Q65MG6 UNP 217 R +ATOM 1751 C CB . ARG A 1 217 ? -2.879 -22.701 9.172 1.00 97.81 ? 217 ARG A CB 1 Q65MG6 UNP 217 R +ATOM 1752 O O . ARG A 1 217 ? -1.482 -21.641 11.919 1.00 97.81 ? 217 ARG A O 1 Q65MG6 UNP 217 R +ATOM 1753 C CG . ARG A 1 217 ? -4.082 -22.971 8.260 1.00 97.81 ? 217 ARG A CG 1 Q65MG6 UNP 217 R +ATOM 1754 C CD . ARG A 1 217 ? -3.599 -23.336 6.854 1.00 97.81 ? 217 ARG A CD 1 Q65MG6 UNP 217 R +ATOM 1755 N NE . ARG A 1 217 ? -4.708 -23.809 6.005 1.00 97.81 ? 217 ARG A NE 1 Q65MG6 UNP 217 R +ATOM 1756 N NH1 . ARG A 1 217 ? -3.456 -24.241 4.128 1.00 97.81 ? 217 ARG A NH1 1 Q65MG6 UNP 217 R +ATOM 1757 N NH2 . ARG A 1 217 ? -5.641 -24.688 4.120 1.00 97.81 ? 217 ARG A NH2 1 Q65MG6 UNP 217 R +ATOM 1758 C CZ . ARG A 1 217 ? -4.597 -24.240 4.760 1.00 97.81 ? 217 ARG A CZ 1 Q65MG6 UNP 217 R +ATOM 1759 N N . ALA A 1 218 ? -1.876 -23.865 11.998 1.00 98.06 ? 218 ALA A N 1 Q65MG6 UNP 218 A +ATOM 1760 C CA . ALA A 1 218 ? -0.698 -24.168 12.799 1.00 98.06 ? 218 ALA A CA 1 Q65MG6 UNP 218 A +ATOM 1761 C C . ALA A 1 218 ? 0.583 -23.909 11.984 1.00 98.06 ? 218 ALA A C 1 Q65MG6 UNP 218 A +ATOM 1762 C CB . ALA A 1 218 ? -0.814 -25.599 13.328 1.00 98.06 ? 218 ALA A CB 1 Q65MG6 UNP 218 A +ATOM 1763 O O . ALA A 1 218 ? 0.559 -23.934 10.751 1.00 98.06 ? 218 ALA A O 1 Q65MG6 UNP 218 A +ATOM 1764 N N . LEU A 1 219 ? 1.687 -23.598 12.670 1.00 97.75 ? 219 LEU A N 1 Q65MG6 UNP 219 L +ATOM 1765 C CA . LEU A 1 219 ? 2.924 -23.148 12.022 1.00 97.75 ? 219 LEU A CA 1 Q65MG6 UNP 219 L +ATOM 1766 C C . LEU A 1 219 ? 3.521 -24.220 11.099 1.00 97.75 ? 219 LEU A C 1 Q65MG6 UNP 219 L +ATOM 1767 C CB . LEU A 1 219 ? 3.928 -22.734 13.114 1.00 97.75 ? 219 LEU A CB 1 Q65MG6 UNP 219 L +ATOM 1768 O O . LEU A 1 219 ? 3.979 -23.911 10.004 1.00 97.75 ? 219 LEU A O 1 Q65MG6 UNP 219 L +ATOM 1769 C CG . LEU A 1 219 ? 5.163 -21.983 12.582 1.00 97.75 ? 219 LEU A CG 1 Q65MG6 UNP 219 L +ATOM 1770 C CD1 . LEU A 1 219 ? 4.771 -20.643 11.952 1.00 97.75 ? 219 LEU A CD1 1 Q65MG6 UNP 219 L +ATOM 1771 C CD2 . LEU A 1 219 ? 6.124 -21.710 13.739 1.00 97.75 ? 219 LEU A CD2 1 Q65MG6 UNP 219 L +ATOM 1772 N N . ASP A 1 220 ? 3.447 -25.479 11.513 1.00 97.69 ? 220 ASP A N 1 Q65MG6 UNP 220 D +ATOM 1773 C CA . ASP A 1 220 ? 3.890 -26.663 10.770 1.00 97.69 ? 220 ASP A CA 1 Q65MG6 UNP 220 D +ATOM 1774 C C . ASP A 1 220 ? 3.098 -26.916 9.476 1.00 97.69 ? 220 ASP A C 1 Q65MG6 UNP 220 D +ATOM 1775 C CB . ASP A 1 220 ? 3.795 -27.878 11.711 1.00 97.69 ? 220 ASP A CB 1 Q65MG6 UNP 220 D +ATOM 1776 O O . ASP A 1 220 ? 3.588 -27.575 8.564 1.00 97.69 ? 220 ASP A O 1 Q65MG6 UNP 220 D +ATOM 1777 C CG . ASP A 1 220 ? 2.367 -28.211 12.181 1.00 97.69 ? 220 ASP A CG 1 Q65MG6 UNP 220 D +ATOM 1778 O OD1 . ASP A 1 220 ? 1.505 -27.297 12.180 1.00 97.69 ? 220 ASP A OD1 1 Q65MG6 UNP 220 D +ATOM 1779 O OD2 . ASP A 1 220 ? 2.145 -29.369 12.585 1.00 97.69 ? 220 ASP A OD2 1 Q65MG6 UNP 220 D +ATOM 1780 N N . GLN A 1 221 ? 1.895 -26.352 9.347 1.00 98.06 ? 221 GLN A N 1 Q65MG6 UNP 221 Q +ATOM 1781 C CA . GLN A 1 221 ? 1.107 -26.422 8.113 1.00 98.06 ? 221 GLN A CA 1 Q65MG6 UNP 221 Q +ATOM 1782 C C . GLN A 1 221 ? 1.538 -25.392 7.062 1.00 98.06 ? 221 GLN A C 1 Q65MG6 UNP 221 Q +ATOM 1783 C CB . GLN A 1 221 ? -0.381 -26.225 8.428 1.00 98.06 ? 221 GLN A CB 1 Q65MG6 UNP 221 Q +ATOM 1784 O O . GLN A 1 221 ? 1.094 -25.472 5.916 1.00 98.06 ? 221 GLN A O 1 Q65MG6 UNP 221 Q +ATOM 1785 C CG . GLN A 1 221 ? -0.930 -27.282 9.389 1.00 98.06 ? 221 GLN A CG 1 Q65MG6 UNP 221 Q +ATOM 1786 C CD . GLN A 1 221 ? -2.421 -27.100 9.642 1.00 98.06 ? 221 GLN A CD 1 Q65MG6 UNP 221 Q +ATOM 1787 N NE2 . GLN A 1 221 ? -3.165 -28.180 9.727 1.00 98.06 ? 221 GLN A NE2 1 Q65MG6 UNP 221 Q +ATOM 1788 O OE1 . GLN A 1 221 ? -2.956 -26.001 9.761 1.00 98.06 ? 221 GLN A OE1 1 Q65MG6 UNP 221 Q +ATOM 1789 N N . ILE A 1 222 ? 2.327 -24.386 7.452 1.00 97.56 ? 222 ILE A N 1 Q65MG6 UNP 222 I +ATOM 1790 C CA . ILE A 1 222 ? 2.724 -23.265 6.585 1.00 97.56 ? 222 ILE A CA 1 Q65MG6 UNP 222 I +ATOM 1791 C C . ILE A 1 222 ? 4.243 -23.058 6.510 1.00 97.56 ? 222 ILE A C 1 Q65MG6 UNP 222 I +ATOM 1792 C CB . ILE A 1 222 ? 1.983 -21.966 6.980 1.00 97.56 ? 222 ILE A CB 1 Q65MG6 UNP 222 I +ATOM 1793 O O . ILE A 1 222 ? 4.698 -22.268 5.689 1.00 97.56 ? 222 ILE A O 1 Q65MG6 UNP 222 I +ATOM 1794 C CG1 . ILE A 1 222 ? 2.338 -21.507 8.411 1.00 97.56 ? 222 ILE A CG1 1 Q65MG6 UNP 222 I +ATOM 1795 C CG2 . ILE A 1 222 ? 0.459 -22.141 6.816 1.00 97.56 ? 222 ILE A CG2 1 Q65MG6 UNP 222 I +ATOM 1796 C CD1 . ILE A 1 222 ? 1.817 -20.111 8.769 1.00 97.56 ? 222 ILE A CD1 1 Q65MG6 UNP 222 I +ATOM 1797 N N . VAL A 1 223 ? 5.025 -23.768 7.328 1.00 98.25 ? 223 VAL A N 1 Q65MG6 UNP 223 V +ATOM 1798 C CA . VAL A 1 223 ? 6.492 -23.740 7.325 1.00 98.25 ? 223 VAL A CA 1 Q65MG6 UNP 223 V +ATOM 1799 C C . VAL A 1 223 ? 7.019 -25.135 7.017 1.00 98.25 ? 223 VAL A C 1 Q65MG6 UNP 223 V +ATOM 1800 C CB . VAL A 1 223 ? 7.057 -23.224 8.665 1.00 98.25 ? 223 VAL A CB 1 Q65MG6 UNP 223 V +ATOM 1801 O O . VAL A 1 223 ? 6.716 -26.094 7.722 1.00 98.25 ? 223 VAL A O 1 Q65MG6 UNP 223 V +ATOM 1802 C CG1 . VAL A 1 223 ? 8.592 -23.232 8.672 1.00 98.25 ? 223 VAL A CG1 1 Q65MG6 UNP 223 V +ATOM 1803 C CG2 . VAL A 1 223 ? 6.612 -21.782 8.935 1.00 98.25 ? 223 VAL A CG2 1 Q65MG6 UNP 223 V +ATOM 1804 N N . LYS A 1 224 ? 7.857 -25.233 5.984 1.00 97.75 ? 224 LYS A N 1 Q65MG6 UNP 224 K +ATOM 1805 C CA . LYS A 1 224 ? 8.618 -26.435 5.645 1.00 97.75 ? 224 LYS A CA 1 Q65MG6 UNP 224 K +ATOM 1806 C C . LYS A 1 224 ? 10.104 -26.095 5.672 1.00 97.75 ? 224 LYS A C 1 Q65MG6 UNP 224 K +ATOM 1807 C CB . LYS A 1 224 ? 8.158 -26.961 4.277 1.00 97.75 ? 224 LYS A CB 1 Q65MG6 UNP 224 K +ATOM 1808 O O . LYS A 1 224 ? 10.533 -25.200 4.950 1.00 97.75 ? 224 LYS A O 1 Q65MG6 UNP 224 K +ATOM 1809 C CG . LYS A 1 224 ? 8.919 -28.231 3.870 1.00 97.75 ? 224 LYS A CG 1 Q65MG6 UNP 224 K +ATOM 1810 C CD . LYS A 1 224 ? 8.419 -28.767 2.525 1.00 97.75 ? 224 LYS A CD 1 Q65MG6 UNP 224 K +ATOM 1811 C CE . LYS A 1 224 ? 9.246 -29.999 2.149 1.00 97.75 ? 224 LYS A CE 1 Q65MG6 UNP 224 K +ATOM 1812 N NZ . LYS A 1 224 ? 8.856 -30.540 0.824 1.00 97.75 ? 224 LYS A NZ 1 Q65MG6 UNP 224 K +ATOM 1813 N N . TRP A 1 225 ? 10.866 -26.823 6.477 1.00 96.38 ? 225 TRP A N 1 Q65MG6 UNP 225 W +ATOM 1814 C CA . TRP A 1 225 ? 12.323 -26.733 6.504 1.00 96.38 ? 225 TRP A CA 1 Q65MG6 UNP 225 W +ATOM 1815 C C . TRP A 1 225 ? 12.916 -27.663 5.441 1.00 96.38 ? 225 TRP A C 1 Q65MG6 UNP 225 W +ATOM 1816 C CB . TRP A 1 225 ? 12.828 -27.028 7.921 1.00 96.38 ? 225 TRP A CB 1 Q65MG6 UNP 225 W +ATOM 1817 O O . TRP A 1 225 ? 12.416 -28.770 5.229 1.00 96.38 ? 225 TRP A O 1 Q65MG6 UNP 225 W +ATOM 1818 C CG . TRP A 1 225 ? 12.345 -26.045 8.948 1.00 96.38 ? 225 TRP A CG 1 Q65MG6 UNP 225 W +ATOM 1819 C CD1 . TRP A 1 225 ? 11.220 -26.159 9.692 1.00 96.38 ? 225 TRP A CD1 1 Q65MG6 UNP 225 W +ATOM 1820 C CD2 . TRP A 1 225 ? 12.957 -24.780 9.346 1.00 96.38 ? 225 TRP A CD2 1 Q65MG6 UNP 225 W +ATOM 1821 C CE2 . TRP A 1 225 ? 12.128 -24.166 10.332 1.00 96.38 ? 225 TRP A CE2 1 Q65MG6 UNP 225 W +ATOM 1822 C CE3 . TRP A 1 225 ? 14.133 -24.092 8.978 1.00 96.38 ? 225 TRP A CE3 1 Q65MG6 UNP 225 W +ATOM 1823 N NE1 . TRP A 1 225 ? 11.086 -25.052 10.508 1.00 96.38 ? 225 TRP A NE1 1 Q65MG6 UNP 225 W +ATOM 1824 C CH2 . TRP A 1 225 ? 13.619 -22.271 10.526 1.00 96.38 ? 225 TRP A CH2 1 Q65MG6 UNP 225 W +ATOM 1825 C CZ2 . TRP A 1 225 ? 12.441 -22.930 10.918 1.00 96.38 ? 225 TRP A CZ2 1 Q65MG6 UNP 225 W +ATOM 1826 C CZ3 . TRP A 1 225 ? 14.461 -22.852 9.561 1.00 96.38 ? 225 TRP A CZ3 1 Q65MG6 UNP 225 W +ATOM 1827 N N . VAL A 1 226 ? 13.942 -27.185 4.742 1.00 95.69 ? 226 VAL A N 1 Q65MG6 UNP 226 V +ATOM 1828 C CA . VAL A 1 226 ? 14.752 -27.963 3.800 1.00 95.69 ? 226 VAL A CA 1 Q65MG6 UNP 226 V +ATOM 1829 C C . VAL A 1 226 ? 16.185 -27.830 4.296 1.00 95.69 ? 226 VAL A C 1 Q65MG6 UNP 226 V +ATOM 1830 C CB . VAL A 1 226 ? 14.586 -27.465 2.348 1.00 95.69 ? 226 VAL A CB 1 Q65MG6 UNP 226 V +ATOM 1831 O O . VAL A 1 226 ? 16.751 -26.741 4.213 1.00 95.69 ? 226 VAL A O 1 Q65MG6 UNP 226 V +ATOM 1832 C CG1 . VAL A 1 226 ? 15.413 -28.314 1.374 1.00 95.69 ? 226 VAL A CG1 1 Q65MG6 UNP 226 V +ATOM 1833 C CG2 . VAL A 1 226 ? 13.118 -27.531 1.891 1.00 95.69 ? 226 VAL A CG2 1 Q65MG6 UNP 226 V +ATOM 1834 N N . GLU A 1 227 ? 16.694 -28.903 4.898 1.00 90.56 ? 227 GLU A N 1 Q65MG6 UNP 227 E +ATOM 1835 C CA . GLU A 1 227 ? 18.044 -29.014 5.470 1.00 90.56 ? 227 GLU A CA 1 Q65MG6 UNP 227 E +ATOM 1836 C C . GLU A 1 227 ? 18.998 -29.727 4.509 1.00 90.56 ? 227 GLU A C 1 Q65MG6 UNP 227 E +ATOM 1837 C CB . GLU A 1 227 ? 17.991 -29.729 6.837 1.00 90.56 ? 227 GLU A CB 1 Q65MG6 UNP 227 E +ATOM 1838 O O . GLU A 1 227 ? 18.528 -30.636 3.780 1.00 90.56 ? 227 GLU A O 1 Q65MG6 UNP 227 E +ATOM 1839 C CG . GLU A 1 227 ? 17.216 -28.944 7.915 1.00 90.56 ? 227 GLU A CG 1 Q65MG6 UNP 227 E +ATOM 1840 C CD . GLU A 1 227 ? 17.140 -29.647 9.290 1.00 90.56 ? 227 GLU A CD 1 Q65MG6 UNP 227 E +ATOM 1841 O OE1 . GLU A 1 227 ? 16.481 -29.068 10.187 1.00 90.56 ? 227 GLU A OE1 1 Q65MG6 UNP 227 E +ATOM 1842 O OE2 . GLU A 1 227 ? 17.701 -30.756 9.460 1.00 90.56 ? 227 GLU A OE2 1 Q65MG6 UNP 227 E +ATOM 1843 O OXT . GLU A 1 227 ? 20.177 -29.316 4.505 1.00 90.56 ? 227 GLU A OXT 1 Q65MG6 UNP 227 E +# diff --git a/tools/battery/models/AF-Q65MG6-F1-predicted_aligned_error_v6.json b/tools/battery/models/AF-Q65MG6-F1-predicted_aligned_error_v6.json new file mode 100644 index 000000000..d4ef8b786 --- /dev/null +++ b/tools/battery/models/AF-Q65MG6-F1-predicted_aligned_error_v6.json @@ -0,0 +1 @@ +[{"predicted_aligned_error":[[0,1,2,5,3,3,7,8,6,8,12,9,12,19,15,16,19,18,17,19,19,20,19,21,21,22,21,23,18,21,21,20,22,17,21,18,16,17,23,20,16,20,24,17,21,21,22,22,24,22,24,23,21,24,21,23,23,21,24,23,24,24,22,23,23,23,21,22,24,23,20,20,21,21,20,22,20,21,22,23,21,21,22,21,21,19,20,21,22,24,22,23,23,23,23,23,23,23,24,24,23,24,23,24,23,24,23,24,24,23,24,22,24,23,23,24,22,22,23,23,23,24,23,23,23,24,24,23,23,24,22,23,24,23,22,23,24,23,23,23,24,24,24,23,22,24,23,24,23,23,25,21,21,19,19,18,17,21,16,15,19,19,18,18,12,12,16,19,18,17,19,19,22,23,20,22,22,25,24,23,23,24,24,25,23,23,23,24,24,24,21,25,23,23,24,23,22,22,24,22,20,17,21,18,20,20,21,20,20,18,18,17,19,18,18,21,19,19,17,18,19,20,18,18,17,17,17],[1,0,1,2,2,2,3,4,4,5,6,7,6,10,10,10,9,12,8,10,9,9,10,10,11,9,12,10,12,13,11,11,11,10,12,10,9,11,11,9,10,13,12,9,13,11,12,13,14,12,14,11,11,13,12,12,12,11,13,13,13,13,13,12,13,13,12,12,13,13,11,11,11,10,11,11,10,11,11,13,12,13,12,10,13,10,13,12,12,13,13,13,14,14,14,13,13,13,14,14,15,14,13,14,14,13,13,14,14,13,14,13,15,14,14,15,14,13,13,14,13,14,14,13,13,16,15,14,13,15,13,14,14,14,13,14,14,14,13,14,15,14,13,13,13,13,13,13,12,12,13,11,12,10,11,10,9,12,10,9,8,10,9,9,7,9,9,11,11,10,10,10,12,12,13,13,13,13,13,13,14,15,14,14,13,14,13,14,14,13,13,14,14,14,14,14,13,13,12,12,11,10,10,11,11,12,12,10,10,12,11,10,13,12,11,11,13,13,8,11,12,10,11,10,11,9,10],[2,1,0,1,1,1,1,2,2,2,2,2,4,3,3,4,6,5,6,5,5,5,7,6,7,6,6,6,6,7,6,7,7,6,8,6,5,6,6,5,7,7,8,6,8,8,9,11,8,10,7,8,9,8,8,8,8,7,9,9,8,8,8,8,8,8,8,8,8,8,7,7,7,6,6,6,7,7,7,7,8,9,7,7,7,7,7,7,7,8,8,8,9,8,9,9,9,10,9,10,9,9,9,9,9,10,9,10,8,9,11,10,13,11,11,13,9,10,11,10,9,10,10,10,10,14,10,9,10,11,8,9,10,10,9,8,9,10,10,9,9,8,8,9,8,8,9,8,8,7,8,7,7,7,6,8,6,5,6,6,5,4,5,4,3,5,5,5,5,6,6,7,7,7,7,8,7,8,8,8,9,8,8,9,9,9,9,9,9,9,8,10,10,8,9,9,8,8,7,7,7,6,7,6,7,6,5,6,5,5,6,5,5,5,4,6,5,6,5,6,5,8,7,6,5,6,5],[4,1,1,0,1,1,1,1,1,2,2,2,2,3,2,3,3,3,4,4,4,5,5,5,6,5,6,5,5,6,6,6,4,4,5,5,4,4,4,4,4,5,5,4,7,5,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,8,7,6,8,8,6,7,5,5,6,5,5,6,6,5,6,6,5,5,6,6,6,6,5,6,7,7,9,7,7,8,8,8,9,9,8,8,8,8,7,7,8,7,6,6,7,7,8,8,8,8,8,8,7,9,8,9,9,8,8,9,8,8,7,8,7,8,8,7,7,7,8,9,8,9,9,7,7,7,7,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,4,4,4,3,3,4,3,4,4,4,5,5,5,5,6,7,7,7,7,8,7,7,8,8,8,8,8,8,9,7,7,8,9,9,8,7,7,6,5,5,5,5,5,5,5,5,5,4,4,4,5,4,4,4,4,4,5,5,4,5,5,5,5,5,5,5,5],[3,2,1,1,0,1,2,1,1,2,2,2,2,2,3,3,3,4,4,4,5,5,6,6,6,6,6,5,5,6,5,5,4,4,5,5,3,4,4,4,4,5,5,4,6,5,6,7,8,6,6,6,5,5,6,6,6,6,6,7,7,7,7,6,7,8,7,6,8,8,6,6,6,6,6,6,5,6,6,6,6,5,5,5,6,6,6,6,5,6,7,8,9,7,7,8,8,8,9,8,8,8,8,8,7,7,8,7,7,7,9,8,10,8,8,9,8,8,8,8,9,9,10,9,8,9,8,9,8,9,7,9,9,8,7,8,8,9,8,9,9,8,8,7,7,7,7,6,6,6,6,5,5,5,5,5,4,4,4,3,3,3,3,2,3,3,3,3,4,4,4,5,6,6,6,7,7,7,8,8,7,8,8,8,7,9,9,8,8,6,7,8,9,8,8,6,7,6,6,6,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,5,6,6,7,6,7,6,6],[3,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,5,5,4,4,5,5,4,4,4,3,4,4,3,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,6,6,6,6,5,5,5,5,5,6,6,6,5,5,5,5,5,5,4,5,5,5,4,4,4,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,3,3,3,3,3,3,4,3,4,4,4,4,5,5,4,4,5,5,4,5,5,5,5,5,5,5,6,5,5,4,4,4,4,3,4,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4],[3,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,5,5,5,5,5,5,5,4,4,5,5,4,5,5,5,5,4,4,5,4,5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,4,5,4,4,4,4,4,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,2,2,2,3,2,2,3,3,3,3,3,3,3,3],[5,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,3,3,3,4,4,4,4,3,4,4,4,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,5,5,4,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,5,4,5,5,4,4,4,4,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,5,4,5,4,4,5,5,5,4,4,4,4,4,3,3,3,3,2,2,2,2,2,3,2,2,3,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3],[4,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,2,3,3,3,2,2,3,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,4,5,4,5,5,5,5,4,4,5,4,5,4,5,5,4,4,4,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,4,4,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,5,4,4,3,4,3,3,3,3,3,3,2,2,2,2,3,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4],[3,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,2,2,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4,3,3,4,4,3,4,4,4,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,3,4,3,3,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3],[3,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,4,4,3,3,4,3,3,3,3,3,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,4,3,4,3,4,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,4,4,4,4,3,3,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3],[3,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,4,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3],[3,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3],[3,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,3,3],[3,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,3,3],[3,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,2,2,1,1,2,2,1,2,1,2,2,2,2,2,2,2,2,3,3,3],[4,3,3,2,2,2,2,2,1,2,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,5,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4],[5,4,4,4,3,3,3,3,2,2,2,2,2,2,2,1,1,0,1,2,2,2,3,4,4,4,4,4,4,5,5,4,4,4,4,3,3,4,4,3,4,5,4,4,5,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,4,4,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,6,6,7,6,7,7,6,6,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,6,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,6,5,5,5,5,4,4,4,3,2,2,2,2,2,3,3,2,3,2,2,3,2,2,3,3,4,4,4,4,4,4,4,5,5,6,6],[4,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,2,2,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,3,3,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,1,1,1,1,1,1,1,2,2,2,2,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,2,2,2,1,2,2,1,2,2,2,2,2,3,2,2,2,3,3,4,4],[4,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,4],[4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,0,1,2,1,1,2,2,2,2,2,3,2,2,3,3,2,3,3,3,2,2,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,2,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4],[5,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,5],[4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4],[4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,3,4,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4],[5,5,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,3,2,2,2,2,1,2,2,1,2,1,2,2,2,2,2,3,3,4,4,4,4,4,5,5,4,5,5,4,5,5,4,5,4,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,4,4,4,4,4,3,3,3,3,2,2,2,2,2,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,5,4,4,5,5,5,5,5],[6,5,5,5,5,4,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,1,1,1,1,0,1,1,1,2,2,2,2,2,2,3,3,3,3,4,3,4,4,4,5,5,5,5,5,5,5,4,4,4,3,3,3,3,2,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,1,2,1,2,2,3,3,4,4,4,5,5,5,5,5,5,5,6,6,6,6,6,5,6,6,5,6,6,5,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,5,6,5,6,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,4,4,4,3,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,3,3,3,2,2,1,1,2,1,2,3,3,3,3,4,4,4,4,5,5,6,5,6,6,6,7,6,7],[5,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,5,4,5,5,5,5,5,4,5,4,4,4,5,5,4,4,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,2,2,2,1,1,1,1,1,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5],[4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5],[4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4],[3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,2,3,3,3,2,3,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,4],[3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,2,3,3,2,3,3,2,2,2,2,3,3,3,4,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,1,2,2,2,2,2,2,2,2,3,3,3,2,2,2,3,3,3,3,3,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4],[4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,4,4,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,2,2,3,3,2,3,3,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4,4],[3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3],[3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,4],[3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,3,3,3,2,2,3,3,2,2,3,3,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3],[3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3],[3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3],[3,3,2,3,2,2,2,2,2,2,2,2,1,2,1,1,1,2,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3],[3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,3,3,3,3],[4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,3,3,4],[3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,2,2,3,3,3,4],[4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,4],[4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,2,2,2,2,2,2,2,2,3,2,3,2,3,3,2,3,3,2,2,3,3,3,3],[4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,2,2,2,3,2,3,3,2,2,3,3,3,3],[4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,2,2,2,2,3,3,3,3,2,3,3,3,2,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4],[4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,2,3,3,3,2,3,3,2,3,2,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3],[4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4],[5,5,5,4,4,4,4,4,3,4,3,4,3,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,3,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4],[6,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,3,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,1,2,2,2,3,3,3,2,2,3,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],[5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,2,2,1,1,2,2,2,2,2,1,1,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,3,3,3,4,4,4],[5,4,4,3,3,3,3,3,3,3,2,3,2,2,3,2,2,3,2,2,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4],[4,4,3,3,3,3,3,3,3,2,2,3,2,3,3,2,2,2,3,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4],[5,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,3,4,4,3,3,4,4,4,4],[4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,3,4,3,4,4,4],[4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4],[4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3],[4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,1,2,2,2,2,1,1,2,1,1,1,2,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,4],[4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4],[5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,2,2,2,2,2,3,2,2,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,3,3,4,3,3,3,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4],[4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,4,4,4,3,4,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4],[5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,2,2,2,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,3,2,2,2,3,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4],[5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,1,2,1,2,1,1,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,4,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,3,2,2,2,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,5],[4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4],[4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,3,4],[4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,3,3,4,4,4,4,4],[4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,4,3,4],[4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,4],[5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,4,3,3,4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,1,2,2,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,3,3,3,4,4,4,4],[5,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,3,3,2,2,2,3,2,2,3,2,2,2,2,2,2,3,2,2,2,3,2,2,3,3,2,2,3,3,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,4],[5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,3,2,3,3,3,3,3,3,3,3,4,4,4],[5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,2,3,2,2,2,3,2,2,3,2,2,2,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,1,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,1,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,4,3,3,3,4,4,4,4],[6,5,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,4,3,4,3,3,3,3,3,3,2,2,2,3,2,2,3,2,2,2,3,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,3,4,4,5,5],[5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,1,1,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,3,3,2,2,3,2,2,2,3,2,2,3,3,2,2,2,2,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,4,3,3,5,5,5,5],[5,5,4,4,4,4,3,3,3,3,3,3,3,2,3,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,2,2,2,3,2,2,3,2,2,3,2,2,2,2,3,2,2,3,2,2,3,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,4,3,3,3,4,4,4,5],[5,5,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,1,2,2,2,2,2,3,2,3,3,3,3,3,4,4,3,3,3,3,4,4,3,4,4,4,4,4,4,4,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,4,4,4,5],[5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,1,2,1,1,1,1,1,0,1,1,1,1,1,1,2,1,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,3,3,2,3,3,3,4,4,4,4,4,4,4,5,5,5],[4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4,4],[4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,4,4,4],[5,4,4,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,2,1,2,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,3,2,3,3,3,3,3,3,4,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,5],[4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,4,4,4],[4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,4,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4],[4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4],[4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,2,2,1,2,2,2,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,3],[3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,3],[4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,4],[3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,3,3,3],[4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,2,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,3,4],[3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,2,1,1,2,1,1,2,2,1,1,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3],[4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,2,1,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4],[4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4],[5,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,2,3,2,2,2,2,2,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,4,4,4,4],[6,5,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,3,3,3,3,3,2,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,2,1,1,1,1,0,1,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,2,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,5],[7,6,6,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,5,4,5,5,5,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,3,4,3,3,3,4,3,3,3,3,3,4,4,4,3,4,4,4,4,4,3,3,3,3,2,2,1,1,1,0,1,1,1,2,2,1,2,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,2,2,2,3,3,3,3,2,2,3,2,2,2,3,3,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,3,3,3,3,3,3,3,3,2,3,2,2,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,5,4,5,5,4,5,5,5,4,4,4,5,5,5,5,5,4,5,5,5,5,5],[6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,3,3,3,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,2,2,2,3,2,2,2,2,2,2,2,1,2,2,2,2,3,3,3,3,4,4,4,5,4,4,5,5,4,4,4,4,4,4,4,4,5,5,4,5,4,5,5],[6,5,5,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,3,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,2,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,1,1,2,2,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4],[6,6,6,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,3,3,3,3,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,5,5,4,4,4,4,5,4,5,5,4,5,5,5,5,5],[7,6,7,6,6,6,6,5,5,6,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,4,3,3,3,2,2,3,2,2,2,3,3,3,3,4,4,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,3,3,3,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,2,3,3,2,2,3,2,1,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,3,3,4,4,4,4,4,5,5,5,5,5,5,6,4,5,4,4,4,3,4,4,3,3,3,4,3,3,4,4,3,3,4,4,4,3,3,3,3,2,2,2,2,3,3,3,3,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,6,5,5,7,6,6,5],[9,9,10,9,9,9,8,8,9,8,8,8,8,7,7,8,7,7,7,7,7,8,8,8,8,8,8,8,8,8,9,8,8,8,8,7,7,6,6,6,5,5,5,4,5,4,3,3,4,3,5,3,3,4,4,5,6,7,8,8,7,7,7,7,7,7,7,7,7,7,7,7,8,7,7,7,7,8,8,8,8,8,8,7,6,5,4,5,4,3,3,2,2,2,2,1,1,0,1,1,2,2,2,2,3,3,3,4,5,4,5,4,5,4,4,4,4,3,4,3,2,3,3,3,3,3,2,2,3,3,2,2,3,3,3,3,3,2,3,4,4,4,3,3,4,3,3,4,4,3,4,4,4,5,5,5,5,6,7,7,7,8,7,7,7,8,8,8,7,7,7,6,7,6,7,7,7,6,6,6,6,6,5,6,5,5,5,5,5,5,5,4,4,4,3,4,5,5,5,5,6,7,7,8,8,8,8,8,8,8,8,8,8,7,7,7,8,7,8,8,8,7,7,8,8,7,8],[7,6,7,6,5,5,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,5,5,5,4,5,5,4,4,4,4,3,4,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,5,5,4,4,4,4,3,4,4,4,3,3,3,3,3,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,3,3,3,3,3,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5,5,5,5,5],[6,6,6,5,5,5,5,5,4,4,4,5,4,4,4,4,4,4,5,4,4,4,4,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,1,2,2,2,1,1,1,2,1,1,0,1,2,1,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,2,2,2,2,2,2,3,3,3,3,2,2,3,2,2,2,2,2,2,3,2,2,2,3,2,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,3,3,2,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5],[5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,3,3,4,4,4,4],[5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,1,1,2,2,2,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,4],[5,5,5,4,4,4,4,4,4,4,4,4,3,4,4,4,3,3,3,4,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,5],[5,5,5,4,4,4,4,4,3,3,3,4,3,3,4,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,3,3,3,3,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,4,4,4,4,4,4,5,4,5,4,4,4,4,4,4,5],[5,4,4,4,4,4,4,4,4,3,3,4,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,3,3,3,4,3,3,3,4,3,3,3,4,3,3,4,4,3,4,4,3,3,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4],[5,5,4,4,4,4,4,4,3,4,3,4,3,3,4,4,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,2,2,2,1,1,1,1,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,5],[5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,3,3,4,4,4,4,3,4,3,3,4,4,3,3,4,3,3,4,4,3,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,4,4,4,4,5,5,5,5,4,4,4,4,4,5],[5,5,5,5,5,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,4,5,5,5,4,5,4,4,4,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,3,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,6,5,5,5,5,6,5,6,6,5,5,5,6,5,6],[5,5,4,4,4,4,4,4,3,3,3,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,3,2,3,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,2,2,3,2,2,3,3,3,3,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,5,4,4,4,4,4,4,5],[6,5,5,5,5,5,5,5,4,5,4,5,4,4,5,4,4,4,5,4,4,4,5,5,4,5,4,4,4,4,3,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,2,2,2,1,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,2,3,3,2,2,3,3,2,2,3,3,2,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,4,4,5,5,5,5,5,6,5,6,6,6,6,6],[5,5,5,5,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,4,4,4,4,4,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,5,4,4,4,3,3,3,3,3,3,2,2,3,3,2,2,2,3,2,3,3,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,6,5,5],[6,6,6,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,4,4,4,4,4,4,3,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,5,5,5,4,5,5,4,5,5,5,4,5,5,4,5,5,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,3,3,2,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,3,4,4,3,3,4,3,2,3,4,3,3,4,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,4,4,4,4,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,4,3,4,4,4,4,4,5,5,5,6,6,5,6,5,6,5,5,6,6,6,6,6,6,6,6,6,6,6,6],[7,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,4,4,5,5,5,6,6,5,5,5,6,5,6,6,6,5,5,5,5,6,6,5,5,6,6,5,5,5,5,4,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,4,5,5,5,4,5,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,5,5,5,6,5,6,7,7,7,7,7,6,7,6,6,6,6,6,6,5,6,5,5,5,5],[7,7,7,7,7,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,6,6,5,5,5,5,5,5,5,4,4,4,4,3,4,3,4,3,3,2,2,2,3,3,3,4,4,5,5,5,6,6,7,7,6,6,6,6,6,6,7,6,6,6,6,6,6,6,6,6,6,6,6,6,5,6,5,5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,4,3,3,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,6,6,6,6,6,6,6,6,6,5,6,6,6,6,5,5,6,5,5,5,6,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,5,5,6,5,6,7,6,7,7,7,7,7,7,6,7,7,7,7,7,7,7,6,6,6,6,6,7],[8,8,9,7,7,8,7,7,6,7,6,7,6,6,7,6,6,6,6,7,7,7,7,7,7,7,7,6,6,6,6,6,6,5,5,5,5,4,5,5,4,4,4,4,4,3,3,2,2,2,3,3,4,4,4,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,7,6,6,7,6,6,6,7,6,6,6,6,6,5,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,6,5,5,5,6,6,6,6,6,6,7,6,6,6,5,5,5,6,5,6,5,5,6,5,5,5,6,5,5,5,5,5,5,4,4,4,4,4,4,4,5,4,5,5,5,5,6,6,6,7,7,8,8,7,8,7,6,7,6,6,7,7,7,6,6,6,6,6,6,7],[6,6,6,5,5,5,5,5,4,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,6,5,5,5,5,4,5,4,4,4,4,4,3,4,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,5,5,5,5,4,5,5,4,5,5,5,4,5,4,4,5,5,5,5,5,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,6,5,6,6,6,5,5,5,5,5,6,5,5,5,5,4,5,5,5],[6,6,5,5,5,5,5,5,4,4,4,5,4,4,5,5,4,4,4,5,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,4,4,5,5,4,4,5,4,4,4,4,4,4,4,5,4,5,5,5,5,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,3,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,4,4,4,3,4,4,4,3,4,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,5,5,5],[6,6,7,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,5,5,5,5,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,5,4,4,5,5,5,5,4,4,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,5,5,5,6,6,6,6,6,6,5,6,5,5,5,5,5,6,5,5,5,5,5,6],[7,7,7,6,6,6,6,6,5,6,5,6,5,5,6,6,5,6,6,6,6,6,6,6,7,6,6,6,6,5,5,5,5,5,5,5,4,4,4,4,3,3,4,3,4,3,2,2,2,2,2,3,3,4,4,4,4,5,5,5,5,5,5,5,5,6,5,6,6,5,5,6,6,5,7,6,6,6,6,6,6,6,5,5,5,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,6,5,6,6,5,5,4,5,5,5,5,5,5,5,5,5,4,5,5,4,4,5,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,5,5,6,6,6,6,7,6,6,7,6,6,6,5,6,6,5,5,5,5,5,5,5,5,5],[7,6,7,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,5,5,5,5,6,5,5,5,5,4,5,4,4,4,4,4,3,4,4,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,4,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,3,4,4,4,3,3,4,4,3,3,4,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,6,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6],[7,6,6,6,6,5,5,5,5,5,4,5,5,5,5,5,4,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,2,2,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,2,3,3,3,3,4,3,3,3,4,4,4,4,4,4,4,5,4,5,5,5,5,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,6,5,6,6,5,5,5,5,5,5,5,5,5,5,4,5,5,5,5],[8,8,8,7,7,7,7,7,7,8,7,7,7,7,7,7,6,7,7,7,7,7,7,7,8,8,8,7,7,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,5,3,3,2,3,3,3,3,4,4,5,6,5,6,6,7,7,7,7,6,7,7,6,7,7,7,7,7,7,6,7,7,7,7,7,7,7,7,6,6,6,5,5,5,4,4,4,3,3,3,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,2,1,2,2,1,2,3,2,2,2,3,3,3,3,2,3,3,4,4,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,6,6,6,6,6,7,7,7,7,6,6,7,6,6,7,6,6,7,6,6,6,6,6,6,5,6,6,6,5,5,5,4,5,5,4,4,5,5,5,6,5,6,6,6,7,7,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,7,8,7],[9,8,9,8,8,8,8,7,7,8,7,7,7,8,7,7,7,7,7,6,7,7,7,7,7,8,7,7,7,7,7,6,6,6,6,6,6,5,5,6,5,5,5,6,5,4,4,3,4,4,4,4,5,5,6,5,6,6,6,7,7,7,7,6,7,7,7,7,7,7,7,8,7,6,7,7,7,7,7,7,7,7,6,6,6,6,6,5,5,5,4,4,4,4,3,2,2,2,3,3,3,3,2,3,3,3,3,3,4,3,3,3,3,2,2,3,2,2,2,2,1,1,0,1,1,2,2,2,2,2,2,2,2,2,3,3,3,2,3,4,4,5,4,4,4,5,4,4,5,5,5,5,6,6,5,6,6,7,6,6,7,7,6,7,7,7,7,7,6,7,6,8,6,7,7,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,7,7,7,7,7,7,7,7,8,8,7,8,7,7,7,7,7,7,8,7,8,7,7,7],[9,8,8,8,8,8,7,7,7,8,7,7,7,7,7,7,7,7,7,7,7,7,8,7,8,8,8,7,7,7,7,6,7,6,6,6,6,6,6,6,6,6,6,6,5,4,3,3,3,4,5,4,6,6,6,6,6,6,7,7,7,7,8,7,7,7,7,7,7,7,7,8,7,7,7,7,7,7,7,7,8,7,7,7,6,6,7,5,5,5,4,4,3,3,3,3,2,2,3,3,4,3,3,3,4,3,3,4,4,3,4,3,3,3,3,2,2,2,2,2,1,1,1,0,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,5,4,4,5,5,4,4,5,5,5,5,6,5,6,6,5,7,7,6,6,7,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,6,7,7,6,6,6,6,6,6,6,6,6,6,5,5,5,5,6,5,6,6,5,6,7,6,7,7,7,7,7,8,8,8,8,8,7,8,7,7,7,7,7,7,8,6,7,6,7,6],[7,7,7,7,7,6,6,6,6,5,5,6,5,5,6,6,5,5,5,5,6,6,6,6,7,7,6,6,6,6,6,5,6,5,6,5,5,5,5,5,5,4,4,3,4,3,2,2,3,2,3,3,4,5,5,5,5,5,6,6,6,6,6,6,6,6,5,5,6,6,5,6,6,5,6,6,6,6,6,6,6,6,5,5,5,4,4,4,4,4,4,3,3,3,2,2,2,2,3,3,3,2,2,3,3,2,3,3,4,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,5,4,4,5,5,5,5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,5,5,5,6,6,6,6,7,6,6,7,7,6,6,6,6,6,5,6,6,5,5,6,5,5,5],[7,7,7,6,6,6,6,5,5,5,5,5,5,4,5,5,5,4,5,5,5,5,5,6,6,6,6,5,5,6,5,5,5,5,5,5,4,5,5,4,4,4,4,3,3,2,2,2,2,2,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,3,3,3,2,2,2,2,2,2,3,3,3,3,3,4,3,4,4,4,4,4,4,5,5,4,5,5,5,5,5,5,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,4,4,5,5,5,5,6,6,5,5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5],[6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,4,3,3,3,3,3,2,2,2,1,2,2,2,2,2,3,3,3,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,3,3,4,4,4,4,4,5,4,4,4,4,4,3,3,3,4,4,3,3,3,4,3,3,3,4,3,3,4,4,3,3,3,3,3,2,3,2,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,5,4,4,4,4,4,5,4],[6,6,6,5,5,5,5,5,4,5,4,4,4,5,4,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,4,4,5,4,5,4,4,4,4,4,4,4,4,5,4,4,5,4,5,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,4,4,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,4,4,5,5,4,5],[6,6,6,5,5,5,5,5,4,5,4,5,4,4,4,5,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,5,5,5,4,5,5,4,4,5,4,4,4,4,4,5,5,4,4,5,5,5,5,4,4,4,3,3,3,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,4,4,4,4,5,5,5,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,4,4,3,4],[6,5,6,5,4,5,4,4,4,4,3,4,4,3,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,3,3,3,3,4,3,4],[6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,5,4,4,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,1,1,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,3,3,4,3,3,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,3,2,2,3,3,3,3,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],[9,9,9,9,8,8,8,8,8,8,8,8,7,8,9,8,8,9,8,8,8,9,8,8,9,8,9,8,8,8,7,6,7,6,6,6,6,5,5,6,5,4,4,4,4,3,3,2,3,3,3,4,4,4,5,5,6,6,7,7,8,8,7,7,8,8,7,8,8,7,7,9,9,7,8,8,8,8,9,8,8,8,7,7,6,5,4,4,4,4,4,3,3,3,3,2,2,2,3,3,4,3,3,3,3,3,3,4,4,3,3,3,4,4,4,3,3,3,3,3,2,3,3,3,2,2,2,1,1,1,1,0,1,2,3,2,2,2,2,3,3,4,3,3,4,4,4,4,5,5,5,4,5,5,4,5,6,5,5,7,7,6,6,8,7,7,8,8,8,7,7,6,7,7,8,7,6,6,5,7,6,5,6,6,5,5,6,6,5,5,5,4,5,4,4,4,6,5,5,5,6,7,7,7,8,8,8,8,8,8,9,9,9,8,9,9,8,8,8,8,9,6,7,7,7,8,6],[9,8,9,8,7,8,7,7,7,8,7,7,7,6,7,7,7,7,7,7,7,7,7,7,8,8,8,7,7,7,7,6,7,6,6,6,6,5,6,6,5,5,6,4,6,4,3,3,3,3,4,4,4,4,5,5,5,6,6,6,7,7,6,6,6,6,5,6,6,6,5,7,6,5,6,7,7,6,7,7,7,7,6,6,5,4,4,4,4,3,3,3,3,3,3,2,2,2,3,3,3,3,3,4,3,4,4,4,5,4,4,4,5,4,4,4,3,3,4,4,3,3,2,2,2,2,2,1,1,2,1,1,0,1,1,2,2,1,2,3,3,3,3,2,3,3,3,3,4,3,4,4,5,4,4,4,5,6,5,6,6,7,6,7,7,7,7,7,7,6,6,5,5,5,6,6,6,5,5,5,5,4,5,5,4,4,5,5,5,5,4,4,4,4,4,4,4,4,4,5,4,6,6,7,7,7,7,7,7,7,8,8,7,7,7,7,6,6,6,6,5,5,5,4,5,4,5],[7,6,7,6,5,6,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,5,5,5,6,6,5,5,5,5,5,5,5,5,4,5,4,4,4,4,3,4,4,3,3,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,4,5,4,4,4,4,5,4,5,4,4,4,4,4,4,5,5,5,5,4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,5,5,5,5,4,4,4,3,4,3,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,3,4,4,3,3,3,3,3,3,3,4,4,4,5,5,5,5,5,5,5,6,6,5,5,4,4,4,4,4,4,4,3,3,3,4,4,5],[7,7,8,6,6,6,6,5,5,6,5,5,5,5,4,5,5,4,4,4,4,4,5,5,5,6,6,5,5,6,5,5,5,4,5,5,4,4,4,4,3,3,4,4,3,3,2,2,2,2,3,2,3,3,3,3,4,4,5,5,5,5,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,5,5,4,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,1,1,2,2,2,2,2,2,2,2,2,3,3,3,4,4,4,4,5,4,4,4,6,5,5,5,4,4,4,3,3,3,4,3,3,3,4,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,4,4,4,5,5,5,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,3,4,4,3,5],[6,6,6,5,5,5,5,5,5,5,4,5,4,4,4,5,4,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,1,1,1,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,5,5,4,4,4,4,4,4,4,4,3,3,3,4,3,4],[6,5,5,4,4,4,4,4,4,4,3,4,3,3,3,4,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,4,3,4,4,3,3,3,3,4,4],[7,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,0,1,1,1,1,1,1,1,2,1,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,4,5,4],[7,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,4,4,5,5,5,6,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,3,4,3,3,3,3,2,2,3,2,3,3,3,3,3,4,4,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,5,4,5,5,5,5,5,5,5,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,0,1,2,2,2,1,2,2,2,2,2,2,3,3,3,4,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,3,3,3,2,3,3,2,3,3,3,3,4,4,4,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,4,5,5,5,5,5],[6,6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4],[5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,3,3,3,3,4,3,3,4,3,3,3,3,3,3,3,4,4,3,3,4,4,4,4],[5,5,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,2,2,2,2,2,2,3,3,3,3,3,2,3,3,2,3,3,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4],[5,4,4,4,3,3,3,3,3,2,2,3,3,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,1,1,1,2,2,2,2,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,3,3,3,3],[4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,2,3,3,3,3,3,2,3,3,3,3,3],[4,4,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,2,3,3,2,2,3,3,3,3],[4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3],[4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3],[4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,2,3,3,2,2,3,3,3,3],[4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3],[3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3],[3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3],[3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,2,2,1,1,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3],[3,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,1,2,1,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,1,1,2,2,1,2,2,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2],[3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,2,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3],[3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,2,1,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,1,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3],[3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,2,2,2,2,2,2,2,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3],[3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,2,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3],[3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3],[3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,1,1,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3],[3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,2,2,1,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3],[3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3],[3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3],[3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3],[3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3],[4,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,2,3,3,3,2,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,3,3,2,2,2,2,2,2,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,4],[3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,1,2,2,2,2,3,2,3,3,2,2,3,3,2,3,3,3,3,2,2,3,3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,3,3,4],[3,3,3,3,2,2,2,2,2,2,2,1,1,1,2,1,1,2,1,1,2,1,1,1,1,2,2,1,1,1,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,4,4,4,3,4,4,4,4,3,3,4,3,3,3,4,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,3,2,3,3,2,3,3,2,2,3,3,3,3,2,3,3,3,3,3,2,3,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4],[3,3,3,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3],[3,3,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,2,2,1,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3],[3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,2,2,2,2,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3],[3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,2,1,1,2,1,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,2,2,2,1,1,2,2,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3],[3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,1,2,2,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3],[4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3],[4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,2,2,1,1,1,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,3,3,3,3,3,4,4],[5,4,4,4,4,3,3,3,3,3,2,3,2,2,2,2,2,2,1,2,2,2,2,2,2,3,3,3,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,1,1,1,1,1,2,2,2,2,2,2,3,3,2,3,3,2,3,2,3,3,3,3,3,3,3,3,4,4,4],[5,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,4,4,4,4,3,3,4,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,3,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4],[5,4,4,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,4],[5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4,4],[5,4,4,4,4,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,3,2,3,3,2,2,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,4,4,4],[4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,4],[4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,3,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,4],[5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,3,2,2,2,3,3,3,2,2,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,4,4],[5,4,4,4,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4],[5,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,3,3,3,2,3,3,3,2,3,2,2,3,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,4],[5,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,2,2,3,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,3,2,3,2,3,3,3,3,3,3,3,3,4,3,4],[5,5,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,3,2,2,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,1,1,1,1,1,2,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,4,4,4,4,4],[5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,3,2,2,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,1,1,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5],[6,5,4,4,5,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,2,3,3,2,3,3,3,3,3,3,4,4,4,4,4,3,3,4,3,3,4,4,4,4,4,3,3,4,3,3,3,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,2,2,2,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,3,4,4,4,4,4,4,4,4,4,4,5,4,5],[6,6,5,5,5,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,3,2,2,2,3,3,2,3,3,2,2,2,2,2,1,2,1,2,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,3,2,2,3,3,2,2,3,3,2,2,2,2,2,2,1,2,2,2,2,2,2,2,3,3,3,2,2,2,2,3,2,2,3,3,3,2,3,3,3,4,3,4,4,3,3,4,3,3,3,3,4,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,4,3,3,3,3,2,2,3,2,2,3,2,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,6,5,6],[5,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,3,3,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4],[5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,3,4,3,4,4,4,4,4,4,4,4,5,4,5],[6,6,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,4,4,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,3,2,2,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,1,2,2,2,2,2,2,3,2,3,3,3,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,4,4,3,3,4,4,3,3,4,4,4,4,3,3,3,3,2,2,3,2,2,2,2,3,2,3,3,3,3,3,3,3,3,3,3,3,4,4,3,4,4,4,4,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,1,1,2,2,1,1,1,0,1,2,1,1,1,2,2,2,2,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,5],[8,8,8,8,7,7,8,7,6,7,7,6,6,6,6,6,6,6,7,6,6,6,6,5,6,5,5,5,5,5,4,4,5,4,4,5,5,4,4,5,4,4,5,5,5,5,4,5,4,4,4,3,4,2,3,3,3,3,3,3,4,3,3,3,4,4,4,4,4,5,5,5,5,5,5,5,5,4,4,5,5,5,4,4,3,3,4,3,3,2,2,2,3,3,3,3,4,4,3,4,4,4,4,5,5,5,4,5,5,5,5,6,6,5,6,6,5,5,6,5,4,4,4,5,5,5,4,4,5,5,4,4,4,5,4,4,3,3,4,3,3,3,3,3,3,3,3,4,3,4,4,5,4,5,4,4,5,6,4,5,6,5,5,6,6,5,6,6,6,5,6,5,5,5,5,4,4,4,3,3,3,3,3,3,2,2,2,2,2,2,1,1,0,1,2,2,2,3,3,4,4,4,4,5,5,5,6,6,6,6,7,7,7,7,7,7,7,7,7,7,8,7,7,8,7,8,7],[8,7,7,7,7,6,5,6,6,5,5,6,5,5,5,5,5,5,4,5,4,5,5,5,5,5,5,5,5,5,4,4,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,2,2,2,2,2,3,3,3,3,4,3,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,5,4,4,4,5,4,4,4,5,4,3,3,2,2,1,1,2,2,2,2,2,3,3,3,3,2,2,3,3,3,3,3,4,3,3,4,4,4,4,5,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,3,2,2,3,3,3,4,4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,1,1,0,1,1,2,2,2,3,3,4,4,4,5,5,5,5,5,5,6,6,6,5,5,5,5,5,5,6,6,6,6,6,6,7,6],[5,5,4,4,4,4,3,4,3,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,3,3,3,3,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,1,1,1,1,1,1,0,1,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,3,3,3,4,4,4,4,4,4,3,4,4,4,5],[5,4,4,3,3,3,3,3,3,3,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,4],[4,4,4,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,2,1,2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,2,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,2,2,2,2,3,3,3,3,3,3,3,3,3,4],[4,4,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,2,2,2,3,3,3,3,2,3,3,3,3,4],[4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,2,2,1,2,2,2,2,1,1,1,1,1,1,1,1,2,2,2,2,2,1,2,2,1,1,2,1,1,1,1,1,2,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,2,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,4,4],[4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,1,2,2,1,1,2,1,1,1,2,1,1,1,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,3,3,2,2,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,1,1,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4],[3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,2,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,2,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3],[4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,2,2,1,1,2,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,2,2,1,2,2,2,2,1,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,2,2,3,3,3,4],[3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,2,2,2,1,2,2,2,2,2,2,1,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,3,3,3],[3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,3,2,2,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,2,1,1,2,2,2,2,1,1,2,2,2,2,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3],[4,3,3,3,3,2,2,2,2,2,2,2,2,1,2,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,2,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,2,3,3,4,3,4],[3,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,1,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,2,2,2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,2,2,3,2,2,3,3,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,2,2,2,2,2,2,2,2,1,1,1,1,0,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,2,3,3,3,3,4],[4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,2,2,2,3,3,2,3,3,3,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,3,4,4,4,3,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,1,1,2,1,1,1,1,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,2,2,2,2,2,1,1,1,0,1,1,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,5],[6,5,5,4,4,4,4,3,3,3,3,3,2,2,2,2,2,2,2,1,2,2,1,1,1,2,2,2,2,2,3,3,2,2,3,3,2,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,3,3,2,2,2,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,2,2,2,1,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,7,6,6,6,6,6,6,6,6,7,6,6,5,5,5,6,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,3,3,3,4,3,4,4,3,4,4,4,4,4,4,4,4,3,4,4,5,4,4,4,4,3,3,3,3,2,2,2,1,1,1,0,1,1,2,2,2,2,3,3,4,4,4,5,4,4,5,5,6,5,6],[6,5,5,5,5,5,4,4,4,4,3,3,3,3,2,2,2,2,3,3,3,2,2,2,2,2,2,3,3,4,4,4,4,4,4,5,4,5,5,5,5,6,6,6,6,6,7,7,7,6,7,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,5,4,5,4,4,5,3,3,3,3,3,3,3,2,3,2,3,4,4,4,5,5,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,8,7,7,7,7,7,8,8,7,8,9,7,8,8,8,7,8,8,8,7,8,7,8,7,8,7,7,7,8,7,8,7,7,8,7,7,7,7,7,6,7,7,6,6,6,6,6,5,6,5,5,5,5,4,4,4,4,4,3,3,3,3,2,2,3,3,4,4,5,5,5,5,6,5,5,5,6,5,6,6,6,5,5,6,6,6,6,7,6,7,6,6,6,5,5,5,4,3,3,2,2,1,1,0,1,1,2,2,2,3,3,4,4,4,5,5,5,5,6,6,7,7],[6,5,4,5,4,4,4,4,4,4,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,2,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,5,5,5,6,5,5,5,5,5,5,4,5,4,4,4,5,4,5,5,4,4,5,5,4,5,5,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,5,4,5,5,5,6,6,7,6,6,6,6,7,7,7,7,6,7,7,6,6,7,7,6,6,7,7,8,8,8,7,7,7,7,7,7,8,8,8,7,7,6,7,7,6,6,7,7,7,6,7,6,7,7,7,6,6,5,6,5,5,5,5,5,4,4,5,4,4,4,4,4,4,3,3,3,3,3,3,3,3,2,3,2,2,3,3,4,4,4,4,5,5,5,6,5,5,6,6,5,6,6,5,6,5,5,6,7,6,6,5,5,5,5,4,4,3,3,3,2,2,1,1,1,0,1,1,2,2,2,2,3,3,4,4,4,4,4,4,5,5,6],[7,6,5,5,6,5,5,4,4,4,3,4,4,3,3,2,2,2,3,2,2,3,3,3,4,4,3,4,4,5,6,5,5,5,6,5,5,6,6,6,5,6,6,6,6,6,6,7,7,7,7,6,7,6,6,6,5,5,5,6,6,6,6,5,5,6,6,5,5,6,5,5,4,4,4,4,4,4,4,4,4,4,5,5,6,5,6,6,7,7,6,7,8,7,7,7,7,8,8,8,7,8,8,9,7,7,9,8,7,7,8,8,9,8,8,9,8,8,8,8,8,8,8,9,8,8,8,8,8,8,7,7,8,8,7,7,7,8,7,7,7,7,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,4,5,4,3,4,4,3,3,2,4,4,4,5,5,5,5,6,6,7,7,6,7,7,6,7,7,7,7,7,6,7,8,8,7,7,7,6,6,5,5,6,5,4,3,3,2,2,2,1,1,0,1,1,1,2,3,3,3,4,4,4,4,4,5,6,6,6],[6,6,5,5,5,5,4,4,4,4,3,3,3,3,2,2,3,2,3,2,3,3,3,3,4,4,4,4,4,6,6,6,5,5,6,6,5,6,7,6,5,7,7,6,7,6,7,7,9,7,7,7,7,7,7,6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,4,4,4,3,3,3,4,4,4,4,4,5,5,5,5,6,6,7,7,7,7,8,8,7,8,8,8,8,8,8,8,9,9,8,8,9,9,9,8,9,9,9,9,9,10,9,9,9,8,8,9,9,9,9,9,7,9,8,8,8,8,8,7,7,7,7,8,8,8,7,8,8,7,6,7,7,6,6,7,7,5,7,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,3,3,3,4,4,5,5,5,5,6,6,6,6,7,6,6,7,7,7,7,7,7,7,8,8,7,8,7,6,6,6,6,5,5,4,4,3,3,2,2,2,1,1,0,1,1,1,2,3,3,3,3,4,3,4,5,5,6,6],[6,5,4,4,4,4,4,3,4,3,3,3,3,2,2,2,2,2,2,3,2,3,3,3,4,4,4,4,4,5,5,5,4,4,5,5,4,5,5,4,4,5,5,4,5,5,5,6,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,5,6,5,5,5,6,5,4,4,4,4,3,3,4,4,4,4,4,4,4,4,5,4,5,5,5,6,6,7,6,6,7,6,7,7,7,7,6,7,7,6,6,7,8,7,7,7,7,8,7,8,7,7,7,7,7,7,8,8,8,7,6,6,7,7,6,6,7,7,6,5,6,6,7,6,7,6,6,6,6,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,4,3,3,4,3,3,3,3,3,3,3,4,4,4,5,6,5,6,6,6,6,6,6,6,7,7,6,7,6,6,7,7,6,6,6,6,5,5,4,4,4,4,3,3,3,2,3,2,1,1,1,0,1,1,1,2,2,2,3,3,2,3,3,4,4,5],[6,5,4,4,4,5,4,3,3,3,2,2,3,2,2,3,2,2,2,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,5,4,7,5,5,5,4,5,5,4,5,4,5,5,6,6,5,5,5,5,5,5,5,5,5,6,5,5,6,5,5,5,5,5,5,5,5,4,3,4,4,4,4,4,5,4,4,4,4,4,4,5,5,5,5,5,5,5,6,6,6,5,6,6,6,7,6,7,6,7,6,6,6,6,6,7,7,6,7,7,7,7,7,7,7,6,6,7,7,7,6,7,6,6,6,6,6,5,5,6,6,5,6,6,5,6,6,5,5,5,6,5,6,5,5,5,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,4,3,3,4,5,5,5,6,5,6,6,6,6,6,6,6,6,6,6,7,6,6,6,6,5,5,4,4,4,4,4,3,3,3,3,3,2,2,2,1,1,0,1,1,2,2,2,3,2,3,3,4,4,4,5],[6,5,4,4,4,4,4,4,3,3,3,3,3,3,2,2,2,2,3,3,3,3,4,4,4,4,4,4,5,5,6,5,5,5,5,5,4,5,5,5,4,5,5,4,5,5,5,6,6,5,5,5,5,5,6,6,6,6,6,7,6,6,6,5,5,5,5,5,6,5,4,4,4,4,4,3,4,4,5,4,5,4,5,5,4,5,5,5,5,6,6,6,7,6,6,6,6,7,6,7,7,6,7,8,7,6,7,7,6,6,6,7,7,7,7,7,7,7,7,6,6,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,6,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4,5,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,4,5,5,4,4,5,6,6,5,6,6,6,6,7,7,7,7,7,7,7,7,6,7,6,6,5,4,5,3,4,3,4,3,3,3,3,3,2,2,2,1,1,0,1,1,2,2,3,2,2,3,3,4,4,4],[5,4,3,3,3,3,3,2,3,3,2,2,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,3,4,3,3,4,4,3,3,3,3,4,4,4,4,3,3,4,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,4,4,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,5,5,4,5,5,4,4,5,5,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,2,3,2,3,2,2,2,2,2,2,2,2,2,3,2,3,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,5,4,4,5,5,4,4,4,4,3,3,3,2,2,3,3,3,3,2,3,3,2,2,2,1,1,1,0,1,1,1,2,1,1,2,2,2,3,3],[5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,2,2,2,2,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,3,4,4,3,3,3,3,4,4,4,5,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,3,3,4,4,4,4,4,5,5,4,4,5,5,6,6,5,5,6,5,5,4,5,6,6,5,5,5,5,6,6,6,6,6,5,5,5,6,6,6,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,3,2,2,2,3,2,3,3,4,3,4,4,4,4,5,5,5,5,5,5,6,6,5,6,6,5,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,2,1,1,1,0,1,1,1,1,1,1,2,2,3,3],[5,4,3,3,3,3,3,3,3,2,2,3,2,2,2,2,2,2,2,3,3,3,4,4,4,4,4,4,4,5,5,4,4,4,5,4,4,4,4,4,3,4,4,4,3,4,4,4,4,4,5,4,4,4,4,5,5,4,5,6,5,5,5,4,4,5,5,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,6,5,5,6,6,5,5,6,6,5,5,5,5,5,6,6,5,6,6,5,5,5,6,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,5,5,5,5,5,5,6,5,5,6,6,5,5,5,4,4,4,3,4,3,3,4,4,3,3,3,3,3,2,2,2,2,1,1,1,0,1,1,1,1,1,1,2,2,2],[4,4,3,3,3,3,2,2,3,3,2,2,2,2,2,2,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,4,4,3,3,4,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,5,5,5,5,5,5,4,4,5,4,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,3,4,3,4,3,4,4,4,4,4,4,4,4,5,5,5,5,4,5,5,4,4,5,5,5,5,5,5,5,6,5,6,5,5,4,4,4,5,5,4,4,4,4,4,4,4,4,4,4,3,4,3,4,4,4,4,4,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,2,3,3,2,3,3,3,3,3,3,3,2,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,3,3,3,3,3,3,3,4,4,3,3,3,3,2,2,2,2,1,1,1,1,0,1,1,1,1,1,1,2,2],[5,4,4,3,3,3,3,3,3,3,2,2,3,2,2,3,3,3,3,3,4,4,4,4,5,5,4,5,5,5,6,5,4,5,5,4,5,5,4,4,4,4,4,4,5,4,5,5,5,5,6,5,5,5,5,6,5,6,6,7,6,7,7,6,5,6,6,5,5,6,5,5,5,4,5,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,5,6,6,6,7,6,6,6,7,6,6,6,7,6,6,6,6,7,7,7,6,7,6,6,6,6,6,6,6,5,6,6,5,5,5,5,5,5,4,4,5,5,5,5,6,6,5,5,5,5,4,4,4,4,4,4,4,4,4,4,3,3,3,4,3,3,3,4,3,3,4,3,4,4,4,4,3,4,5,5,5,5,5,5,6,6,6,6,6,6,7,7,7,8,7,6,7,7,6,6,6,6,5,5,4,5,4,4,4,4,4,4,4,4,3,3,3,2,2,2,1,1,1,1,0,1,1,1,1,2,2,2],[5,4,4,3,3,3,3,3,3,3,2,3,3,3,2,3,3,3,3,3,3,4,4,4,5,5,4,5,5,4,5,4,4,5,5,4,4,4,4,4,3,4,4,3,3,4,4,4,4,4,5,4,4,5,4,5,5,5,5,6,5,5,5,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,4,5,5,4,4,4,4,4,4,4,4,5,4,4,5,5,5,4,5,5,5,6,6,5,6,6,6,5,6,6,7,5,5,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,3,4,4,4,4,4,4,4,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,6,6,6,5,6,6,5,5,5,4,4,3,3,3,3,4,4,4,4,4,4,4,3,3,3,2,2,2,2,1,1,1,1,0,1,1,1,2,2,2],[5,4,4,3,3,3,3,3,3,3,2,3,3,2,3,3,3,3,3,3,3,4,5,4,4,5,5,5,5,5,5,4,4,4,5,4,3,4,4,3,3,4,3,3,3,3,3,3,3,4,4,4,4,4,4,5,4,4,5,5,5,5,5,5,5,5,5,5,4,5,4,4,4,4,4,4,4,5,4,5,5,4,4,4,4,4,3,4,3,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,4,4,5,5,4,4,5,5,5,5,5,5,4,5,5,4,4,5,4,5,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,3,4,4,3,3,3,4,3,3,3,2,3,3,4,2,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,4,4,3,4,4,3,4,4,4,4,4,4,4,3,3,3,2,2,2,2,1,1,1,1,1,0,1,1,1,2,2],[5,4,4,3,3,3,3,3,3,3,2,2,2,2,2,2,2,3,2,3,3,3,4,4,4,4,4,4,4,4,5,4,4,4,4,4,3,4,4,4,3,4,3,3,3,3,3,4,4,4,4,3,4,4,4,4,4,4,4,5,4,5,5,4,4,4,4,4,4,4,4,3,3,3,3,3,3,4,4,4,4,4,4,4,4,3,3,4,4,4,4,4,4,4,4,4,4,4,4,5,5,4,4,5,4,5,5,5,5,5,5,5,5,6,6,5,5,5,5,5,5,5,5,5,4,4,4,4,4,4,4,4,4,3,3,3,4,4,4,4,4,4,4,3,4,3,3,3,3,3,3,3,3,3,3,3,2,3,3,3,3,3,3,3,3,4,3,4,3,3,3,3,3,3,3,4,3,4,4,4,4,4,4,4,4,4,5,5,5,4,4,5,5,4,4,4,4,4,3,3,3,3,4,4,4,4,3,4,3,3,3,3,2,2,2,1,1,1,1,1,1,1,0,1,1,1,2],[6,5,5,4,4,4,3,3,4,3,3,3,3,3,3,3,3,3,3,4,4,4,5,5,6,6,5,6,6,6,7,6,5,5,6,5,5,4,5,4,4,5,5,4,4,4,4,5,5,5,6,4,5,5,5,5,5,4,6,7,7,6,6,6,6,6,5,5,5,5,5,5,4,4,4,4,5,5,5,5,6,6,5,4,4,4,4,5,4,5,5,5,5,6,5,5,6,6,6,6,6,6,6,7,6,7,6,6,7,6,6,7,6,7,6,7,6,6,7,7,6,5,6,6,5,5,6,5,5,4,5,5,4,4,3,4,4,5,5,5,5,5,4,4,5,4,4,4,3,3,3,4,3,3,4,3,3,3,4,3,3,4,4,3,4,5,4,5,4,4,4,3,4,4,5,4,5,5,5,5,5,6,6,6,5,6,6,7,7,6,6,7,6,6,6,6,5,4,4,3,4,4,4,5,5,5,4,5,4,4,4,3,3,3,2,2,2,1,1,2,1,1,1,0,1,1,1],[6,5,4,4,4,4,3,4,3,4,3,3,3,3,3,3,3,3,4,4,4,5,5,5,6,6,5,6,5,6,6,5,5,5,5,5,4,5,5,4,5,5,5,4,4,4,5,5,5,5,4,4,5,5,5,5,4,5,6,6,6,7,6,5,6,6,5,5,6,6,5,4,4,4,5,5,5,6,6,5,5,5,5,4,5,4,5,5,5,5,5,5,6,6,5,5,6,6,6,6,6,6,6,7,6,6,6,6,6,6,6,7,7,7,6,7,6,6,6,6,6,6,6,6,5,5,5,5,4,5,5,5,4,4,4,4,5,5,5,5,5,4,5,5,5,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,3,4,4,3,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,7,7,7,7,6,6,6,7,6,6,6,5,5,4,4,5,4,5,4,5,4,4,5,5,4,4,4,3,3,3,2,2,2,2,2,2,1,1,1,0,1,1],[7,6,6,5,5,5,5,4,5,5,4,4,4,4,4,4,4,4,5,5,5,6,7,7,8,8,8,8,8,7,8,7,7,7,7,7,6,7,8,6,6,7,7,5,4,5,5,6,7,6,8,6,7,6,7,7,8,7,8,10,9,8,8,7,7,7,6,7,7,6,6,5,6,6,6,6,7,6,8,7,8,8,7,5,6,5,6,5,6,7,7,8,7,8,7,8,7,9,8,8,8,7,9,8,8,9,8,8,9,8,8,9,9,8,10,9,9,8,9,7,8,9,9,9,9,6,7,8,5,5,6,7,5,4,3,5,6,8,7,7,7,5,6,6,6,6,5,6,5,5,4,5,5,5,6,5,5,4,5,5,5,6,6,5,6,6,6,6,5,5,5,5,5,5,6,6,5,6,6,7,6,8,7,7,7,7,8,9,9,8,7,8,9,8,8,8,7,6,5,5,5,6,6,7,7,6,6,6,6,6,5,5,5,4,4,3,3,2,2,2,2,2,1,1,1,0,1],[11,9,7,8,9,10,9,10,10,10,8,9,9,9,10,9,10,9,10,10,10,10,12,12,12,11,12,12,12,12,13,12,11,9,12,14,11,10,13,11,12,13,13,10,12,11,9,10,12,11,13,11,13,11,13,10,12,12,11,14,12,12,14,14,11,11,10,10,11,11,10,9,10,9,10,10,12,11,12,11,12,11,10,10,12,10,13,10,12,10,10,10,11,11,10,10,10,11,11,11,11,12,11,12,13,11,12,12,12,12,12,10,13,12,13,11,11,12,11,11,10,11,10,11,10,10,10,10,8,9,9,8,7,8,8,8,9,9,9,9,10,8,9,9,9,8,8,9,9,10,9,10,9,11,11,9,9,11,10,10,11,12,10,11,11,12,12,11,11,11,9,12,9,9,9,10,9,11,10,10,11,11,11,12,12,12,11,13,12,12,11,12,12,11,12,12,10,10,10,10,9,10,10,13,11,11,11,11,10,11,9,8,10,9,8,9,7,8,7,4,4,5,3,2,2,1,0]],"max_predicted_aligned_error":31.75}] \ No newline at end of file diff --git a/tools/battery/models/LICENSE.txt b/tools/battery/models/LICENSE.txt index 33c0ab6d8..3929a9ec7 100644 --- a/tools/battery/models/LICENSE.txt +++ b/tools/battery/models/LICENSE.txt @@ -1,12 +1,20 @@ -AlphaFold Protein Structure Database predictions (tools/battery/models/) +AlphaFold Protein Structure Database predictions (tools/battery/models/AF-*) AF-P68082-F1-model_v6.cif, AF-P68082-F1-predicted_aligned_error_v6.json myoglobin, Equus caballus (UniProt P68082), model version 6 AF-P62894-F1-model_v6.cif, AF-P62894-F1-predicted_aligned_error_v6.json cytochrome c, Bos taurus (UniProt P62894), model version 6 + AF-P17090-F1-model_v6.cif, AF-P17090-F1-predicted_aligned_error_v6.json + urease accessory protein UreE, Proteus mirabilis HI4320 (UniProt P17090), model version 6 + AF-P32322-F1-model_v6.cif, AF-P32322-F1-predicted_aligned_error_v6.json + pyrroline-5-carboxylate reductase 1, Homo sapiens (UniProt P32322), model version 6 + AF-Q65MG6-F1-model_v6.cif, AF-Q65MG6-F1-predicted_aligned_error_v6.json + NADH-dependent nitro/flavin oxidoreductase, Bacillus licheniformis ATCC 14580 (UniProt Q65MG6), + model version 6 Source: AlphaFold Protein Structure Database, https://alphafold.ebi.ac.uk/ (EMBL-EBI and Google -DeepMind), downloaded 2026-10-15 from https://alphafold.ebi.ac.uk/files/. The files are unmodified. +DeepMind), downloaded from https://alphafold.ebi.ac.uk/files/ on 2026-10-15 (P68082, P62894) and +2026-10-16 (P17090, P32322, Q65MG6). The files are unmodified. Licence: Creative Commons Attribution 4.0 International (CC BY 4.0), https://creativecommons.org/licenses/by/4.0/ - the full legal code follows below. diff --git a/tools/battery/models/pdb/4dc8.cif.gz b/tools/battery/models/pdb/4dc8.cif.gz new file mode 100644 index 0000000000000000000000000000000000000000..6cd4311d3d9896efe484339f828789617906aa0f GIT binary patch literal 49043 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 literal 0 HcmV?d00001 diff --git a/tools/battery/models/pdb/4nwv.cif.gz b/tools/battery/models/pdb/4nwv.cif.gz new file mode 100644 index 0000000000000000000000000000000000000000..ae3360756db20af42f18eb30293bb9f22f304e57 GIT binary patch literal 215924 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 sxD}~uoyqAa*>%wqJtfm#taI%L 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⋙4*Yx~pSdGmmhs6Ou8x6EJ3%egdp<34XSqjOD8CPTT$zgH86Ez?)-GC|u z56WYfmuJ!q*hgHVYOJso7J0BBYYeQ|x=v!Xe^SX-f&cQrHLAw)QUDtc%L~{jOeRzW zIqf641Awjb-3k>55gc*OXAiL8`G#Dlp*t z1j%Vc)mR3egA5zMJtjkSRxaL9lbas6+`wUlgG;u>S>ESQ!wO4I zVTEPUjUIVID0I(xyv!rmUFK<=sg;H#Ef--e{-0!h<&>4=rCpA!uN^} z*?`Px6PaY`QHz+;?f0*L|LfoX_W=eSmVfb&2mkly57_76-~0n?6`$>_FiQc-4BZUP zsH}hzW6wYPm;87JoNwS?3jE-qWjxS>p#TCWiO}6wV)r8$CjS5~H}L;b;6{1^IEDn2 fDcFN$uK-Kven$L11^B=J_;3Fo_-lkjpf?Qw)iEAT literal 0 HcmV?d00001 diff --git a/tools/battery/models/pdb/9gjx.cif.gz b/tools/battery/models/pdb/9gjx.cif.gz new file mode 100644 index 0000000000000000000000000000000000000000..58d16f52ae7fdd3344d37d8c80a2c07b7b829361 GIT binary patch literal 562819 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

?Hm$wpoJD5#o&qN>TbHy!Z&1>#eE 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 z zaj;qXIoJsW$OhC9QubQ%TKR-UIKBpb&N@&kkviWmBqXLJ$>DaadGtMjfoxy(GR)!@ z;3HLOY$h#R9|<%4LR=e+cJcXe0{1B<9a+cPZ$^I^PJHb7nVt@a_flTV{CJpoH!xv8 z3ahtpGgf38i}wlCsAz*non!1+*<>VToB6zmdI5`*p+#^KtB7K{9%L#j$SLfku%EA|VYwr(1Hz&`#OoALW<-hIn37bbpkXLX7phtfHb#Op z4wa|rr_&Xsp*ln*6&Z1NzdaH*Q$jJZX#cVlu&u^?P+nd$m{S}uV)1Bdo2!Q$r*!VV zwO^)<1*{&Xay!I4JIyPRItDz`kKf+S^Jqj)JYaHtmcL z+AHnm0e^v6m0Y66I^AKO$~FHF<$I;Y0gp6NLs42G+N-67O{S;H0JIp@(V#%V0<-#m za%TH>gn*WnHV>xnh}S_eDjRI7mkko^E0|h}Kg`5RZ$dtLFs)z?&W6ZLaS+#*}Vb@Ho z9^;rz&dK;Smf>1*E|y&U8Xs;#J1(1-J}g(BZGxn-KkmV$v?D5)oH3X}bIS&+{ZKw8 zc_G7_{vGp20&-M`hX9y(9#9vj)Mf;8oXmI9A6eI2*H2*O{_Dr28Un?($;*l**;&OJ z-@_~b0J|E|`x`2IrEz8=(6O+kxud&@QTvXYaU;}M-NNxxa;Zpw0dkD z^U~78Wa{$}-uwDJw;;D?5Jg;NcVD|>YApE$Y1PF#o+V!vX*+JD?360KuP=*^bXhJm zf;C@p;V)2F^qf1lgf|oXjN&g&^ zD5N-y-pW-JJo8VE&D2qG&gyNl1b_ORwY8oEifa@sxg_iPW>jIViBk`jwiE1Rj`_6< zh?g5dskm&yB@59|&JV$R#NL`NRZI9@(o<`<6Mx0AnF(^haXG`<`fZtsKzN6=!+0q) zsWlst)pc0BQ{T)F(>3vL%dEX!q<`MwG3k?0Ws_LOcO_oL#V}Vwftwn9iFHSh|J$0- z;~{EGgZSUMC)}Kogs8)oY8ks)PEq99z1s<}Ei*Xe*!+el&+e<& zItE^s$FBlM=yy6e5Ar=LxKC5^Q)aiK*rLJVn+rH0jGX)=r!rq_DZTFzEVtx1YTMNe zb%)}eDD3MqTSP{r~3}#S|xG7KRGjbV?)OrXu>C88-g&^ zoFdMW$bc+k%!}Wm+qF;1V0H&>S<4b8ybEOoL~;dc4764aZQqwj25BQR$1t-+M#@@HKNT$PBBYwyq4(m!A4QGYA zcb>XdA8GP7PH6LV4242jMPdGKt(QyEpX{sP`~qFuI$E7{x@I$S;s zua-@vTX-IX7N=$}FK3T96LR=#$Y718vB~I@}VW zwYqd@B&dzZyjRF?;X|CpVsB_>_7fi_ z0Enf}jV0GCYNdVPGXcK&>cpkh;G@!Q~KKP zp5HL(dU6y7E(W{bwIo2KgVQfWLc=qGq7@Y`1Dtlozd2TZYW z5KBJ}x-1Z`d$<6lhVp|uTpVI2WNpV8+)eHEeRS(f_DPth%=0+&i?_YWAAdH<21)}& z#ih1kBz6Ag7H=brQ?{ITwv?SB0w$qwxdrn2X0oM!EK=h#2uI?4jR6A zm64m=g^L<%etk&THfO(xd-+Naai&A`5x(m(%#L68m|R?Ob*N?j`)(doab65lS8&pg zoace&cMsFz>QFjko0UN0nvtK6v)t$2IY1~COl0M6^3SQ5;(xOd^@ zj?=X|)bQU>))g1*P8#U2%c?u`hm*xKnb8<6h+c9a_lFXLgvsgjLy@Um-hRqha?tS; z?V<7$V}$zL0eu3V$5r%8&{ywmTF?vPv?P54ayf0u1svFxINe>;c{;HpgzJ{)pRr^Q z`OYU3(%yxx)DxTT^t)vTSwE1P7cX*zLK)r?g1$`{u@d{lRo&`Wf`AM#L&PMU{UFhc08N3*_-jnnE!Fy5i3Ye6(|G&5SQ5@G2&US?HZD^~~xKY$Rx zMWTQ8bWhVI4B}4}aDfPKmH&+_oc~wtLBRT*{EtNszLGXh|0>=6^B~wZCGWgiSdLkX zm)G0YiQGcMd=C#G9>k5S=QPkNViy@cy2aw^z1t~zi;vB=%`)fNR|HH;OG;{OMm9i) z$;MXNx`QC?pV%RPGgdNEDbDEqLv?^0+NN&D@DY%dFiB9+wW_PmeAsr zn8N_H((U_2vQ+b|kxmjx2bWlX>!DuIoOnN8FxT=0j<4@guUlY>8$_~@EY>j?S5jJ_ z;J@}kK9BDGA|e`t|2N9Fy;J!I*FGT^{(dl`q$1E{uul9KgFn$sbpqIluC;Xskkv)^ zi4x7eUUzWk$_BPnNXNa9P(4iGNhg0$V>ul-e0Lfx!Eo=tlGI?}IwkX<>}*9N?3A!z)1 zLLGyeE10nW)|%>GwKp5MJzvtc561ZmG^FS}#F3dJl|k%sdSQxJ$5DE;!gAOqH}BxmRLz(b!$lcNr$X9+|!E+FG`1B#mV8#Xcb{68^?P z%d!5O`nmKWaOz6h29txWCgjK;#_oBnR|iEuH9@@#vKEFq1@6-K{4_{X=WpZ06GmPr z4U?MvSe+M@W2xt3_uov^DKj)sQ0DMww z4I3A>Qwz&IiF3DNI0>RWl7g}-=D~s4XJGb`5^67$k$1grWo+6ju@5}EEac~k30RtX zSXj`{AcgI1)kbAYz#*i2Y?#g@Bp<<;I76@NT72af-<5+D7Hh8lN%oE%ds0sDS#czV zn%=GNP+)z)sTXebg0V-NjVqC^aHAY7WSZ4Ob-u|Q3Ng*!wvK9;4X6{}x@Qjt#q$Lq(le>_n7CCoWuEf$fx zcc}D!`^sxCGPOVf&_z&UMk+G3CPF^iv^|NBU?6-~1Oj!80`Cf5+?l6NQS z<5i9TP>BUmN~_#uRbA$YNcZrYhx5=yskVf9YA7g=K0E7D_~{2Ctswus;c1nbjT0u; z@`{W~mDBx!8AF>)cih{EjC7lt zApyK8KNb)U_v&013XfLD0r)`ldhM+d>u-fvd1Z7CzL^J6E=w!2Uq3vyqMG2S!;)J| zeY(yiIFh6;4t(AzAC{6nfz-@9!*#=++4xqXT#2rzVXS&RDz;zJE&cwA|MI-4>`}$D8yq6PP`o;aIH~}I`wA0 z2S;S3ckLd2>+{^=)SZOv7{KD{Z;!@Eg4AQCCtXLgw28NkaG^};Fq*B%-E%DExN4HjM` z9=?uNvKvyXZ<8&&^HS*A1&rZIjnZQ)wOmSu*{)@(_q-WhRy;4%VG!4 zpRWl`N+@G%leD(R?>94xBv)FmGc0m7yv!REbVn(EhwUn8L3=(EmVhKuYiMU%qvVeE zg_(bnCU$?Y%Tj`tHlMotnW<6&Y2XeXwBUaoH29}F$rI@PT!`Lc43#4r=U7`sT0l5f zREnDR1AVszc^-R1fFLr~DUDqajUd6(h@(EH9|J_)%LQWQARyE1MR=5FzZp>w*S`uN zw>ET#&)nvS1VVMj7ot)lnYKJXg!y~;*{$)QAv*biOL=DE1*yy`@|$m<2#+QE%V`>D zj9#3{fnfyX2i1a2<(KbObTKeZ6Dv_pqWnLazB(YP=l%Nbl7gg!E-76C(p}P>(kUHE zH@JvM3DPC8Gz!upEv2NilyoCVNDJt1_Vaz;e`km1&Rp)j^UQh9IYSiz0RM2_!2gL*tdPK z?yq;%(LUxp1O}x=!ZDzfcJD>x#qB(34>zXUCp!)@DZYW!1!X{oyHEc$A{Wg zd$Cb$Ff84+_5Gkvg@=fl5*&Jrn0_ke5bCG@(9qi)gtnvM8T3hEXE@DMY}Kp(l|WMO zRMO{3!@28kTv@0-)+caYCUgqzo%|*52reO3%XRu@$?3Y|nk30*d3GY`R(^_zcyWqJ zebPPX05*2d7h#R$&i86$UkA^jRM$5%gH9cFzK9k)q>KT)~0 zOH_Qrjj2x65#`$~%r&F*3dWeJj__#>WqL+1dYklpb$G!Zh1MXd5;lbE8605rHtzAx z7}iRV?oI!QwXh)asJim<*P%URuTtvuNPONFA#aDqA+rqj=O88_EZXb2`Jd7sGDyI| zOBJ5e2&;r~MF;W0p-aYn*gZtYR|VsZ%5M%a@uIscF!4)9z}!nWEIiJ9)n^lN|F@zk zPqq-nCp*|o+*dJ+zlv|ORZ&;aS+@s8aRqFTEH2%>NL0hrN=U9sUBlAp8@3P%Z@G4C zQ%z(%9#zXEC7Hu#Sa{LZuY!?50ysMhj!hm*FpaUgl_~tv-qUeQK!Ho$z8g0brl((4 zV@>=S&j0yl21i0+K@jndSyYh`ceIQX!l;tF^{&awS54U;X12ecL{mtD32hAa_<642 zZ>hTsh&Qz;GJYiMb$kg!yelT!oMx`QNt+NTXK$YGFBVf|yp4QqSg~Pi|Ej{7t1QJ$#efT8GUTiArCiV9SR)AV3Vy#rqg{@&`Cca&_;)jn%1ad5SHc-(ht7s`tN z*%4i$wusx;)C_M^jh09t`gSx0nBEvO>;qM-DVYVNb-^Xc;=8t(k`+S-@M`f)QHy;| z!qvT3gmpaWZ4D9?M36W z&Dhuc7tB1=pXojzs=iXn6tPfLP%&i{2oXMhamaBUTJPM7_>NnhNn###$58IK^)s#t zyZ`zsV#zqO_GvyEelid0ppTVj(*o@J9K?5oo4aHi$X#0#eePO zQ283+6kh*2OSMI&GacZjfB;f@6ds`vhl1}~eR&P2YTZ*c)hpX!m&a@EoAT!#8RsRW ze9AH+@pi{jGg*a3)%2Jkp}&BPE-cabZSh^iJbFK&=LA09F_;#~`|FnvXvT%iJ*UwK z3x}HqhKwhNHYM}msR`l3R|SghqOm38Q9I}!^ee)$OpSxmL}6Hj61I$oi2>8j(^!7+_F6;ej%JQ;EFFg?dtztgxEtd)D4 z;>|+hnYatf$R9dbQ4`s6;d+dKG7oxlBDX}5HBNB$@cv&XIHxbM^o5b4dnW!$)An>$ z{FGLuOp&ir+pJ6Y^x&HB%fy=rJ*JQ)*H)+~ucm{jS|L3LB zkEwkI)RKhyUXj;M>5c!qX2*!!^v71w1XO`qqTX|u*>JM5OUq?LE6nx3_O90`rOK~1 zG`~9YnewCjG|{BNmhi6E^hu8iiPJ~B{muxq*CXnnzwJ<~I2)M^C04DbE;jw}9YQya z%BTa9YdhE?4H+KvCvXOnG>4QWTGF+%wFpwjQHTX>Sd4@^3AlLi*Jw*EuHCd}=v_^{qm#fieb6A<$&Ly#}yCsg{3d4jYDt!(`ssISbuZ zS9vXNsXyu9OhujLFUWVkPysWLsjgYstI#_L2QoXaCDTAZ?TnFnW=%Yym`WwhJXjL8 zKWHH#JId`y`At8!!-}jx57ak?)T=d0;7ItO1EkqKF6O*LYU!XF7dLQ@yQh=5bdLv%*y(3YyyBvK)6`myD+J6A#*dO-r{9x} z;@Tj&6L>Mq7f+&&b!f@5_T8vgt-u8fiVVA;Wzy$*dQ3LCX*gP61)xAq=;?U+w!kakAS>wT-i%Ye{9 zo}8sJK>6T1{t?~KDtHusV8S5PINMCGhax)L#Y$3_?Xcg`BJz^_7^lq+Uotj?l}9pggi{B$$b z2$%lW2%*pGT&l{KdTEkv=+fJcMKso1!q2JP(X-K(I_g(aMg)X_eb8kM7HdDGjAwjC z%PTgD=E$|0F=uV)zjn3gVt0a4T^t>jHq^UTKqGEQJ(>k3!ap*MP<+mzVeP5iTd-ys9C%Mc;JTJQyJF`@;w=V2aeXp>LU(`BZ_H4{ep#2-sQ`Y$+u7J`psiy z^hXsA^8BsdQCCVwaWr32lO1EgQ^ip(|0t{g<>$1R$38;^9!%pR5s;`1e;qNxB}$9C z7x`f5Xbz+=uUoP)Vbw8sr*P~;S>>zL*~e>J=oKMm%?{G`Ni2)HOIf^Dy;~qr2QVgv z6@LXBdNqQ`sv-AkuT|9pN<+Yn z$TSFg#E(FMF@cSPDt%J)Rl1`O@%(4LUwnqP*?%5!v)+ebS|gaXu_RvPRrstf5F_hY zVDq2~E)?@{4Wa*8f0jSX+DHE?2y#QrUI(Oz}~O@3l*p%%sEL|VHcIL>S3lP*6Vle z+O|X^jfEs|;#BL9D&29arq6qKa54L*Q9P7XhP7Gnv`2Bq(b`ZZ_e!R!6GS;iM+rY& z)cJ&^HIbl+tegf5DC0ajhTfpei{2UUJyJEbf)|3py(3?#dDcMhW7B;zn6>m#u&rrY z?!qCB^bcjf-jR=e-ZMTw)woHAj}23L0rqAWAMAIXqM%4=s2cBZp}y;p#a*7VA|BeH zvmc*VJ0=pM*N>C0y%0!4ZtwH!eO!D*RM9ziB4fBAwZw<^$0jma6~l+9-VQIb9W4R)M1y5m45RFqZQoF94U|j zr)}6@-$s=>mb9#uLNABE8|^8De=v~3$Y3Av!zv*YQ=B%N3S88^$CK@8yA(@olJ{&u z&&s)Oo;(8=q9(kk#_w@@mrvKpW6I7AsCA;d=3y#OfXI*8;1lqUzy}G~47AfuZwrQ* zHZ6k))Hgpx`Wsr=Ap7`CJBB;ie~Rzk#gH0bg!-YP7I<>7f|u%pJDcKnWNlCFgg#=Q zY3|=&BF~tTDq~>NqI&T3M@gcB#}kZeC)fa(l9b-&^!$vKj1K?5{pwe6t=2(vRVl2Y*d@*k-JD4CZcjg3JWtGMY3?xn1 zU<)lyK6!J{efc#vpk`DV@=f=P<9FXOzatZ$?W6AAB-hg6JcbOdKf|u>6_i38wC>7& zdz=cZZadf!I@Z9E>Er#w|sz)9BkQSS5?>O4X1G} z*sQ@e{}3iwsq^tf;zJlJCY;bq@F9(BXR|-Bu z(%9;PfEncHlJvw_4_c2>-`|XX22oKmgFjbN*y<)cKFL&C2X$@GZw{wT-Xc6qtE{;$ zzQbe~ujBB47nTta5!sU~C(mGBsptw_Ox;ujg+Nte9&e%@RhIwyLI|7<-PJtzTAd=Gogyh;0!mla$FoWw8EJ z63$vedQpDw1o0BzK_#%h=4XF*2&OOCMeM`shkOJC#Q%``h!8Fn&x>CxS?w<}CX|%D zk%hcQBa-E$UUmVF;2W7U=T-?g>qcy~Vv^CjyEYTWKlsu#dSQS*kPG??&ry#mlM0JlD=O^KezQ+|o)>B_6PspG%ur;07|h6=e;V3YuY8I;&8WQnjOQ13Hzy>ic1BYW!=vp= z^R|NwT?sKu4^3ZTMxK3$=DmFu)9umrXAIex54LBOgN=iSc+eYq9gGtU-cNXs@34cD zU_f*0;Nbw-mmYHBJ>x$yllv{Y&H!>sR_Nt4hvD`6KKMp#6wXXNJHarmW%%k-tl<;i z5;n|A%mTV$%Is%A_hfh~niscbBO|G9WHH~C}glSH0fsvFv?clRBl^Wpas-@Y*7-v8H0BQNmc zfv{mSnHtCe_&3F_0vaW!R$7#BP->A7=A|HXEOm3#as9BRj&#P_C7QAF0Q76cuAm^e zi6B3h&3eL$CA#(z5NZLyxzBJ1i&ORZL4?BXgqLXGgyGY=x7U4{dDUR1Zq8p%BoqMq z5h{6G&W|3%5kqg6UJsv_h+ZC)gw3WYoc@|VqL0rjMc56L;-{eRJHSLe(=64qbMklR z;^zmo_j!F*{EOEi6yAgSes^+b2h)A<7Bz!Gx+Ji)5EkA$1&1DkmRH@w(UabN=ddF4 zM(t@LF}CB%yz;ImTd1q0)SNrTA&nDGG3Ie7jrsV$7~Eb!VG%MK-aRaflw&EMxr3j_ zNkL3-Xu|#Z6G@$L7h7as6gILP1~;NMhZ? zJAhZbNBvh_G>5K#o#At!Od8p57{J~ZseK8bm&{XO_|nu9IZOP&m?Sd?tu(%bZ;*VS z-B}VX25*fr1p^=rP*;2jt7J<-79!=n^UOlQy!b1D6=g4HWmzY;8 zmv|&)<_06Y?OROQCi-8J)jhmIGSsJpnGjRfvIv>`DRG`F0*gi%Y8EJB;>$MugOV%StqTDg(_TXJJJLa45>YjiZ}Fy7%14V&v&2K zEWaZH&`S2%3P}4sJjHO_ZnZb+e&Q+-Z9e-Esnn-=MMoz zJS62j<|6MwP9@bV49^v2xHzfePGd`!q$K2g<{}wCRoWE(Kv594jy+B+>-up&1 zSreTZ(ZHA?e4Igy>9dtSnyHIZ^{KW{=npAr?%-ROKfk)e+Yk#O9XAeP{1(v}RGxHw zkLI7z(E@(Mez@61MELjTn0=8}xq#J*Y(xB0U1WHYPuQvr7S&&)KDV6{e>sVP9ZdsK zRS2&RbC&$y6@K%GW=^DNtVGpUGR~cLCA`-00fTG`&x$p{SW_lMu3;fW3=D!EY?;3P z<=C)lvWecWp#W1#1v%cWFir!qF=7NAaA6x?14G`)n zNArNX7)Jw)DvAOaWEhtGb{23!3h4Fa*=*t$?1t>{ti1!|BlRO^?`fzzRW425h)a^$ zY6AdP?WWKG@SFi!Fd=1i>;5Br&s!k}w%kSsBPWqq8K5xTLR6h=ro0D(0>z;c3yepO zG+=K+P6H01mVI6(3w@;K4l;hToF2`=_iNpd*DGgon%4*3PA9MavS87Oc#= zK~x58Rf<9S0&|XK!O^$h2>|xxn%HM?wjr|oP$Bz;0MmSmSY=nX-hO@6!hLw z8mzF_cGd1!=(4(MWe!7YEax55mDHw%FEPr0LBwl7=e-KShQ&+L89Y{d2-eZ5RLUyZ>&AJiZd7zGysP$aov-f@=+G=L2 zl3WJ$RE15SzLUyA#8mJGFF^o8--Ua!%*8gVlNcRly{9wadz~zjbFpGN=qb zi$r~-=59r6kz2`ubzIT<+ekqevIyq@Bk7DjY=AkUg7T7-^1J_eH3hV{0#0h76jv!_ z?=6w#snuYf^gge)U|iltU|sUcet#opKB{M{HIa2dJB7)6QO9-dtvaqbbk*@1z+|#b zK}LhPeQveYyow3&F0(kYAaR~-i9AKXLeo&Yyu?;7^}HkiM3rdn=0^m6H!6{9K>S(` z=yPS>;mT=`JT1G~x7L7A)g;^e1OiFn0@~@Rt0$5bN;K&1j_*7O9L66>JO$cxBw&TE z6^MaRz-7MH=ZKtcbKjAMXNWgNfXmG}8g0JM9`3ho`1EBC*a1*|_|g*j@ilbwO*`zB z)I?$TpXgW1n-nABbE+|ah3{I%-NQGI7;>wm6C zP&s)zeh?a%Cu)&?BK1Z_8G}7Be)=gLcgTiDOWxu^zuJM9A>%tMm=2wnUvVx(>hA-F zSeL%&5WYF?zrQoOdo!7l11z9cPF9Q0o9u{|?2ns>IC_=V8k1+o8~}~01Jt#dpCvxo zI0-GHzrf<1M0gU)vi5OiYycu&e=q4b(Qc?de!^Vh~AKotd3i6*5K zcTj&@vXd#RA?f~zHLJsz`*+#isCY59H&*)g%HLFI$<|IYfj5$|KvE$g;$1RZQX0a` zL%^g)2U7DER%9sWd`X z%5|57t#k*3$MFKTB^Il$%U-XW59;y^*aGNo8`5}#TpEZVXB^!{!%;uk<3`;00K*I8 z$obl`y+FQeI^6TVDK8H&R528w_R;ohj1_mWRx|_yZh~9A@@m%Ta>7`{PSl=^k;MT3IP2W(S=MX^XeUmS@aHs@I$;v1>h&CGzzfn+-*T^5C{56gKtZWQq zKNG%(#rsZ=ocm_zTrMk8whqYc0j|CELqic}B_FBOlQMD&;qHc1L)?u1E&UlJC<+8P zgL2Wm{IUUahszu~8;~DdS{o36Qpz1`!!elau#gKZ|B*w1v6(k4t0=9-n{4ArObMb> z3;(cEZkBzujDeRtb|LC=d<0$PDA_iT;LBs@pzM(3z2tQMVe+XG?2QgfvHT75hj61T zr?;KIzIA)9U?o}tsUM1`#-{_5j@utpc$86r=|l+x9j2zowM5t)b-K<3n%{YeEZI)U zZ<@J0{Y(t?)+g%o+1*)cx|F9P2knTS=s7z4HZiPOyP9iOg`!gV zf7fdJCY;Qfq2+Xn>>#q>NRpS;bYUms(txI7<8ESzh0<0ZXcq}HvwO^ukEVqwyw==( zuTC<2neezxebbB&?s+1rX!Ry0BYVo=9<2R|_%zX|&&Ovr!fy2#0O{wqFZJ<(sb@1x z)o>QI-aid5nnt%$l=>J*>7@w0WoiuLp5LjS(g5N#2b~HK8$yj^zvN`&!PHN5_pbrq zZni>==!f#!K7SmdTlev2r?{SROTHLn@B<;Hkmk0E4j*P)jR#ZdR&kI{<~bfBAIjlK zzNj2A{%x)SI#Bq@(A?#KrEJ0C^~kXOOs4GBb$V)xk~eEbcY{J@<%mklgmcSb7e+7fHf%P^!J zy)OjEs@&@|WuAt63-x|gyEj!tx0hXs)-!^hbL?F#34IMG%5S)Pow6p;B_MQI`sBZC zdyyR=wI-r~i$JdWFvAP!=hw#zI5KX=zBezboLrO@_RD@i|L&&E*;aj}BZO>?v2WdS z2rNJ4Ka6=4w;YM(e2pZ_9)l9ozNDp2AxV944#r1y z0;_Y`&?`A(DCzsaq+Hm8iY@C>nCs!&rFLyfq|B1E(5ej75G3;yV!8Nss?Z7OftCI-#3!<<`D@lQ6gn(H>&3)ST#Q+V#g$&L)c__9LqFC*2CbO) ztb@1Reo^;be+9Z4bmKAZ=r4RYuf9D&Fsz@<2bf0M`mr*~Fr2#)pKqmWnky+dabdbc zGiYTHmtGGx{`N==`^TgI4d0d)HajtD4TA5NoI<%ZR>7T~AY?W8UaUM@F~0fvL- z)7kuWJcu1%-x-<9aM?o{UnCf-)}Ql1B*iSVpev8{aS+Q`<+OD=$P!sU{nYlfOWe^U zwEZZhWmsIS9}LYX(SvQgUINt7mGAY8Yja=jxoGH5l8l%O+xT=lya8Mma+TR+&L~GJ zEQ@>>sBUZy3>!0{jNO;-mqW}EZo1JQeMl(S0T}f8VU`v0_4J2H1{;#AqU#x8gK!fm z48NYp_el*o$vH!F)X8IM1H8P3w3JSMq6XnsBCA%bNhwN7_08@E#$A0$}lmnsQfI{ zK6~JRaiV|Txsfv;`KUiNE=_#1GH4B>Ji8S9%>@1{WnJ?CA%_SCL48uL#f zbo!qLL-+uY)-*_FoqkJQhwe|=%$Sc)%Y3POYwf4L8S@CC&?BQQcti|d;5dNVX zeKp8w2s;hW2WuOeG#!;OOg*xd#g3b+v?#C%a#wx>F$=_U6HztkVxJ7fH0l?ADM*$_ zb$0xnkm^#E+r}pUX6BVb>6DxNfK9TFck3z*Dq#TtR~eUZIn7zdGO&o{GX@C`#MzhP zX3p}$n`a3>Mk-WF!-f=}fN$|Wu67{yVt)iJ{SV#xDBociutA%($S*XjP9_~`zL~UEX;4Fl274E^nX;CgEc{;3Tl(4NMNI@~9d9`3Ca z%;y*C&yA3q%0B=by*s|qJUOd?sdg7An%!W{jBa%$QA)^=9;>ZSw<%;+RWuS48v>wL zp#3aNzsrMlWNm;e^M|b_(BXaAL5Jx0+?X_v(dzBH=~tN^dS2ufsN9*@a33kN@X5$< zGkw^Gx!%e5_lBnCSYm^5Bu$c?*b>H#{y&vn*tn$ATUuSuA~#IPe0wD#yp>@zi4JI+ zbFyo}<=PoSF{g%ledBw{fHd0|^GhO_MuDin-xx73b2ISj|5W|~Y@IorY%K(`-|uW! zPl*FfLY?8-`CdrLg?djFYvSOHDzg~?DABWmNIhDW@4k~3|DioW1S*p?hJ~pO#xBI` zAu>t|rh*~Lc$!$KVz)r6Dn(AWx~KJW^^w?@{XMl&bWjq!56s9|=}R9qpRebOeVk}l z0fK}R+>AB5VlZ|)Eu<%(W8#nYu}a7uGnYp{t3Ej~8~)FIgROanjIb5>nv;wpBc)iRn;w{ zU8nd*kp?!Kjch^f+Q9E-o#2*<1Opy=XF!F>?N1vBKggKE)$MSQ(IAy{g2%s^*j z+j>{zNJ{s4z?Az7U^wCDc@&&)OP3<6_Y#i>sxH~SjIny~rVh~?~*LB3fPR>-G19l?p(W6zTbg6JkXVal65yH7}3D3Ng*oTse+d|}$QqINd5az4Js@~?Z$<9em44{U)g%1RY% z>M6@Ttz6<{7Y(v;S{#sIJ7)>vqt!*z7=8cY*t6Ar6w| zNQNbxpY3~hhVTA%AnaOb%%>1A{><0mThhdt%U;T;O=D@;47-he)aSlx@)f#Q?i-g& z^?%SWQcR$GMV;q*UD-sc=p|>?>9!V2oN=|BZ$+Kh@86YE#_-WQk`g8;nz-gY&JUSD zOH)?B+A9_dEf=ebin~6DxT$s(LxmRr1Om7ANe(mA7ZRDm_q0*2C*~989(JQVd7H?T zF{bvV!K_LQk<|1;S5CxevyxR|j0Mdu7u=EQW0?I>eW9LY7GcxSM>N0iEjmh~_)quu z^ip%{nfB{TvCAcvf#bY9P|6Toi)QI;-b3ISawwOwQrT8BQW)epq4R3?}|EG z0#XNK-WRHwrs+jH+P~J-^dBZY$@zE&lj`{KiEpRN37ucTpq2y_TB_`^=$$oT(i+{qN=z#1ueBEY5nII;;5UiXP}0dr!d+c=YZb z^*Wu1sKxRY$_lbIbVZh^*v}10xPiYDc&)?9I;g-~#Rl$X%Hl`3a?e~O14*k=;j zkYm&1cQn227%zJEHvZjz8g&svHCbhYGz{y}Kv&?CwFNKFdDL#dA2hsS3Y z^*Gf$oOo#I5aFpjWKujzLLhl){B~OWo>=oz-VPD|C>V))VoE>_9`K~cf{IW_w4KlJ zd8xtpP~VvJyY9E(FsCCZAn(_om8{BG%kn&mb6p{B?GDyk9=Z~xj)Yj?B!{v##5XDB zp@g5+6eBtw7jhdu6wK*?q#q3nXZyFcZaa*ja^~fPBS*62Bl;4hO>veWQj zLA^fFrrK2T@!nAN<1QeFL8N01jj@e^p|K#l-ws(pvnGQbbw*ftjVC}FS~-;6YG_Zgiv7^uG+$6T z|2Z72z{882dK3ZU3{Uuoja-hDnU&kwTB?RJV$TP-bju1WzhbY*hB~<{f(^)f(4-`J z&y$=tvn#`7r6m^_0&Z@$@dd=p6{SmY@Y+=?^5lVj%}VoS!4%(n{iBw8ru$lBYj37`3`Sqb!b0uTBbpB|EZd6DDY zXZhma)ixJFfqD~c&&i}#Y2FHnojhYSd3}pnPf}kiDXU=6X#hCFn;|C=0VMgUHr63Z zJ4~v09g4naBV{^S1(j<&r$BW)?h<-|P@#`Rdz^Iw;G$G<&gmTq1C2yKHMh8$ny}mh z3RCw8{;Qr6>jK|qxjekV+Oxe5k0?DlT$>@jNEW#F>qeR{BLf88D5EU z*jVw&F*EPs0OR>a>+whkv3II?+lNb=%lZ<{zB!7bx{b{C8?F6SKQ_(*P7C*({=)oJ z9_=Jm31dNZ*kr-}5Sl&(A-{p!g`l^-CB}ajm20gwEj~*ujP^8c(IZp2iA+hi!h8T0 z4?O{iRcs6^wXar7>dQYKw8d~Da|-@j)Al^@W;JZ)`xO4@Dd(;csGF7* zw0TVgZ0ZGTV(VU6WQWs1K%-fe6TR%no~wSGUpHGdfr;cAo`v^|3MLy-LMrvcY7p3cF2yI)1CdJXRO5X#X|8 z!6AYMUD3{?bLED&_86p1M!ONrRxA7qKJ|^xndm>*G=R4Rmk_iC>8KG$g|yrXsc=<0 z<_v2KN|k{j)!MaNq*!jHe|5Ex3=6{aEj(Q@fZu}%lFKt}wJ4@G*|Pw$BW#if29q35 z8AJZq2DWl#vtDn^;wyM%&SdkX#y}5;LbBfB{9y!syMLk=N$p`srBHiv(!raYj$9O;@ z6j$QiD$r5aj8TfKVF%7Zi4+KZ%-A^ZSQwZp^EW0T314b8H9lsPDDwfuz=Mo?eCi@D&zSn@V@R{{lBEM_BoD)Ov(Rw)h-BX4ihAcsXp(ETf z1?&YcCq+D`(M!*|0equ6{CN}cuap-^#+->sWAAsE0PfYjwO&=$_2^ubW7LyoJe&2i zW7*ZR?k(H+>0;78NLdn7S94Xr%aIP|Jp<(7YRuY-yhl>o-W24X;bw3ZAc5?N1%*J> z@gGA!}vmoCYVDl zNu*JEYM~@j0l$!EI2n{5qhs$v-ev|gN5ItV@vQ4r!*-TUs3ZpPvz^&!HLF|OV7 zsVMBC+>-SR4>Ic!ZyE)jd%L*BU%mY&cR~(#Yl%uIDf@L`T4au4i26P+2b%8pa+j+T zz#JD8JPWNgZ|hbkOHE7?9#_4Gshg$zcTr5JpWik9&+BF4^Ur8FsI@W5&of0l^Ssln zhoCy+G1a%P3Lt=V9S-tMovMMwc*+2JwThvnJknJ38I{v8^UvZw3w7Zv-u!QVA%2Ry z+loP&Zu&*?e)vhDe zMO;$z--3tMl<5WoG%{}>;woRkfLZ~mpA8AM1eKj>e7L(2{1Po$@e6i_EeLpD`A#;x zYQR}W*OLxSjm=*h{a&dEjV@hqCJfDEBp6}{=sytzkmi?~@VT%dI6T=C;ED#5BHw-GR zE0Y#Bxx}=J-=(H*K^SAyTlq^Ba6>C=xI-Q}OX8Q7(nWSvmn89np4mrOVHn!JlaOLMP3LHVhH)303#`q zR^Wxv@n{<#ahEY3b#S&)Kb{4Qa{Djak_Bao8}8nPRbZKAUZQfVNoQ%p7QmSUrxRE* zUKcp@hTL8s*x|W3ChLRvkv^^R?~E|K`95E9*fQflgRyoHodWD`@hY(Q|Dwv9$1Ww( z-pG)l^^7|~3`l0y7>d{IN^vK$EY+98*Zz<_*mF+giOfNJc0!N7RLN5kJ@(h~phcIZ z0_p^R;c9Dc!|p1thmV|$x+Ru$V*$gH-}WvRCAcM<p$xan)p;7J z`~fA1#{XgOt~h6+6H?J*l(JeK*9xC$0jxp^m0!1A1?s~uZL}Er+7ATT3hw(r88a!O z7E5}b5T1U36=t=`=yLV=6^B`EO+%!*+7VH9DSQo4971zMW$4s1TiPSww0X$HrrMVV-h6NFji z5I7mAiR(A24)-SiHxngqO#*%(!Je`HyId~A5*pb1qUQ=G_@fVjl2=6+dj5m6F3G-6 zl{tfCS@IAoCO9Dj&y|9!p%S}e9>>70^){4b(vHN)JL1GM|?a;Ng&kSheOL&4K>qNvI6+DV4r}AXnm|GGGXy2GvlgED)c#wTX=T*uvR8TcRR$W3L zILUy^Sz(8=4Tf!p@tHwGW7Ehd`j`wrfwBgF6rLfs#`7?FSrmLF^WyT3(EDK%y*~

EF{3F(i>L&_Ti`y{i7QGwc=^um;-Xzg`1da3;ecM$xy@4 z;|JrVpJA?H@YRp$p<`6^y2hMibE^?|Vjo)laIrdxCEfLRyJ0xaw80^9;_JZOWSE}* z>-N5C`}6HBVfHFT@fSmR?1D5xe=M8aXObOZW`yEE0CnE!cmr*hYVXe!=-1MB z!A&UtIGkktI|jV>BgnO_O97z_SB!c(%+dEQWgO5`Q~S1Y+%UBD^=;i|DprgQ)|U~n ztcSS=1?#b((be*$Yx=e0+i~s&SZKy}V1OWt zLrj8xc4ixqUOi!pI5NKS>aE{R-apc+uMEEDVNw(QRYP;}qYw4Owk{2UZ4JIdYXI;+ zAkK#`_9rg(2i(a>V;uvwOd@OFTH2wGfaBE5aV=NTZ+Y)%J2$%SJp)G;ZTCceHN&b& zbCB$rGs^TtpVoA=Y5qe{##ds#KQmYRD8+8;m199t;v6!y46J-E>IsPlM_I0H~3zFgj5RPLbTvSG4U6jJK1UPE*nzxc(r(H<0^a6 zmGxy~%qvLl^qLgUr9c4CInF!%L2bPXS6U0os3%gD)c3r+*8=0dvTBc7NDoQ4=yE#A z+zb%-<1MI=Hj|S9e6;ogV;FY)LS)^B@m%Cqr`tWm@<0BwhNc(mB1y{zzu`LWA!^e6 z;us_tCz=nMabj~?|H)3p6{&eA{+_ioh=@7g>u1&>brPs!|EOchE-2oA64Mr8=KiT=H2vxN<98>~YaT9ZVYETYm5e0eywyf22H>F|W?*fdFB_xCf! zd${ujK*|d%N-N)MV2-f81F*KGPum-TCfA;|Ly18P#Bs6UxMA9D0>#q40QTzb$;3@vq|^ zU-TWfZ?ZWxY&1FQ zk{=c-?xhVTaC>xCY+q?(pFFsrSUxRJcMa~I<|HnXIi&THCKzM1KP+zQ1M(-_ou!E` zTb&kS7`#TtOVeeBl->ET$H@DCJiT>5RnPN3d@gkfDJf|Lq@<<0JCzm?=@bM(+DjsUte%f9kLi*;uap6r(P+OC>?tt+MHk*2ZCzo z6tGw5Lfawr_$8AmCLElfVv&XqU;PB_;J1^EhJt7V3^W2b+b-TGTw*LlW>cf_&_LdQ zQ6YLPPc%HM3|#?eO$_t;jszxQs^HW@sYNOcF-z5UR`-W+ZoI$;_{c|Vunif67*Ue^ zPdCdT0O>A>92$!s!wg}Usmn?}DZRqRUBxxT*3*$SGkv z-S+R;`Pysd5lT$TC|45sI+wL1Kgs_(*9JZqWVVk>VU0uA8rchf!T5^zfIT!Wc*zQ# zXO*{rdGz{sjx4S5?hShEJtpLx`ffFUe;Trxy6QCRahkGqRdtm$Jbw9U*0myU!Z*aQ8EPb(D$kNU5^L8nAx z^>m%@em%8VF-T<9LE{#{2H8vac3^Lt7ir(TBKdxBafGSGVhleO#(1_*aY}v(3DsjS zdS)mLO}MPVsnWdAbU!D*@2-c^2_x(2KEM|GoTYfohjeXC=7(P&Vz|5_`R9#e?g#}% zrNirr^b1*@aY8;N1k@GG&i1f%iC|r{ z_X?0L$eiIv|4C3iCR$$%#phFgx}=)0P5b9@E%$7V=(V@xvm-c^wmE`7j%Ow# zPujBe1M|0AQ}pOZF~5%Y(@)QYE897bG;Wx|Hj+QFKwF@D8X$vZ{!!C12;?HXk%-Q& z?JvO;NKoo$DzG72!Z7>R_|$95WZG;z6RtE^%lpGvo+EjT{_$R7XNr^^A^n zEe79!Zj@3Ki^+=3R}%T z!~MMNlklosrwLoampAL4liQ*& zso$*oj0|2;x_l#P?kna0??F@K!rvxVgTz|36s|=4%FoHP)LftZQgn6B-#-h(4|y)% zECD+mbyfYm-2`cgBJpMDF>GG2v{m#O9Y8IY@zsy7JQ5Mz) z9nHVKonQ07gX@L!e*hq$B&lVfP$XsFSQatvwose5#B73Q(lrRr=0V@eMVS&0d=wi@ zbFhWGkPg2V5%RaT%hU8d*c_D%3-Q!VV4q5JKoih8c5%7t&*jrn_^XT&@!@{WxIMx@ zy5Hl?m6|x1R!t~RY&*Ha5Lc_N+TYI57^N|k%E_}#yy&b!OkSJkQa4e=5qblhn!Hw` zBL4C3K5d<+UXEDCd!ZFPt&C9Te=e?B1V}M1j!`b$Ucb0uoNr^$F)Z|CW|-z>UwezP zzvl%T4Jufl=`kD#^60u}iNBgNZ)SOc;S$|HhnJi?sG*_OzNw>C7^$zT(lN~_s%X6j zR~@#Y)$%%nzaD*J<3INJiQ^^GEAQlWCGoFk6*5fZ-{l3R9vt8xjpw`ED~bJ*S!Yc* zx_|O=^y>B)7HW9E3kKuW3>WnVX(sMji|zqP#DPy|HR>{P zj5#1t?2iPsQx_r^W~Hl8W6M2JA)9$PyzO&d^o~6#!i^>p6wM=-&dzu*OY3K7`!&s) zYbTzD03@uUaTGDdp_71=hHeoFnj}VVUbJc%n`31q%-|=8!RQE2^PXIDxV!u9rPP*x z7*wVSQO<-|{$}@+G$a%W>S|igPweybfZv-JBKvZHXc#7^<9vERur~ewTGvJJkHZ2J z8w)|If11CG7V$@gODoW^Mqi>x>T50v_YAmuR?rL5g&XGE>#ldVei%}nA)X{NkjWZD zCBK&p2jcc-8l_pBg$jx_w2j9>?N`XsEBKJ70N^PgtrQ-zBddsPuIFW;TW9R(A>&@5yi1+zUDf zg_`K7D%M_Y`sMmG1(vb;jtJnVAK0$3KyHG+z-{K0X_=o`g@50GNt6LBrKk@V4B z0cz5%y#K-WL#fp!Y(g_JN*soo&upwX*`t(~_sA=LtB>7nRyu^qpatDK9qGO7PhTP zx#08HfYy+cLZ$;$bUawCtP<)9zjPA1I|WdD7J^@HW0^v6{XXw7yU>leE8;IDP!inx zzaRWQMVn@n%>{PdY>sCB5uyeKGgW8*fUuInLvNn$+Geos4_YW+%TJlvaF5r}*g4A0%+5Z!_X_Z3*?*re+fo zbm9Cqd6E&tJSu@=6CY8<%-vTTONXKEx|%z@{bN$m%+&+z%hcVVHzTdezYiWEVlK4RtS!37QRV0n!JFRS(ALjRgx>C#D5ZnudW?G46$CHa1@sYOMdH zh~-Jk{IZ%Jbb66leK+oIMv^Vs&lCBj-ft#vH~Mt$9)$OR*d}zY^oPb>?a|J@?!mri z0`ODQ#NxXb=nESB5z+(kG+x#GIZGsOAvc!lX!pGc679Vy8?g0DNvTmCWxRXzk#pDwe>HW;5mr+%?q2~Vfb zq#r`A`Z6M)Pq-jA_x|?(2oSySe-dNHV|{6r{N+dj2t+S7Fu8ffb7E5p9QxFvo4_g6 z6B^Gg<+Tb;Vl?CP*6=@j%GNl8lZ3VK?qX5IhC!toh7b?aJ;waOex3Un=F2%vlu2``dl zqr1>+m!Pvp6EI$TC8sO^b&D@N^yfKi(NC(e_>DlRTol0vr2TS@SzhSiv<(OPhj#hl zIW};n5I&lOP?+<(i&9w(w0D+ke+A%&xKq zUg4(7ZwBG%aBSoUhec02?RdXbfho9Q@&>;q9~ly@>1h3)W18y7wsJhz~0Ydtd!aYi)2wIjZPs2 zD`ojR=A37}QH`OY6?O{m?mW2I%Nj(@m&n4zwar%}Hx&KM*753^5)3?7~1v0me5|6ZQFWP{xu32R(N8f>9GpsV#Hqk2>zQy zUN@;a4dl@>06!J%IhR|n-Tkf1*9xhzdkdMaDZk1|c*^suy+tj>*-`Kkse)W3RXgH9 zt!>2D0vYQ_|G0058*7S^-#5Ps(kQYW=9_PY*isW^ysTZy={aJ)DTX=1gmQ8pjrd-o zu;@_J=Wvs9upbd(u3S(f$)yE;)pJ3|)WpHqyw)FXmkOR?t>7*MhwG^w?Fa-8d(onK zExvga+Fqds@@}#j@&Br)gs#l?!;r}CxRFl@coc$=4GBLeQS3+Wf@h1C@znlNi9P$} zA`9drNCEef;vHAMMB0 z=T8r2)12$0FtF+Qte9kJb=NZcVRdoCK!%zlz*xLs^bp+>%{rBOfH z!GNko@u;@FEd5g$J&6xA(9QDfG(qm_=YbvDryqcuk$Ado(zn37JX`xS-*h8A z8g%;!vrG0A=?^6u*?yhA9FjZLv~(uPqkToYXzMhK&4CW{zTP z+?S6{*Zt%Pc_8!d1k_)a8wz&%h&j-X^iV#IUsgt+`j7i3RG$*M!53$GRTA0-#^_eb zq0_(hT5WITPW80QJ;A6^3gi`xnnnI?__bH-0zIdC(ri(?W#-Y)^9O=W-yz`=!s8vH z$>-=!v}bxeiclYw61k=SB7387@L?3vCauaIcAymREa_RuFzif9`fg@RheC_ZS`Qq{Ix{szOjL z4rZBpzLT~2AN0zsBC1W>C0(q0?AI6cwSRHdtBT%@4&S{i1|xp@6R9d`RWzOt7 zX^e;w){d6qCx`$G_SUiT$MmLodl}H|2QV*kq6H)gRh$C$o{I&RHa7y4ITa=gd0N=e93(*o9;%TK{@F$7;o@&Mkm_^uzmg4ii%zw0*>b4VOc0IzR| zd7*^NNHWJ(eUY^d#VuO*T6!w3=ZchEA4WS`{w}AGw?S%^J^(;ZnC%+ySEcl=A4j=G zij53_XfkG6@Ce)_@t@ld3y$@4=A_$g9(_HI1moBMs2 z=8O4O803$pdGBc8-qDca;rg-t{wiU(TF~dGH2w6QKK<{|%flfx7uD#3VgldOLyNKM z9tEvfQ+&{1&2y-dQ<}T1Ib22Wrsw7J!hwK;|D8yLztjOrXs(aJaZ4jo?7DkxgPlDrH8ZlHZ8Z}eYk@X3{JxlULiEaZO zuX=kut88;nxUb;_j7uH4uu4wRS+>APv)OIrJv&jvBpjUlXI^Ogzpoz-@7`qbqf@yO&FN`)0zYGNejXww%pnt_DOkKU|%+G zHu!2w0U+yKyD-D27!rtoa$^&-Po&a8z28mZ2`J+@V)fUnsc(O4_VGm&t(`i7Nfn7Z zbQaeG$2*=(!yaG4U7$*>qini#LRFm@#c6y+&e_3~&O^bMl!BOEu^Yx z9%4IE4`Lsw+Js+g&lo_bVg%7CUz_IjwHbdyhUo3BjvkGd(4`l+8Mk7^T8|H;f!I?sY|JF!17aC% zkEwJ;U;Z|A*92Gt6?z1le&TH-Nz^3;BNR}lJ`I5&8(CWljF5H7fL z@}HR|a`qYnVeEQMM&<9Bhwg6a+NlZ?VpzZ1R{|yE?pzH=Z>m@j^{(19vukv}1n7=K z_pB3Sho*OnO^j&}%lU)39Vg6b@%9!4;qBIp@0aUd?fLosXmZq7$dR3*{cf!vXrZ?R z*?Ohp>8_@*Hf|D4GPudzy@1Sdy)A!NK;QSq&}QX;N(dX74rd^5x+Igzy|J_=zplc< z611Cq4h_T!SA(TZX2m9sZA?}%TlXtSzWl0|!Qe&=w&oWM+x@-sUcSzZE|K>%49uqZ zZXe8I4YPD)n8wP0pUm==i0QkVwJem_HJmkxW47m-Lv>b#qe%3>%B}An-)0j<2vBpO zx(t7ZUvltBJ+_Yro--)jpmxJ^2kQPhb6fYiAWnf>cjRbEItS{<+$;pyD$VR(+^)}{ ze2>aUflv;DQ#JI*C_@Y6bcwYQQ8%uVkW1OvwYGK)ygy`(aiPipEwu7 ziFuk3QKd8aJq5DALJ7q%o9^+5mo{U&3aOzmzC=;NSZGPO-J2g&Z4>KzL#*byW~P6m zYrUEhj)mrO%X1ZUJCeG5rXc`DQSjot9y=e>WJ^;q_dvM{dD63&u?-#J#*BQD9T zSigb96Tx>~XPRak0s`6o%C`(N>Zn0B%pqqQ9tzNuziEBA_r{s@%w4fK&&P+t3{oNZ zMV9ZG4eRhzY)Ci|FG%THX#QeABHIt7F@i=5ldw ziHa3|C$}z*|;+c|L^*IDjhxJuIhKWz#VX6rN7hQSxD5n(wtTNcg*tExb*kUFK26TGgM)kFO>?Hpjv6mb?wQf%VXtxf z06O*H*)D zEKdQvo1I@{)iXl#kqb!4&qP%b6ZOZAw)B)b}w z_*ffVMARrjd}P%>-)DutMpAvbMtXHk2Ru(sFcZC9g^$#g>&BNpNkBm?joI<;Ox$B* z-!9J4IH5JQ=pSpJIHAxacl%7spjCH4zp3@R`o!OSTQ^V|c1uu=yfLA$g$C1$aRHPy zHI4SQPuLKrDT!uLe||tjFnsmIBvWgpU$Bhz!gmA&+Wq1T?uYC+N3MjPvqC;hcdAT` zuq|1ETV*)C_s=9A4$4YaL>q_H>AymI5?zsF9v$dsc^ck|++&+o)>%7oFsjsM#C3jN3UWn+ z(l3*vn+Y0iO3WV{$_Lm-oXb@YtLW^QzrK_k2uuDjC}`4GJ69pG=wO!mVS{KLVLf9{ckJ!rKfiB4JkRBWancQ1z~L6Y9U{(y*X7y7r4>3Ebe6I=2?7B4-=2gR_F z#%AV#@MGU1;e@q#W1XZKg9eAshN+M`IE*Nf!Y;1jVkpyMyo$G|Q#VN*g{s5vzc~P9 zY6vd|i8aI%=y}We$LPb-g;>G}*al?JHK1RU={xw)kDinN>Dqu>F3&S9P+UmJi;5XkI;v1VYCWW?$XYxPD}Nj(sYCm_IDgajs)86HJ`A*$Bfh{(Gk6tcn8$Ea zW*_mqLzbmaF8Fk_B%`x1nF?IEBF1T*+teJtR|5JQod>Q=gw5Jvcg(QdFU--Z!W4=gLQTTmesbzzFER+2`(Z0Gb zEK3d%FtFA==p;i3yYvc)q3Ac@)h2`-hjtYwe+j)Dk5SA9Dh&A7j8`D;;8TJ(z)c0M z5{cN2ENC^6Z|95Dxm+@0lI0@oO;92T6Y(}%_Us&$ukAPZrum9_c z2cgZsW)dXj=znG)AmSc>RJIND$%)z@U4EMK>%fMrTikMN*9a zc{jn4_Rhj_bPp0)_vAHwpS~STC)LIK4HRPQm z+a{L#{)iC#n}m0IFK@@r{Tqj$e@dN6O2yMeLT-K>sB~!sgshuMtLRZEf#M=)hZ+)H z^fTUV>ciTWH zcB1GWJeRV8TV%+a-(=Jk^9MpGL%FY|33*q-3m-+ewqS5KVgsd*dI^h8XQrH}o=rYE z@EYP~@buBTx}nWIjqR*Sc=(Ez9>j#m8jmFuNCnvLOZtX=o|>m2#(-AF(V*g&OnmsP zCS7`S&_IhVaGu$JMUCkA0!JKp07)R4VV?`#S|2xgF%u0!TCFk&|j{P1wF> z$*JVcOwR!L$aND<0Vrcx=@o);^jOTW&-OTs5~(Q~_}7iPQKs{ZUgc5jHdc~BXE9p! z2I1G~uq~x)0-Esy7^Y<>2{z961w8Jg@VK~0XT&W);~X_cJD|Bp;cxrNt;~7lO7oZA znK!--x*J2D(@2TNdxnL@?(XpOdQ@)T@+DN4HstFAHphk_*S+m*x{Y-wG~l3KJiH^q z@__E4uCQ@^u}Eowu3dU#GzVJNRs$0`*Rl^94~gBd)?QG9dNommTvwk9HTuGwVMF~q zl#!{$?fVSZ+3I;=^45gR9U;8fO&R+}ZmFR?OB|5ywOeBRH7t8OMpI6+h_Ygp3nJPU zpsv`6N&fMq$E@W?WqNdf5x*=AEkXV-P3u^vJNIAM#jz~euuPFcNx4ERJr|I?oJC9r zFpV_!iER8viqMVXS0@)Q6Awr{*vDeM8bOYi9XN<;Gx_fD;u7ZzpDr+Mq*#76K z;_0!qxR=p^Z8xy=YC0cESLSRbUq;pX(!nfs5;EVTTK`D$`ynNw;kd-W2R8wLd-AM|5mM;W#fC_@da9_sMOgnx^Z6gHEf0=--TmP!0k64 zw{O`BRhAWY6bPGGPERm<_*vIgSSPsVk1G*CHfch}{^9J+(lN*!N0Ejgb6`=|0X8NE zM5b0`sYCb#S<>>0Nmx3e+zSV|N0sg_yzeucmAHClnCiv`5|kq{)5^b%Qdm?l#04i8TsrC zwbhApIcY2ERMsK@L*aq{$CQn0;w1rOP11|bt>4vE!joyCU8pOky@i3P>d>e{^bMsl zq!pa48H!MiX*yhJ!Qz=N3&@{CcWKn;kg6A5n8+1{Dd`keH+D@l8PWha&xnRXnJ`JZ z1yH!&0i%r$80CGq=j}!g5e{aSt@6Vd``j;O8}&0_t~O{_pZ1iQ$Z*qw_JP24#}zvC z8*8p-;^>U|n>D-r(FM(bQ6C5X3kO43cIHfnE*93819X65YxFI%5{JVWvZv9Q8vk%X zM`0@a1zc`v?RYu#RngSc!{Ndb=Y9l(zf;QOUR=1sA}`g#SuS+T5po@ZE5V~E0JQYz z-|rNBNG*m<0g=YqhM!oNZBW)#bNq;UCG&U%6=K*%gFKFv(~!q++&G{$J?(HVzkiS= z?{eh(IxbeeByk?F)y^aZ7r#@sh!*`^2Bm4!|2RI@F{Xc70Bx7$^4$%)pc$RClZG@h z6&1#b(}Ybtm)~eTEcFM`=V~^+fr|KT)uFiWwz9&qFt{WWQ^QYN@ z@QF1)I9pE+!4JkbKaZhk9UG>3dQw`A84#6M;_$0T+~S&1bnfc*Lfl$9{y zxjRKztLGe*Av?+gzlb%N;t4t#f~Z^&G$Vd|45S{WE^^o9_vd{q4a@`&B;0(XpcdsS z*C)h{_$f(E$@yj?Pr9Z7ETO->VU3$fz>I;nz&o^$fjc902^?*%&=8$l2==Bb(}9Ln z!!r+v@;}NhS#cTWge|LDUhHXdUp1@CWWXUdfEgR`jjN5-if2ZfB=(zTb<5S)?I&Hd z(DL?us3;=YsIx0A=qo5XdS{*kGOe1)ql5clpF1PlKU4JSvf%#5<#}3=Z&rk-73rTj zTIp2dO7K&M zJ_A+p&TXkrXnKL^5jShuOMJ!^lL;;{c(hCNy*uvZ1R~8U-Ss}HGjSrY#-H7J=2^9h z=%hJ$Z@&@C+TY4~q4M+{FW7$b> zM*UA!%vw`c(6^A<%b7?q+4LL21)AJJ>JppIjHs~7_yhDN!zhk_UNQww+^Ecn%e4$L z<7p}#!rt?Vg{8GVcp76sX}!Wo{Kxy~{r5v+6omHMVEh4Dc^!8C)F59{Y=*C~%*0<6 zAQ25mc7Dj;K?kMyX?C|w4mUO^oHc=h+&QFy?Jeg}P$6qnoq=Xalfp&J1g*oc-jrlh zUx~QvDz8dV0iX+0%mU7PaVQ{M?hLcxQwgh}H(HY)-gfHMy61Za$jYB`QZ~+1USCdv zHF>p0>p{zNv7Aac-LR9Oo_SFl?!+d+>vy>q zshk*#OU0(3_q3b+UJbBTZH|8`+lb7buQy2~-1n7dSi1i~`L{v^bW;gAe=S6XZfwlO zA@i$yy5?~a<7hyl*td2N$-)$ISr}rxk$X+9DITo%KYI@#LpO7Y5Q;vO_&Afi@v8vx zH$+^itO-G8J9BOXT>iA9`4{+|5`k?TNFQd=EKK5dpVavKY?)S%^$81pfNTsNdc!`< zS*r*^K10^>`+Xx>rFTgR#(kJ65h^4Emfwm#pju2_0XQpinyfc9==Houf)a^^REZF3foQ9LTewA)jXLTU)Z?S)Ai+SdG+@8rsmByjv$vV(|o$agam68;U$247SRGVG+@9iHrYcP(>c})JeUf^4OoE6i z{C-d^*wh#YVNCsl|TU$h=i zuJp~$7fNcx7?H`cN&_|lXAkiYKYnTO=R9MlXV92=Z`1HW``_2$^dq`X(5y_Z#ZK`a zKfT%j%TP`kXv+BJA~V}e5TBUVN2#gc)n-4~M+0K~>mIL*&fhC%5^xuBspXHk@7-xG zXs>%l=k`uO1-oI^7ESEp^+>~OTj2Qs?cy{S3ABg^zHWNsG5Gs%iaKGJX@D@Ix=27r z82bnOn@S`sm||r!#Y<2F6C#TEog?YBV=43`&%nqFkM#Pp72(g&I|ivQ62>KX%aJ306GD^$210X*l{P!eku&UfS8Q$Mw^2F zizZaU))U6JZuhqT(h+mBoC%iVv5wZ)f|<8ZTR#=c&ZBZObpJ;*xa4D_l8R5%%IFO6tqL78mlzO#i5A#j?_|_3SknD!Yk!&GBXP`Jk>UF& zTz>!iWzZbM(c$xg9!7t#zJP*W4m}}t;wutMIRgpUUpyDk0>%BlJR0KKjAG(X|Gx?0 zOFf!<9vq!vVDk$*6yHo?2)}l{>ecw0^#li;NSB&;+9bcB!P@oAt^iW;!iz!qjq3=< zE8aFDYwxx;Sh|mPBOd6V&lQIJsjtX+Fi1}*2rO)(f%ic(Pet_mUSr13GI)6^svOQ) z-Hl{Pp4sw)nrJa!FNttx0+a+)ly8*DR3%4peU#xw$MzzQZx-m7Wf(qY6r9|zAwxIY zlYc~OJ4^)4s-4AQVNtUMDi$0)2f(12h&!7P+E9_^{XNTO#VR!$)Hl?FWw}{)!!4tz z9Nu;Kc__bc|36iVo#=@doAlNlm`x!&ldn@%t%ChHxukxt5Bc zQME|!ZPB_}+GR8WM@o8>0AQeQ`2HAv_X=4KE2vZ}Fry6t$9)B$&hDiCt<^@vB_DQt z&rG9sW6aaIFm|znfgs`2>-inkegG&ODEoV0uhwOSjWrsof!K%ltt@lhVdU@FCw^@y z@H^z;4}_QC&H?NFlP4VCBu%3>C?QIbAvTH)BH;L=vK`(c!d3ZT>5ax@pG1PNg!xYq z-Z8dgY5bhAEVTyP10eaO0Yl8ljxT8OB;RFy*=nP2nuh_S>gaD$NX21NSYFuf`2lfl z0C7(NRyRFp)Q)8M2WtI4FUxPh2(@_suc2CsL-NdPnuVMn%tjh7_guSb_APm4fkkJH z9O8ZEY4!J*35SYf;MqJhP$qMyb36!ul$b*)ynmE~`zxK0ao*e;hUULvV|+aPqE4>( z_p?eGn}`igs){xZD8n|*R(F#s!u#o*@nJ93f9+frJS|YHDn?gHUsy8nv&x;U?l=4% zi=N~W8|Y9gJ_S|fqnBfK&5fHQOiu<#N8S*4laAmc{T}|En_wG$bFz`rB`yV<7vX*bC}i4){#ZIdk^<>&IR3OVSY>Xap^qtbl*7$;BZHEG-FGmJa&m z#Npym&-fJkZ}>nNIN>N9SCBP|QL+qJT~HC>Y1%`zV4ac&mgo_-;+YQDIA5HOTvm2a zBV2RTFJi+9Ekm6yE(?33v=p};8sm%}ZN%EX-@M)+ApgWeG1H#_YZ&pbk72NEx6_3*KXX_vBw7*bY`K1To$Uud}I%q-VD>{DPK5Z3qK_MoS`vr2w^Hh~>Bhu}wv_$}8`IMI_O^ zYmSvQs|!(q-2V(;EbSLc#5G<;m;7rEhiAu`;CfqBO)39=^XIsvyVw?C3w;|bF}Q@L ztk0;lTEdI|02}xbeor$W?TChO`gj-; z7r67pSyJm%#-6v22pwm%WJyqDcLCEk)Gd#i;gh5{{9seBT|HzY59aMiRY8r2#8hTs zwl3JQ_qaf~*t8xZ$3^ zk|OHzY3gjTNH&%>8@%{Mpau=No*a`+bWUc~I6zV^dLMxcLkX6MrjxpazNJ8-zLJqH zQ6BwCKM!WcY!v$T?{Ozc*6>wb>=_P#Z-C~buksEqz&@XiF<0v=9@y9FcVR)ptv+b!#LX5@ zwa4Fjd>VzU^LD7XMB&|8^X<{$vYuAu9#ws%^vr3yR9raFI9E{+=^R{_jK$zY4mROe z2{M}#GGdR9s^h^Ll4?}roAe-o|8+Ga>4(LIPZx&U0`#TI4>Ajuk*1Vwdo!c&qF!Nj zivisw>p%Lay)5)2bJ%GQRK}BS@LcsfpB?_b-FKxGJ~zK-u!+ zFkR+yb!sKQb^dIoXkwh7Q+BLwMdIh#NR-+|WMRO7l=*Se^1AYQqXYYw)+l6WZn_^2 z27jQOB9mPsy^hY)Fsi|s zkMY*Mb+RKKU|JhEC&?@fC~XGq%6H{Xae=1g3Nw zv=r+dY_W@7X6s$9rzdTHoVjwD;rY4GmT9MGOWx(tU?cPN=KESoZ!G<3V-?hg<7vt;9fa>Dxj1y>`XUSS zSgju>BR`BEdr;ex555QOroEL`km`|zw{d}Dz`!1V$7|8ovoS`*m+P!fEyv*jQftj` zNdM`6mAg8io`1dV)mS3jy^Jb@AA6}h)MWlB7@QMCW$5#Ler36D;!2+SR7ZRH!afp} z$%7`p+;&rT9ZgQHpskW1`d2yMmDg&QeHu#$<-8HG(`+j2E&d=`nbw9xvx>-hCib z(s6q*TSv7BiFE}ir@+KV5^x>kp|$J-?FXCJD|?}pKSwWh-vS%3kPRXnht^ReHrmf} zxf9(KnDkrAS!H~~)!+mkG6{m6?rAJ4KA~lf@ClDU73Tl&IpARA&eJN9dRSV5f9N3l>o^=Mf`6RbJvD_>lJ|% zzKUwuE-=@rUrNV0?<@zVn^=2L4AcA-;XPCKi0;3eMinL@wSVe4)ygBrD}(L=z>NJo z2=&_{YG>ZZBgs%CAQNSlz&`-{&4U;2JFTGlwDQA+<^>8jd_aih@Jp1!O^sn|rgI?|KqaZXOL}S67{Nb0_X29mQ04^fygjSW(c^Row&M>g zUrn>|!Zq3e8uf`(m?egCVT4YC7IPYK|Hrk=a}9%fW!E51)Ii*pmsO;tt&IN1TpR2n zphc3IJQ>%M_KgMy7o{XE-43*boO{t%8`tt$xj9@fgr9e19IsM5=i(6+SKr(Vg_Y{? ze5dLpXT&wpd%)o!VWJE^L9gqG#Dgs8k{SB|Ik)%hRW!9^1u`K$nSQ?V(#&S>OtqQf zR-!D|hZ*kO>3Z7o)OryI$i%*8dlf`wL{blCpcc>ZJ5ZlQG)kTmG$n2-PlG=OYPX3l(S37^8#EoS{MXx1 z4vmmQ$8CQk9f+j7{jd20FP&`%nTv0+0Wj>vCF3n0Ttnk-0Lx|dJ;|@H8%*(rY=6(J zB83y&PE(hF*Cj)VGU{pb)sj0hafDBL535^Kb_y-o!dacy}Ixyf{LO z--j=#h;W?eoh)-%D_T-L$Idq?Oyaq** zsHv{xw**|Hf%6mmJ-X7_xZ=E9oXAv?N74*Bh?%MO(wb2IATN_w$Wth!KiL)(JoM|g14#<%HKk^rhnxaRB*(1^}{+)xkVctn;mS>&MwF; z6}zb_XaF=rLx8H{mIE3gCdo7m;@GsMt*vCXe$94>FCseW(mV%My0>UW-BlMY=~>Q^ zzw;|o0__CRFKa`q5iT!J64s#g8GJU|R28_0lDusEGs)$Q(nOn0jD_vxZ&^Locnj2I zTG>ly(huAR0R-J952P%}Iyev0`VsIsl6|CBB}$!9oEVv9of-}vY+!0}l`}Kj<+WXq zAq)#Y=`SU=F8{@Xw4^%!D*HBZK6_%B*0J=;U2A)H{O(x!DgEfIWPj(|pjpUId4E*T zzS_(1Ssc1~u4k2vXlBNKgPyEl-GAtB`$H7`G&-bVg@Rq?k91!4b3!($ufTZ)l?I1v zwWrMgBx#2uXaoK)#tMKQYzmH>7F(NU)`zV|1)xg_&t?iq1p>ltwj`guX?IrdJdl^U z72oKPqzPS$z3>1t|C5Qu?%uT1Q;v}=Qo6fYKp)^4CieS9+V$a#<8S!`-?2*_kTi`k zQy3I3bNqbs_9Qath>nJ&=@J~?c@x)>5bOLYT!)MSHD8rvvjJv=`q7{kC`1g1TBO-` zp^SKKK_M1}v#ri!u7`&O9&#;q?v$`34!Cl_3r&Lb-K{yg#>UoxfJXeH%I7_H=CT|y z`%rF3yzXS)hBM_I+=0cTMDq=Nb3iX@qQ~7(jrpYm8)Ba6=EMnEKqIfYe{wcW}HbBs+wMaLm_W3-#PuPSa zH|PJy(^m&X^*!<4r9+wprAtZ)5hNs*l#na_Nh==-Sol1-n}^99Fw-x2{870Z&Zmhc zD3L^9UPRq*JbwZI9ZwUK9WWXdRDK9sG?ehQ7Hyv4J5q-W6$3Ct;$PhrI#}*lw7|6I zbY?992{&-g=VO)5)Z)BmTS9rWn&FAkqyEea_KmviHRlC7KpzWAs!F^m5V74z|>H*)hsN_K^9y~(!dIJ|Kc88NWSc3zM9>`Y#4lw6flclG%((GHP3w<(L%dh z+4qKS%V{Hx4&-v{bn@R0_>H4l=EtS`OD1ks@1)bwLdgW14ao)y3tP;fT!kA<0EQ+f zG35x68Ff!N1kefXE8S-~cwbq*p?+|wg|Jmp5^o!TaEr9gv09vC^5NJgc7-(YP4*yA zF)(qZyE5CKR=8y+87fBh-&ZQE@j2gdao#owLZg1(#MCe&_D*h;GQQJSO;wiM#&ztG zO{hsrxaDtwai&*3e+K|!tHgdDpLz+g(9B;Wja#hS-W2r?{9P|>TqkiI0rDm%Asy2g zt5E}e;j~yIX$QwMa?;sM@D*USP+rbE<)x8#c(wg*%1wEP&e(!>G zgbdvtv?r_d#<&D$u+5;TR7O0H5#@qheTWc15}iZOEuNAd6?+S*Jz1~A_AI3i-+;h> zDHMk;!UktrcPC!1WXKkOlga9k5e3i!)AnZC74^J)!!A_jy)V6y9k7ahs2$?Y`Mk$a zuReW=k`&1X!;p0yN>mr9mze#Y&3LAhwH0W5*NNR#E&@bvu}`r2&aqc}72~Ej_)&%B zsm8;kBT@vtgJOvHDzAjrND?E=o;6_N=14=g#>4sgvny#(MO;x@`wbD&< z9f2ykqow69RjL$nPa$rtyShx&YlLu6Uf2Li^ARjP$>fEb%f8_=M89-$67KJqPKcexgySri`57zUDU|SAd?5SP`^9ku)ZlJ@)9^8-zmaIf$S2cT z9c0!vCT7+K($->S&MIf^_Wd$E9+L^NMjfQI?;B$Fyj*K*;pQB##++2<2(n|1NF!sX zO%(<0I-ce1gk3mf&2!E~mxwd*TO3n8&HsVVC6mv;29dN(kb+84O`yvFGfSgvC^+U) z1uPXi)=K~x6wF5X=95fP8(GhGP8*-z#&X&qtG;V2o`MI;sME%pKeY7ALV9w*B>}vd zNiG8NJktJKtGZX2MJ!?QU-j%fX}%o9BBjJdC*rZF&aWya^a4CH#l1-Fdob6}Wbm(sGJS7%BQ@``aT>JL31JN`<<0lHf%d_cW_M0iu|9oop)`%`V8}&~kVD zjDlBHEIdZMzevIReY%>ryMe|gCGYH`GVViiUQWa_F{A);} zaoZ1BpP;R?FqC+`@$H%#c~5k<9Xkl8nlcUT9i)Y;U`O`9s;-!$=dZ+|vVm*JR!gBG zlhQFI@;44xtKWV38wf6u>j1dUEXCGU8C~G2MLlpufa5hxpxu2PqPs#K%{3XB(ntY{ zlRJPrh8p252t->AvsVtjr{&H9+le07KP^f5ramTj#6v&|77+Ir2b@_MwbvTrmO5v`viZu zkJT6YkDwstZNuj*;+l=>ZIE1mp_2~TKm6rZs?ijtwfts|(Sso_#106Ap0ve$;Ib^0 zC$Sv6-2IWaGbEcJjOAV^P!Mzks|hYR+tWJp7Wx@mCYmiQKgNar2Wlb-tJ)$qfBC{& ze4{BdC^w?Vtdn~)MpR?8neq*wWyM)d+H(|DaT)ihT)9pB{d|%79V*jl0-<+aYa@?F z**Dv^NCD~B@9-&HsP#=>ml}6%s#-alJ7BK_pfkfjxos@8$sg=CmAx`Ga}%BcKf&Sf zDNwQ`Z)ff?!o#DiG^k(WToI9lNldWTzlvN*i-!&i-mTpAsFKLUx7<^7`rS?9jQk^u z_35qkGSNuBOez*tYc<>7oGAMIC(>>!Fm!%`ocW3c_uIvCt1V?0;J}?NQi+}r;3;FP z10I{!Ol%qtP#;H7pfzvIjwI5znZusN7dTRXi4BfqTzO50kp3^;4ESMDJ!RD9hd6Yu zoz!J_96mBaL)JX))yLHOI)m@f&e}&>jHnPDvn=;w?8<75lR9iY`oOXn`p89Z>V>?4F{#i!TB{6cd~3vc%i@D_v3bWia= z8Dd9sH59!cR&DI?6dzD5YxE9gU`O4O$5syg5d{Jk-E07OY+Q0s;!i}~)Hw9dx+%7S z1kFEA5xCrgoyeVV>$_~yTUM1nOB0|vvO6y6<#Nv~ej;~IZd$8-j@1ombdb}n87}8C z3Xa6Sqf_k~rQbN;-}4pz?v4||ii%JOTGU(Fc#&eCFdBs?DB7w6M$NQt6QjIO-p^XU5-mx1Z0T{9u3QU{OH{zmKD_44&P&Eh?^$Q{4VdsLcT<*aW$H9wh@MNpKUX z#n(N`u~M#$PsjRg1N-ok{U5}kTXJ{%XwIndw#<2f>mEgd(P2P0EmU-aH=TsQvaGQm z(1s=WQomOkXRlV$MwBSnT$5Gv$Dc}w>|6bl=6aj>Yl=#cupu;E(v| za)u<;%36x;6akui8PBjp@jd6sT?bcUbhP5~q+Q>AkT)K$*mO`&FI(leP$cpAL?O(R0P!3sv*Sx-(7YuD26NQ~TvFU~a;&Vt7Kl-B-2##_|<>Zn@mJ+qeLB z^tI9rAKGP2sd>qtY+9|lZ(6+%2th0{%DODFyT;!Ge|s(V@n(Xm+#hXpjF8wa!Vm8; z<)`Ddbn!-t?{+PIB6JWSd{3tJ|1Pc}f=B=yD8d>pX=d0gs$Xd59wZrO6|glr!Dn7l zOy1Y;=z~E4?R6p8j{A2m$msX%Kjd0X3y_hy^&SA{S~Zss-VCQOC@=F!cL}Odw#~(zjblEiR~}5TF0KnH8yq!f z(({5qoNG|$_W7}drjTSE@41LJ>@4O9z;J;|kxNOeoi7*KTCak*BDp|Km3o5j5Qs%k z?Hoz}y9?ETIOHq%p)SUXvtiR4 zu2XH~4}TV`I9$c{DTCEQ*omVKcgfkbq-E(V)^`Vfiy6Y`MhklI!hjMQr-48z6zBlXm98J;y z{y68g;)dTu!_nRGm%Vtaw(^OFwDTPA8L8pwkdl|Pm^94XsDzDADP%3U;3^Q^O5N}w}-byksj7livbe=$!Nq$#2QkZm>#4PXiW)eb`D>2aanz3XJIpe`T7I!@wEv)XH zeF-duzu7Bi5wj_yXn*@RI7@DJJTlKBaY<^Q?_b3=%2)dnHK_K9LF$*pq@h$o%Y&>c zwr%s2VVdFzVLy;y&c-e^2kXO9X5h{I9aTE1BPy>b?myw>zxc7eyfBX8i^{p3<1t8#*7A zAX??`=}QWQw(s0KY(&IxEwzL}8)`o$*=1T%zdqJmW0RLGx4>4u2OffoW|}1TCe@O2 zOZ_?X6K>ptgq+nSAlKF*zO?D#y!F26elLJSS)UD_mjSYb(e|j}Wg}uAl7gyo@L$;M z1X2&z+Pwf;{Kz+HKLWp>g#g{nfC+m@A_d>;4XLJ89&9M&7{F!0RvJOr^o90gb;sD{ zd@u^yQ3B)@nt22<@h=5pbeLF7$=UY-QZCg9$A(FC0 zz;>_DG!)N>%BGImMh8X<_wejG9_7s1z5A|_8C-N+nWNqqcQ)r-zi`ErIJM4UB;l%D zMY6>8>li7oD0PnPmj25`PD1_?4TUK|%gib8YeFfJ9f% z`xhYd!~R=}g$z-mg@f#zGU2;(%OYQD!h=kiVRRp6Unfw9?DM%t5A&#b*}b9%m?D|T z3)cLkScp*z=U5!f&)FaTeC{MUNdnjw3c>h} z@R0lQ$vWh>&WwpBGEV|cy;Fu*W2<{aX#TCc9QY-7shSMt@) z^qUlmo98Ed>#wq{g?Q^1$twIYK76;|`0v4@3s!9W5mOAv(C|r#?i=nr^)1lcB}+7B z7ABB3u7Y>n4y^ztFVl%xNMO?u$8@sde#_ll^PfgZTQC(sX8O8UyvbHbTAJnj%Fg2P zOW5CIo>@h< z2C0-d_?}n025TIvW&`F1n?JUUhsLn()lNzZQGrb^w4q0~M02i8R zNA6)ZJ{8N)QTeW=j7bVB(%7$+v^`M$)cF zptNnDVkggT{LmD7=CGjIgbyFmzF#JV&v%(i`*-W@0Q(Nh_VV(su0N_RD<^eaq76KWDt*+u zeFG^^mhiQE?{j5cy|l!qwZcb|QW6&Hl5agAGQ|sBT7mJh)_ET&fJyQ{DLeEY;@UX9 zCbJ~-2CwzEux9loWi?UdMpNedRa@9Qo&3e%1)>RwcJ@A9HlVik|0L-@jTyA~r5IU{ zs^b`k-eY!MLba=2Kp<7dFdX(LnuVKW5BVDPZQ{d!2s{<+tIS`h^GdQ_EGaB{DPKcc z;@$!`PLiUDmt$ybL1ha9e%#-4&PdA1r2Y#?GgqYaV(iNYg(j`>F%KXEK=bTdaN|Q) zcCPKE2Ko(Y%ZZ#+|52F|uR)0DJJEs6=56|)>HqtBEvEViq{1wF@T7It2KR-oD-ya> z=t89aH!|YY`2}{+nu_<4!`~ML{squZ2)l%Z7T-7wQar;`)?asMW6pi4^K*UiXUUrk z-cKo|TS-?6fBuc|@ELTcE%b8EzbP-bDY+Q-6~BbEULJ+Nm}5A(TV08HQ+_>MS#zp? zXx8atdk{ip+vJ=ekcw4viR$p19_GUGAbaGI96qt?d&+Xo1{!aKU96iwgr*tUU8Pjb z_DDRKn*c-G)W% zMcMV=pCBzZn0Wjz?w|#QjelZuyR{GQh6aGp(fW>nd`SqWweRajU-0HTcCP2(bf&S5 zu`adH`<`a`X26R1Vx$v%g9ej?oO|5707Dkxi{qOM_fMz(b^L<$J#K1Y;B;6> z5&KH2KV#N<@BVY1deWzWW0n3tb?m0k8zcw^r?+8nUP*|m`VtH=gWvaxon}ek+v2US z2KpSwmC(*<`=_*RMyT&0he@u9zsN9f2S5j{I(6*wy3Y3Kp%5w=1?vpFJ~nXrt19?U z)l+-k1I=Y>xNnUqGW>K?cbH2~N+g<>(ECVI=riuX6+OBmg*o0xVt@5A=Pl7gnGI#m zcg$eiwv=naM^Lf^mFWq|$a6Ta!qE*-7xSz-o(#}VCO^H^?d79f0*Ppz`KSI;|;tlOUGz=#{2nf_eBXx0>)8a-HwsWh>WBeuSXinTm$7>NZ z(5!Q93cYO*XsHo!H%u6yJpn4RZZz>QWX56z+qSv-Ol?yJblo&~VG*~WL|^pJe65cm zmi3ea>|ir?e&8q!+mvLX2%L{y=UAa~ss#0bM1W>cK+rR8m6WJO(!yV1n zt*{#}mR@Fw0thVx)A8Rr4jDJ%JFcCoVjlkJhl$U-ig)2AgqmB?FP9n*Y+e0dWl+sM ztUOixE&u)Mqvmd1nQWJ15a5@gC>AMq5;7VX=l^j|f_}CA*R^e!9idAuT-dYZA6`57 zVv=lQ?kJ8HI+93ju=p&S6&kyTjcoT)tEX}D_;~~vmeH<#r@@v(>K2ZuofVm{zD~O z!F22W_oDeq$~p{JqcGqJq0rt{9V@g-E}Tda2o(4LaneWu3vqSf{>`=4bc}JBdyzGN z*6CuK@!$!cFDj@trpAJ_}{SMq+1_( zQ*lwDB0~W}jAHq~5qX321kfyD#P_i*N^*EvXdBjs?wf!fndn=ch7q$c%8VKo{l&6y z#S$+hpbfyNPLM(pq1^?%dEC1iks#UL_xdq>0P7?+ou~a|{8LwP(>_4dvET22{{f-> zSbP2M=reMW3?V7p7+gyWF>yEeuMI*=LB19pcHAGaAKWFZ8%s<}I6iIQq96WAGB|{YbhLUF?~8ld z^!b58iM|SunF)L$Os$qg-{wo2Iy0DfwuB4nY(Wx>f*1Y1Qz-5AbaF>H>Wma5I4bt# za(>_|Z{M!p!Np=x3G)Ged{A06u@E6ajI{4^z*S+#H-{Yp?n<`PX?g%v8fP?U6>DI4 z-c;Qg#CEBqwsNX;EQf1Mxaq-t$q@hoHGlkVf^xKVWMlWnTIgmrd@FK`NYEBRn8=(b z4z$IX7ggkh#Z`jYKf7*-<3Ft5SyCJ2_&m{GbskbgNrQ}21fibC&fdeC!#PTb94c3% zyy%C)+&b6hE{W8NHtuA=)U{aq#r)GO^K{xN?j zPK||T6eO`Z{*g%l;|91QRT=A`4FbAxCZgN&{A>JEufz~{KvgyO3efgIE3z%OZK$2v zfXW|*%4yc)%2f_ApEy&MUw0o|-W{*`7Se7o;oA3iiU%k0p^Gq{@rNBufsy1$@Eci= zzU)77C((w@=N%m$w8W}2To+o^TZn7>`?tpI;Bfy!bJdTy(KG+>T)Vu!;$M8jLAufk zSwvl_s7d}9O*I#$1{^c)sO$PiLDcr=9RBd{_y#;At4=tYP1UDhltG&WZ})!Pn%rHh zO^5kMmY=%zs~W|fuh)mcSqqBm5AD4HZBZX^9CXG z!hg2k8b|Iltk%vI4{gCX=Y_gfN0Ppx{{2$D)0BP}Z<8Kbe7#CTdXm>XI)V&~oBHi+ zN)!D~rnW41OQ!h?_Ejlx@P-tm0bPi(bu7*Enu_}7K+hF_ID zy1WL#*Dxx^Y&I9=xsouVkJa90{`;{; zL<0sq&g_7w04VQ`i$3tEgY!BQN|CsIR5bzqM?v1N{=k_QZ`C21j=yhE5#fV?U%qm) z)c*)a*^Gl%f1QXUM&!685W|UkPxEwD`e%PyW)%ijaf?Gj?HJDzcobmZN=h-Yxvr&) zn3yz{{=_pKEhaF+Uxh^3qChlHL*<2BHQhrzpdla^;$g<%uf2rH& z|Nk!BR#q8GoJW(icR)_;bk(hb>)eJymYz@TcFo!WVa>))53tB1?fa)Vx?GI9gM)9U zaKFbCuVHNJ>56bL2^Z`ODz3`Pp;nt~&NZtBH`>GQBbB?G{;R*wt#4d!=*q9xac>w3#BIX@9(d(vZQioK z#G`%UA(c^G?=0n4o;yzuT}h_~Ms|3cn8!W)uP(Pdw{0Sr?RIZ}g!FBLIHxsMXN(%}(g=TJQ2%M-Y&+=oUXAok#TlH=!{ zv0uW+ZJ!0Q+lD$_m{(8L+E8w7{#3WWYQ?YT%tNX<99Z-n8$}WiPh}FFV}%soywjZB z|I-GWKQr3};-Ppcrc?^N3&l^ubqhi5(YwCX%`!E5OjS9!o_`#jx5>-Edm+?+2FMVX z!Hwj7t zqV!cK)KE$4SeK$9)!YqcWM58F-Lw3RtzDc-R~mfZfZyCB@+9M26!w+ir?i1#*-KyV zyJhAws}ZU@9c_saDhQn)N?Awv{G)8dHt2V>r|9+@b0jDgE<9P(l^F)@)*P_`omjen zzzHie=x|G2%Upn0u&_1y_jS;+R4#wC`XFGsG)!(0D-Cz^mw8-;!>hyTw3@ z&bIq=v=%YJyKFPNrcPR?Ey^T%altB}?|!frF~#u+57m7)^v6q_7VxP&@NxqlaCmQ`XhsQ+&Av$|zJzC=T1?2Egc7U)cB!$d>niy$3n09LFDq8gmP52Oe z3Bwjnu~^&#S@HQ^BN}2A%X=^pj(+_1ZG6<2XeU?l_NBkg6fYqUCR?xyl(DtN+R0LA zN#Sbbg)}NeyilPF(NhMapPq3ju&pMuiv3nJxRqAd5{n1WvkWKI(?YlT8Z_HCZ+1@V zuYUxfn=UW$P4o8@NIrRZVxPbj;Rw?YA6(F<2qP6o2$1Uz#)-~;P_>u8sY`^`bO&M? zC}ZKhaKHQJBV2R^7ZG|htIJ?uQq-IsHMGB&DkS%XAP)+-%M0c#g75lRLC)cT<1@`F zvE?_3H(N_Bc82YvW;|F4J`A@NM@I02jpCZPPD%#`Yxdr5*+#j+$}@r{I6-P`5peOj*2=ceQVigXpb{u*(F{18g|#Vye{}c;}3sLHMv# zVQ;`J3VGegnoF^CQO@9INZG_SA1FTD^e18rQYVKPo z6I;CeW3VBcqFDek*V`8zAa(;l@nKjI(0sN0k3Wk4Rk+SI-0vqZXX^|BhdQqbk#Y?5 zvb7pB1bOvgz|XWt7yk7>guLC0?Nps$o}O>K>YmAKV%iyC z#(=SyoDGOROl@7~r8D?`iCN69Vt^oY_0K?m@Ajx>Md{>i)vhbh*J6Yz2Jo{n%Dmw@ zms|4CemwlL5O-ol6sk+f`puQ61X>I^EOq=_OfK~2^0*TN+G*Sxd!L?Dd>SGvP%An}ara|`Vreo}RQSbu-H|oR81nr#+C~yB zejU>GRf(_Pe52QE1fX!2>!r1zGx5q37Cabf@ewzgq>Kb2;Ib9R^0M! z=)wgU&^OJq{VV|yaZ^l2 zHM5cJk%seBh}nX@_>gQO zCFdP+k2ud$s>xZCEgGS|CR4t*W4C%E0_z})-Ux$B>P$jU6K>#f%Q=GUkz=M%d-xiH1bb}WV~)V z0!AboSOmry=*=%wh+pT4vAC#i#dZskY+}eFSvZUM=%kE}(Qxt0`ypJ^JCr#_E=R=> zYE(1IB^glDFd9jWh>rFDGQiaPyR3q{Ug9aIv+8Q&Re_UxSG~tE$g86aao9vb+o?{g8y|wb#Y7=t|-SFUD!pr zFZ6_!{qSBBTrGY|)$%-(BSfla{EYfAU8ekCZu2SmQz_W$J-)r22wez4f!Bon_HA6N zd;7EKQWAto=M3>}h^bdoq2m=a5?SXFG)Q<*isgDH#}hEp_SsFuc>G(RLPlX-S@(yk z#Yh~n4LL%nEX{`D$-3CBzfQ=@FtkIu$6=rkKuu*U$5_WQ$NTn<+-HlCCFr5=Cc>!h{9qB10@`jb{lNh6}=!IQ5*NCzPmLMIkdk z9;;m8M{p?-Zz~h&UU%Xh=wW$=34>RcF}ZKE;Li`5Ngaow2ll9gcS(jf)CS?Pfy8R9ec zg{$t8?G7h(kH8hMlqxr#y(Jd(jONLMRNcz_4p<*tA51ph9?eNb#>#%P^|tC*IA3y6 zNLL-*ZF|ec(a+|qtlfPdD^KAp^Ux39r3vwc?}hawyk6`{0`Dn_Dc-Ww+O@l?diD^P zYCiST&Fv)Bv=(sj({u2B48?qoUI15=uiz4?YYBJeuc+RJnmf#(0iw{uu5x)lycakO zC4Gk#uB(wfxKO%u6}JuTY$j3{|M*Zu8fFxxGRlos;#z|EW?#@%jFoK{er zhpf%4zdG!Ayz&ZJq+O-C6diM!i7DQaP*lap%^*}J>8*(G@0rMNuK4VSy#C)DGHdel z?M{&DZcLkT?f+kTqQ59YUrx6@_olUanu)uyFLSaf-oDa!J!bxe!E?nn($OvwgoQ9z znknpcON8y+Iu9B*>=JylJmvq^HmC7wUL<(J}C8)6?x za(_)L>MdhTGaIJP)6hpkN*}F`O@625xk$CtrYji(tr~O6JuQmY!!3Iu|C!*DfrhMw z5B#Dy-7#T=e8}JOTx7Vhe_^^QAUSJWy;Ic>6cH7~JST>wIvN&2Wqp|;O=Ws>t5*A^ ztWI?hb)?5v2Ytg4-wQ#>94mIeGZlO%TI7e&0%F(=sBGWLQ{&xQ{6OE}){{JCH?iq= zN-&5{F}1R<9?R(C*;9UF(Z>WRvpPClM9(1(c_XUau1NU--1G{Ug;8^_g&grDN1<5f zn6HXu$cVGg1z5qb``$eiA?zJ|ac6<+_ZJ%H#JJgb`zEcVvZ!=0KX>(~+Uu`1^3wuR znA=574)MVqcbW86hYStb<`jtsz0~2su3*BNI;bUd**~i79@AGlmn1A#og$SwFod4Y zJ=p7tsOnEJ0>^AX(8p$e4O%SYJ7o&^U%C{+%PX(oEDMl1E!Ou38AQ}& z(gXl3hBcKiQab~#mH<}=vfZ40*h??N?@#xTaq*wR5A1*pW75dPT*8m~O2iNRL^BZO_+)sTN1NWC*BRDVwUKh-JeBzX;4bqNJd zvKzr@`>zdHTbL0HAIu~*1-s;CxtyEq{liLZEX!?ngn_)IXN*`2sb7}T&uYD*w$WeW zw5leslTF!UzO3yuukcVW(84Bie3&=&1HQaHi(ZB!$u)0^LL*f4+1?foRL^kyZzPNq zrv1iaVbFZIA;$v{7qtQ@ptZLX{Lq(CZw)p!+^jvo85uQht?dBU)Zul3+;O)yDW(k( zwe}lIc_Js=K2LeA6MUb>Pir~il6S1!Be~f@TcI=q^lW>!Wj_6rf+VwuHtwseaA|J* z=Hu@wV#!vxko}U`cz@+KWO?w2s|v@#b@S1OQoo}%~oO?lWfaq z9k8_xU7xq%Ai9QweL1biL{Gi4f)QI+xG3ZCpyzGW&?6#sZZwvtUwook*uB;&gsI-5 zFD&5aTmV8^{A37z$j75xRXInbAW9o=zR=Q44cQgqJI->aC2lup^FDLpM3+Y$C3JtQ}|+xMx}>@JW+f;6@`)G_HD$S$t`>=i&ze8=_DBq=$yFFUE&%H*MT&H#|_AS*^HVG)1)d z(rQm4dGFGSsAcJ-{cB=H^%fWeDz`vc+9We;q_7ra;lM_`z?>1hR+$xB4JV>t!>d@> zbU69;=k{Y9YdP-S-g{Ck;A?k-ap{4vdE6wuc^o#&vwmzM>Kr`xmaS3rRwNaoxgT6& zb_cn~E2b!^JMkW_AGGuWtnhVp4~)EA^vvx=h`zh|%yPk^7PQ70P*~{(QB%Ik&rcDP za4hja#MYZ*To5ocF{D46c%)pg?q@RIXC604)WLxqooqUTDz%edJw}S`KKA@7E&ly~ z^Vp`gS*BHdRNB|ecd422lLR5IsARMPm6g>+t#qqgeArRw@XTTR-~D!BZC(i7IM{`d zHyyI6zY~O(AIvCL6yh@7s^9v{=>zN2Ahk7Gc^~{&1R9H~CN_K)$?>~lsi?Sf}-ae?LF{JL+d76@AV`U?>;I^;qvxfzfX|$w+%jUQ$RT@KPZ( zO?$;8LRXqXI}w6zU=7`^qW@WMp7rkSwy$A+>NBF1`{*TM_l&vMEoe3adT>-YdO)VfGgeOB)!kS&JW^P_a9!e? z`oEqAkgeXcVH7xiOY=@!ChNwDqeO|m%7G_7$-`zz*a_&4HKfu=i4H1c)2*eZlspLoPS@2tq#2aRkg%Czk2v<=D>3Xk zmica`1$|i(>>V_Pc}o|Hd=b3W^RidNEsTho9%&|fWQ(hSh19}Ipz(Wk>d+V?x#R@n zCXE!gklE1+FPvgu`^EAiLsZu-J^qP4h+RNCNB~>Dq0-CXyf|vQtUN zkWe3Y0PZ=<=#cKmPbY)z_+v{o@zd(@cLKBzsFpxzS>#of_Vk_>hl|j*Z{X}5lGQm)CuI17k+;sA}O7u2I^Ga%gadl&4?yW}2*hLHJ!9q-#Y-Nt8` z)meAHWIIZ<0$-r_55vd@TAl~H-~ePQTn*=DiUS9z?~t*~P0?GccLpR%t|Urg9zBbn zPOzL~)2(J+i941oK{dI(NB9e``+gNlmn?};P!W6)NjM_a0V7E0k+2Y;CDCnn9p%-a z-S$&+Ji@ky^~Jt<&zt&JAwuF88<+fYfg-Il?Hp{CYanuv8X~lP9wM@)!pZ8C@zdSq zLz~^Zl~emHB0JJZT2j3l)$hfJ`&t|Vblbk|X2SZNM0X?RRrGfC?S4S3ih~+Pis8c4 z+kfT0cl|;MwuTVGVNO;LIpbT{B5%0OE$ z<*TQjKf3Ap<|?AnY(2g?GOX+^>I6X_HN2-e)eO1^BrN3MZjkT`7ksIwL$qsG zX(n%J+OeYov_DkGG%@P+Nk|lgbTJLV(URG|Sls_m)aG!|p#!lRW|$ZSxC`S#zeKcv z8yl|sw!aV>a_{vE_f(JlxnOrCq4+6P!?}fb84E$TIL+@n8=%&=!;EVho_j=XJ*hnEdd9na< zyOfm|%&!6xU68Gm#*QNf6u`@Edn~KU>n3EK*HQsRX;A~aG=wG|POt`65eed2gjU#lyW%jK^2^;mO511A=#l$Y|RNZRo zx5iF9M`5l98wWOB%Bx21wN~JiB$6e9dp*v&am$3kSDBVC9M}P}?+O3-RbSh^%_lzA zu-3CI%o!TEhnc1pPS_}xBS+EeXJ0n%jQ@Z_znf>>TXMQoAY@(^hFuVraXmA{Z@QAb z&)LQYJ<9mG_?xQAf*ZbghW`WDf z=@`|In5rMXkgZrr`vZOnsP{~t`AuEidx(YbWax0Q*C=7@xS{xklEdTBQo$dzx^=OUlNG|xwd>RK%Nj%nf%42RzcF9!CRV+rqp9C2 z-FuiDm)_dsudDqWqDe=V_lkG9{RN53KRj~&I&s_PAsBgX;WBno-y)TUGx3dYH$)NS z(1Lr$F_Wax&ApIPcNe?4dtaxSl+$O-YRuMgpvaV3sg!qHG=J9}amQ>5O49a(@FDe( zlW0@nVSjgKl}<1dZX!eYS!wibIZR~o-U&UxNG z4~^MefHlD&5>mlrTq!zFO2Yn6XJgXyZ&z%bgm5fgk}djn@u+5Tt8^Hmn$)Kb{hRSo zXq>6~(ff@P?HcPKhB9c)_@4QUD^!y6hOq1}!W%D-=>x9u68SwgeHF2hoV&k6@1twF z=Emuft{Gr&x0z$R3CD`;A6JYW-;&9TGI0Paj`M1xP8XL+`kYFqQTQ{#UW5JeADDz( zt=T$+6uSEtJIHO}v5^;Yjyc?+d8iiuCau&H?7H}zA}I^VIT$Tr5i`hehd^sF#N?3{ ztrMZu2}Q@Jda{or;1L)?Io~XkUE_aa3r5pp{yGJ9X6weXs`{S~yX#^rVWzlEGCC(M zlo`GKwqlKh4*(-bf8pAPS`n3yII zNP52)VnnZ__%W@I&Z8}yat1=>Kl;Yiwe@*XXncLtPJaN8CADw%?c~j`aIu<_5b(6S zDd*{tH6^sYj>B=dOGdNS=Qv3Vb)UBa&H`VnhAe)e^ZCgipAJQF>)e1223Z(#qGyCX z+h~yP>H<*SwLWBvDqlMpp6AGG$?fQ#2~Ck+p8u5-*i3r8@Bk3qh9*az!Omu!XU8j5BMWa-?uyq zvY-EqQ2^Xjss{mXZK-gyo&3J?{zbFhLb@n$D?KK_l%!UTp&y zp3BF7z`ok2Zs*$tUqS;ASvNvaE1VziwfbNuHb&Ws#JHW$ajCxb!XYJb2-9efG4vx} z!eic zox`?$qutK4YGZGj%U6nJ<}E&fbrXf=8--BiNlOyKko)`AJ8w!Bv!!ob_l#BA-KO)0 z-&m{>z=K%OouacPX^6IMOw|4MEq^%9$UO&Hj~x1}?fPu#R&|$cgZgBW_81s~mn;6m ze&T9oxlP~LIu(eytKK`|#Y1#`5=(|41#iFcI(GXkCtM+Z-pP^5n-E3emhxn2FLQUx z8t>nBtj;?5ated@R*<&IokAh8f1_S%ju!!BMa}#_MkzAbvQ$pRXmx9XP7YkFB zc9UQ#$8Y8CFf!I;g)#Rt{tRDhXU;1AR;k)0~l(Nb#GIFp%+JOp2PB(1f(p$;Mh>KTHHE$fwc}n zCFQ07^d<9w?WO@af;Gp7vbaQVLi88mZTUucU+h#{zR|r0GtY>=J~NCYqCPFTz6*V! zX|UWhxPc^qO?!a0IFe*{P57Fr76^*& zuP?xj;Qvy~?-UY1mXS!)Ngh+m<$=?Z4xW6zpNgM3@7=PY>e>qJ(l-!}^K^1$AkrcR zLHM)Oc~U)dlf#6)qV0k$P9dWkZ+JaH7(Sj?4XRjag(n2n>^r40{eO0&mpe7!kpodo-mc4 zUeoq!uC$8i^3J*xbEQ&p8*k0?B_Sni9!2iD2Ir=pvFn zXWB(5<6`)V@_sMpmBZKiXCz`jyfs`ZmlqjzJi7YM3^werS01ABeZhE|I!wjJxR}C9 z)(r2b_K9;%2H%Owz8@YEZF9MqHUt>ihwprcty-N72WUOx57pUvQTYCp{6l5Q+Xz}s zT__?WkYmTjd{DMGix63wc>KwjACQes7b`!K!lugq-nsdm6jj^x>y=pu9HsN)hqvD6 zm<1Z0NwwcW(#@&EWD{MVkO2LNn-^#$H zpzk?Q?K>Ol(94Y?^T+R>EVdIh><1<~7)|DEz24cdf>RjOAlDN334xr`0?1XAzv z^yPq{jbF^pRp2M5|1Ckj`&XIc^t&>*jBmiZS@M;@#LUVl8Jm0Gh>BVWeD!a-=k79T zgP%wGHuvAP-A8z+V%nnj-YTDcam+YGk>(hMpuZUrdLr{1M@1MY+k?9g)kmNDa5+9c z0?xg2E1!i%3gUQ;TrVL`u5fu>%Xv(>24&I$vmY*Hlr^ukL4freosuAs+QIhF3PXB5 zl5C^U&zj2hk}F=ItD#l*XBj6Wf~_~yutdyqXVn_m@5n?lp~dGho>zy<_Y?%s=$IxA z#46^r$)QD7tc51FcOexKgoa2+wB_3Qoj?;68tq3bmN0 z#OxPg&(&w(1RbV$b7xJAZCaL?hBmg`8aiXOx@B{g?Ib-E)5m)9RK|Zkt;z+wYZC7Q zz)rJG6pA4(ED?5{Ms=vs&WjjVyUJG7@(H?*`Uu>C^80yVBT{V({I3g2`VH(MqnmMm@nltEm?yNV zE~!zz(mdv%6Pp~pqF*+A*6l0 zR+JW%Vx9klbyZRDuT{4<;e(aZ7nDVH zdA~bKJ`p0%%STUtG6+DKXX`N(mu1+hX+Y8oNz;jS&Mj&A55H6G5AOfAl!bxdgjs0V zfN5@KgLU1Va#3b_zn5sq^@u~WhCKC|Llvnz(N58%13~q^_ka$9KnhiF=H`*4r_emD zG-36zgD2bl5dx)y;}as6_BS5V1XJBw>8s5)dLLOrBR{gkIWNl^d3jTi zcQG;PT9E-c^5V+QNPpLC9_Y-4z_@+&c}%SOplmjx?S*r9U~42f$#Lf+*kjG<>N(?YyT+ssRdl~cFgB}EkRXMdvjm;0I-p z=IH4cLgPAG&~>1R)y!T=G5KGgGSl>jvl(-00oM06OAcyU<9}vUd3}S{s}1(vJa3N6 zQY)@~-=`vB=1aM6EPFpNQulGji@P5tz3WDQWq)X`ROJ)gq+J&YH=z&#RNn69*C~A- zpdf2DsF{#N0TD3KO3BbzC}xwN+Ni2@U^}w(rCdYcOZ-7)%%ulPgu>r4Io5)*?5thC zN(vjYZy;fdwRur~{pR)zJM^k`otzy;vSSU>hiMqwzk%XSWmlolUvF`-&_)^w&(TYBx!Fk9&IlrjGN(Z@Z+Hio1>zR+^%THEQtX=R07C6dp4QW`- z)YYoO(03}uE+r^XRK}IKNYjb`Oidvp1T438@(XZ@#uv4rn}P?Xrdzm>aYbw)_pJAu z5#|z(Wg-Xc_XmiP6E1;Xo!#06_IVb}THUx{?R5SO->Floh5CON?)qsu@ct~@Hu=bC zu*^jjLMyC94vQj#+S9Le29%_0k=}f*x|4-dx!?Q+Gglm#=V^v%(nqfbFmCfiG!<(f z+w`cA-OlKFezs|ef+E^1^d~4Y)JHprIu!jPO*tx)K$v(=Ai@5n^q&Y|gkXba^8eOD z>s6hrpl7}NQCnOz?=B95Hp=>Gm_uk!)Ic(i6>{%kf*EbLn}*1w&-{|)FDUb* z1A9I>T4EywVvM2g`s;g0JmKouv{FAxo zO`IL1Q2yRG=6^$fyXqpEMJyg#c9Rp@Y6s3U(s5 z;9$(|AEDUOGeNRHZkc->XM*R(vWp$v$$l?TOU)0z2PIaWWH}MQZ117*!3Ck3#2@1r z3*(*qv0gI&7zG}>c9~$1hF|Of&Q-Y9AZ}4Mk+*9s1!TqVk>ShJ*qg&>@Y<*JBV11~ z_l@|S0oEcPpU;9>&baQ3a>?1X^j&P5tU;P$4iJu;@rP8Y;6VQ>a2DrJUOxJJ`)jw$ zt&5LwUYY&ZAJwNHQWvs+RH$T`7Hg-2K8leXF^W*`6TZGIrIZMVaSw{;PrimjWlI|5 z5jfdW3>5-apgypXT#Jk9)2qeg--sw_C6zmy=Q2ojl`eI6#Km~+8%d%|@9q97asUOb z8dONLkLo-eG9%o8o#fb0ufLfPvEjR7b3N(-)o93phVp1;H=1vOR%(S51h1cBz+2fE zb*+oemxUAvAS8y_Wjsnuq61}Sc#$n0QL4hPZDR%K1?(X#>;o+p_@s-2E2vjHLSsBr zuWkJDJLe-{zI1TJ6`tH}b4fQGne--|xR76fB1W{!Z7T24p;QJWhJu1E6c3ki;(TBy zUl(DURYP15^W6R0ulo!Jeaw&kMC1_lTMZhf>$VNocB>HgvQ;OUs1<@Z-BVwd_J@&u zT<-OBL${=JOQw&&4Rf%f(N&Sh?UMUeq@PO=y*5l^1beK2tqg0&N)c5

VdZYf?&w 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

U*tz@ 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

rpzOX|FQf1Wzq!DR?c=9ZTKeE`f+h{z1%mp+AY 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 bja zr7_AxTl(ccicUAu`ELt`Xtq-G+Fy)HcZlGA%`jf#;raG_-e!J2_Z=axx@4XAUSaWNp#b zyVIHn%Gj~4RCyqtHg}{Os-jF`o5J+=)&L+OftvV=mXJlI`B}vDV;Bg!^?#eGc}?GHgq6NQx3uCLAXsDk z{|rF^VfLe+=`3pEz7??&bO#p|for1I2#+1oh&#GdAx@O17gqf z@U+=J91lgM|4h3dq_wroTFmF-Ah_Mwr47nN0F8^%>*k8WO&^B0!$~h5OuOef_yT#3 zE<30d7^nrj%qrjfLbBho)anAgEbWDJ_f^4<-A`g?NXqxcN)D~jObKJ8Kh=6T5Z;{} z5M78b%9F3osE!0=;DzI9tHKUR1+H_f;DI<`DlSA0eSE9VJ9k3r*|hhd2aVvwpvAnr zK+NDwGAT?FdygPDhf$BI)(}W4-S_Ul<{p!)px_rGjOqV~yi!X*(XRf?Nk>VnXVF8Q zqa>aDkHo(3Ui-%LJ*zTtE%@|Wa30tMbs1Y5-n(z}BP9bFS>tK+o^+>MGe3hh^QKyS zUf&C8%)jYGEysW(plFv+v{F8%GguCo&ym&LocDReVM?A5xaSxA%|88Irf?{6+sG{NeGgvL^~H+qMd4+oM@F=k&8o<;{t zwwbQQ$pl{8QP#TG`PSQu+ZTdMTT4UtW9YoJ+HZ`p-`-u+UlVHz{~o&Nn~QmG{!4Ylo(b+1)4x0IrLe~}SYHx0A=ccIOX9*;rM{gm)ZmGpo<|)i z09ZJP*g+ZDkdV{tP`-_oVNuk@Cz=sUbq-77-mr94DY|@_S_g}-UfyFtM~nku0%CLz z>5o?J-f{TswfuFrP{pJ_TQC0MCzEYDte=?zd72$DaX@u5D0$jNQMb79>)7f(?Y_+v zsn-rE=hTQA*KJ3`4TZd<_EipZnAzQk9rno>I&F9TI=9D~Rvq3~Wo!wtJZ9_5YJ z3cMSCw48D;<LF0nRwD(_K;Dbbz-ZHG%f>Q0skYCh~vz8~DVt?=rpr^n}dC;Tzi z4o3qYY71AnDKVKJQ~8>bASNR!HHQsE!ElVw2g9{@xu70%$uH^U66cR+mliVFGT#8A z>m^pO=Y+0t*g;blr(UJTJ#8ZD)6q5dLu_Ck3}>nPQL_8^q~@l>B3;&W+|KhD<~o!D zf^|=P!~TTKS-Yb9u-;XmE2U3Mz2vni@pQ&vLVB`5Me^5(j-Bg$lEl04rvIAI^}$A% zbTnMC=ZndWHHS{eRaRVe7Q|*jD}Q1_2SvSpeGIi<(m89o zvceNHZ5Su4tlQ%p8YS*^M~=D$OGqvzLnuS`o-gT5_-Mc`70GflN0cJ7AZhAQ0{M4k z?h;+U|IT>-1zN+m1DVgF?aSh;e&8D1bYn^6!GrdO*7j5ypv>JHE+5yXMcdc-2kLiR zanhQ~^^mhpQ^j)Q8A}Y(viAYopNe`k6Z`ma3_3mjS9+TjP;O|xpYcsg(Qr;xC09iy zZ^|XgX?!vqC$sRr(fx`Qvhia3Km)t%`d4a6g7(h=1F@(lHKQEP8;7hj#!nwBUYM3^ z%xSSeG#rkJ^i}7Y%i0y8h!u}FSnU7ECRB0G<;}BRQ;oM}KM=BISOi8kl7&=>;^?V#a7Jpm@x#IGJrnb<`7NgsI;r z--F&aIMaAqRuj`omYb^qwJ%f)D;8i9e`rHA3%wP~*^PX|yXl`Qn#cT_P^lK4VVkBW z$eGCJ&Yd(XU}db#sygC#cAKho3UV>)Kd0rTx*%K`BcS@N2{sH2Xd(l0t?9uEKBi_T zH2I!;&rwl_t*=az($P(;kFXF?O)c<-;>VK%B{k)g!`2t4HD!b!!l9V{Y9$k;mx3vi z!2|+M5{O0E{cbw8e#{XLXYqaFB2aGm?qcCxE@%HC(!GKTtK=M z+_E^&?1Gj26Ih}zYLGF8THB*~{g}1dw?DcaEeoRo0xS?r#kgvQC{2B%7H7qhZzsy? zP-ccztqkm@3_bs~-4A)CL1d-tW2`vwe*=XSEG9|NQCJ#74pH6HJF$fV8eIPz4GV2A zRht?m7?E0mGZwXp>RzJ01QfIvWpbj`egc#YK5k`?bxPe`dij}jZMBg4Bk_~F+Vsl)9v>IBJ=9u5B zbzlGOc1A-yMRj**6u8mUiC^`+fn9rkf4*$Y?+)RU6ON4sBR#{y>QSXI_Qx;Z>3Di2 zz8d+^K4qk4tdFvg!4MVelm?BIugetKPEo}i{uW(#{b%CuU+Ft6(@0r!ybjnNhEmUf z;cG7je~9vHGdk8;dvZ=#c?{+spt?h%U~OL?CErL*m=C+d3a)#MJo(NKqENEEr3DCsP6Wf?mmwQw)t2NU59@^VT@e-j#P`NC`jgCcAl7Y zBRdi)tNgzi-qsJ$)NvCF_y$nAZgttSvs-H8I>=Lr@39c8({kGmM_QgyboJUsaq$Ah z_;Hm*HFa^YM!%EqTiYX_Ql*|7FF7sc>&i$w+g5So**r7aHdT6jhB4}GiwR)6r`EwW zk0&t809O!@ca%yvk?w}D^k8@O(?%8?vDyhTK%i(AP-4LjcB|0f@@f%kG?F0#TD6C? z?DGSnis%Y;sIrYs4brNa^%e?!rN+-;QNXRD5lNm}j)&189??a}nm;`?z32l9wAk0U z6BSERC{MvFh*~E8_|uX)R($iZ{!)bDhK*mED*JHjlK*o3U@wr7x#$;q}a;Xe1N8M?Zg^}0?;+|fmBqW;ce3?!@8_2VH zF1Iz5Jip>ec>6aNR;EY$@+R5HWXF0aZ% zzZCVu9yhw1M7~{Dzs(`lV$*n>O*$;YC1yPcTfKqq;aDoRO#5QcCCPt~u(%zuhgCXW zY&}yx?V4-tzLWG)GbvNAu@XpP_KHqgl`ntQ?aqCFgRaG)`C>< zB|P>$gYZ$(sQ$&HcZIWX0bAG|0xeidoWI0K=pZy1w9=XF4K);(JQ?8t52Hb zg6-ast_!1skoUmT;t_1Z={dlJvK)pB-z%=Y?AW+JA7y36rr-(=mi{V-h-_s#qEbCa_IWwyZP$Z z9~({PjRoN9U`u|qDX#ZI_;E~2AQ(jkl#;#TG#@=41E_{V_>~9Hqj#teofjDIjDC70 zp&gN@ly^cL3HIykmINtuP|MK~_&+gCVBxIvSM(2xD)QKY)m)sV9B-MoD~c7i1sYD1P2{DPf5~svThzZcIlazREAd)9MRPry z(PGS`IulwJ*S_zwET;{2%gVG?Dn-R8J&LWTig6TdaPvs7X%9Ux&;MHgvaFkN3>_sD zO6{Ja9QkHrD`J|CYYxRU)gA78*Rjd*-502;M?_Az$e~tf6uBuH7*+<|vyreji6A^h zpkc3cdEbE!BM?47cjc{U(I~{B)jsyg6P3JalyFy2JF4ju;A75f0r8t)60r|7ki@`wgY>wP0C=x+=QRO+Q^YV@VBam-Wi5n>{)V zY&k-i9xy}Kk0nvel*KMva%Ew=#93>Mx-b_yU0e9|YvHeZRU8f&gK<;f!*w#GMyf2h zeG74BOLD;;p|f`YFks}|Qr}ixq(j{dEob$u_7wjR^VE{!jcE>ke3Zr?5_PH+ZY2}o z`%nUXAvfD$--hhbM*f93#s<-3Xwv$djm$q(eg)oXltlaz0?vCsB;r`#5~E+hb+Mn2 z?NWAY?~jZ$8RrvrM;>Sw>UUV#;VSHiLp-C4YI2e=xSAt9Xm4z%?gcmv>8IOPF1WFq zMS`I@pe2s|%hqo@ZNASFqDl!(EhmYGEB8|rF8if6P>ohV8&8_^W*lH=HtW!{TnoL9 zpzP8%*nQUGSU})RaUE(9oH z{~?cO()YxEmRvFv_QlF1DV;3>@Zj04E<>*QKi)zke2wZGhlc7mr0=(9j9UQ-@s3J# zSJIpI2iHh_v?66=xhsve@Q-RkSbn^l^BH&a^hsjr5%^*4O3=~wVdH_T`C-&#&aP-Z zI??^8=?So58twJ(v}}4d#rdk!Z`q5=p)#fr`F4$+*CiLA3}hDCDNIEYQuB6h#CdiS zFj*%4rvO#G2H$DiGLi3NRvX>@6Aj!*2d!ufr@FOb%&TIq{@_Ee`}hg+3Dr4 zUFZZ5g85ZdNg^%dmCD`+kv9&74K&&N9ft*neSvd!AfJD{g79Ct9>Q=z1cYY%D4VrF z+ZIh-F4J1yeBA6xREBaK8I>C;Rx!EkrfW-0l)sCK@|!tsHYGB0^C<@o4=TswQ?orjt#UZd5P_tlT&Q+v`3ZTu6KjyaY%uOkyJt=EDO9zOYb2?b zn&OvH3E2Q`$lW3x!SFj&LRt6B62bm;qt|Qqmu@+U%n9Dn?C4V7A1L|3rv5PIhjste z-=3UOUDKHvW6e&ivKl>=#o+B4{p#)MZ}|xJqF>c?Qv1=E{ln`wY)oN!pVNfGk-!uEmo!#PY{n(&h9 zgk>pr`5E&1nyL#xL)*RN<>;Lc^Z=D$eDvbfZ;Hud5ay8jVgB?Aai{r0#4b_YS8tY9 zgtIyKBNemv^Y_T{lxMQD$Ltkfj+-yg_)XU&BVHc`T-`jm_3SF;Lqu{&DZ8Ysa|wy* zFPZA0ZqT*x<;*25YmFZI%I|@-$Q8k0zR-R*%rcFBH1&@GrMzPc&_#X&HW&4by0eKfYW7$wO^;0#P z`EM-%jerK(hnD0R{GKrUTnaxro>+U4JMM2EgWWq`Jd(o? zV(V07&+X^zbLn~%(Ey)Ui@8BDi8T^j>XQDvNbN$yG+U;cx?hX5^2gL$&@EUSq9A6; z8^gg8Yq*4c0ad(1{i%7xstF$5rGJYo@qXZ!It_HA!Y7X@khxG8pxwx|5T=eUxNXEU zp7JerhOq=w=1)Ix2&b z$=ADk`cNKxlJmRw9y$mRJN1E`egp)dhIl^>!Hs>|=?cr4?x@|Gvb8V%%m7rms}9d} zf*Y06LXp`hy1(R3L|mk{X>}<>4^Xg8A0HjMKX_JHsc8{7`Ek$4h1Ik6nq$}s{|akr zm7rGkH4R5r!o$nKrO>W+in-?4Wj2JQlTz7p-^ra4LrhC)oJiquQ2%Z^2OSAjCYULJ z<39kG1imBn7cA#Q`%R|3b+GotvcTNso7s(sZ;SR`KS5cp`@^AsjedLJbQ2BTv^;Ox}xIujb4OC1u|~F6pw{)dnIwgSJL5p z-!uN(BcgIl1E(cjOQ75EfRjfXA>^DJ!`Jue3Z%t90~v3Br;ar5ORhvS7MP;sG`msK zvq=?g^U(<>jGPFS`=WcrQFPc#GrwhK6a;CS=iac|;54Fdx9%UMh7QkN4#x%Q2f2l~ z{N;8VH&mGEt;s#y6_X@-O03GMuZ)FJrBP0y66`n+OK1z0uZiL0Rfq?D1mW(g^vXFEj7}-|x!;V(X}2k2 zafvc;#OwXEo6VIN&(fn8>br&uGJT#^rU6Fs&uwR-0BXoG@P-Tq7iNPbhNBk{i5)e* zCD514&rEK_hkDJUkbRxYKv8ae#cMM(H?+uAh@Xki%6h-Lh1NN-5~ROX-@0YY-+08a z`vubW-~F0OWoj;&feTzP`eN0VMo@5+3*pxxM{SqLf^_{wQ)qejm(GmMF{aoVhnc-L zb$K9RxG%HjgkwB)fbf-)BEQzMNSY4gUjGU)90@u$pOR(G0MA!qqA_skxHpP6r0OmP z^rkJ-5 zlVsQO=oSQ|}cAAreINud>U-Ww!IBnQB1ShhN@P4<)`t)ZU z`_D(_BI$g@nd|l(X~U zOEHq5t$?9bU7g;5Dz&3G)2f$t0np0wW7htC?@A}3m9!U6vO|wUK8Yg zclF9|&1%$vRxR=kdoD=jyT(-@QCuJD;f3Pd3VCI?Tn3csv`$dq`O;57p!yN>yKp3S zGbvWq{JE&`-|f+(QCnVm`SHOtbCNeaQ&h@7(I`a1kxN zJH{VyhXLTRW1xkFnV^%i*}b)!1d}L^841&;g8m)0>KQ;8k95NsSdayHvxVPX^$X}f z?Z1nD3d-A?w#@*0=Li_sbp2%N20L<&!T6)+GzrEQ@vFj78c?3rB1iy!cS$Dq0{-ST z!7!IGg=SQ4Y(8)%%oLu$!OmtSpA4DhOVGkGznyMaB(A*KD%=8r_kn+<4EB5~Z5Hq) zB?_m5Pt&dI917VgU5w|Kntl%KPn%;|4OOlfM~qxNTAR$H(fvTaW&p(R&FqHWcz`uC zq^C0YVpcFa-(gCaIVI$sTi_lRn<$JVQSFT@?fiPRK?^b9^r48A;3nCAH25A6If=aq zAocPQVHFzD<*z9pz3rdt+r!<|ls_`@P= z`L*Gkt|g@N;_!|bQG25J`#%##p0OgwieuO!o%v(;MhQfR*GloK=aRK{P=573&2>|y zF9gq@nKK%*)hMFSGfmqJC0(N01^)QK$n`zuMko2M8W5 zvhg;AO|^ftg#kVa0&$p2X{B;SJV)6LJnvYY8THUNSd z;2#tB$d+ajM-58LGtMkgJeH@p?7mzYq#nmqV3-vRdu?E>z#qhfKo>OaOS?*fE^jCh zus`RJi<%E5Ykt-kQx@jxWopm6jyGEFJExL#R7!137>EL&la8Z=!Ko1+Op6#-bI&2L^Ch8G*@9jn)%tfQLKplL z2K?ud9Kd8oH`EsON`+`z>XZYV2Nt%wa%S%~S5zb2%%bZ94AhzLcnS=2ca-OiziqVf z#S`Qlqvv&6IG_Npq+e&?c&&SvLC*~dt6MSsmV1ufp^VOHC9T}rjkk6p?F?Piw7oglc= z+S<(Fm}uAe^P=T`^5SepXr&v+W6QsKL%8Q%Uf_1*hqoS<)3xn0_pWbOvQR7BeOG#G_U zuYSP@D}!njAN8M!yjqcG&Gq^KpidA&`*cwg3R{8fT}Tby-b@$hLc(eEc6|E5Xh4e* zh{Q@>iHZ_}^r{tcok{Rr!loGmy2yh6VUrn>f%lB54>;fXKCejP^@`M`{-G-vN^{!7 zK?jS#5_cywvcIXJqkc_!*a)UqYObl2Y8a{Xsu z{(~-7?D)|I^_O0q>;bsI|0uiUB8L{(jx*wL#<)W!o)5dns&sMkL^YC^7;&RSnXnqG7D zyr94)2e3z0JOvd!ZV$yg&fAgu1J6H@)T%1Af-Y>B(!(8dfp;)Kz#@mvP}q_d4r*5mUoXOGZJ#gf)wWBuom50As9 ztMlhGc(kY9C>9w7>Ejg-fFG0lIY^v&#UXLV1xer6dFypMx0;OR15eZC65#hza#r2d z)?uF4Seju}&AR5&vb>AL0e&qoa@{S5WadAbr6$qG>AMoDuPMMVIX039e6VJUqUReOJ#R^cbW2@^3BKDBxq(Z zqV~+NUh&$1p#6Bfv=7)Cm6GdXLEFz*lG;X={=H8=GB4L>*ysHa-mx+Huw}x7Q%l-Z zFKCSd2m+o0ETC46%{*gneoFI2Nci>F28$f|@3BK1yRAzNg!cKnd!Hl!@ji=rKC&D4 z{qRnEjc-@2!ue?iLPZDbH7ftYAJu8VjW#c$i(BVl(aqVp8Ol^w z7L%g%;scC9sIDJI+;4D0o&MP`%Kczq~NuKTQkiyH^kCZgg*~PE)8{DkYkN@m* zdkwDC8~@DMIP^T$*{Y)YdgZ>*RYwOPbw%hP!;|XEn=~$-C>&A8e+T4tL6C1wH5-fw zQPPpdzJDg2*DL83%+p{FiuFycK39X$M(4mI((VpU*V@j6yI7XZuQ5d7T~l` z!|Aw6qn4VGJZk@p@P)ekPorg_oW-gX02%4-^L;=tP7Q^_^Aqa<=IjLi8zwNWP`nG) z&O$DUTMzRAF7MtcW<=#GBNH_;_xh$~iohLuamH)ownM-v1vUFHZRi(%8v9Ao0cldJ zb9sa}?+K4Xbx^rE&PI>?H7zEf6fy-0ADVve6b;*uP4)pbZINmxfa=QT;s`+%13Hh_gHb?qz3mcHh zy_7_LFVxK#7cwMsX3-X|a*ZH+b1kgTb%Uh_8iTSN%F+S7MZy{}n>!-xUQcI?nq7Z# znnXBU_A(58+Xud*K_|7`gvy6CrsHJ&KN$VoNH}buu4Vw5kwX$Vq`J~GW)`DNhV_{5 zouqg(1iNaYS-R)1hFL*P8coTgP0h>fd_ym2U3Jw%@%=}%H#qH_by7;%!2{T}jo!1< z{FzSSDwW%YR|{K3UrNOE#rH%;UK+p_Mc!F;yc`TygP8?X*lGR=R%kX)y>G>q&&arn zU8r0)`b`0NMXEq|#91A&`XG;d`WQy`ceq|)nKzKfmZ<|gh#%-fbxOCz?ZTcKhsXF3 z7yQU{BApjcURlkr(kG|(oe?Hhnb>lGBK?d`6aNvsC#&_7I^|FJpx|+I_1FHw`yZ#W zxcpF2U_d8+M0IRl{Jmgrn7Pl7rEa`Q5?~uP&dj6OD;g==fv3x&of>r-pI3E<^Lv`n z7F18Hl!vT#k28Y*u{i^?F{fLBF8tSjO~4N`Wh72U#J!Q51gQW0(}{Su`d3hkoxE2w zNu)yu-KZA!WDiNh5wM`J0kpuSp|W)=I)(Adahv9D}~>D!xletE4|B1 z+|lc9khm?R7`?mDm^DoX!my!t-*k^r0lquTc0!2D3YI~W+aTvM=-@sepM7znSu>WE zsFSoGyM&&K^jwo$H}}A;&VHT*I*25!+PnhV3nO&IQim-KHylg+08hm)pdrf-MN=ckTH1Y3H7fsXdbzFbGq=uCBcdn^y)U z`)8UdM#_20S)Ij%yM(wZpUbZp4^xR(J_A*yfzqn=V$mW@$#x$`PD}E@<^H%i)r8OYx&S4ej-V)OQ$j`_%?ocO#qTuz=%h^iZMI=k}j{`r6i)b>`FB zIYeI!+1kp(EShT$Yw2?pM~Wx)URF1+yf;^WM@!E5FWYkt0EY{euEQE!Db2BWW6aTA zWtNO!{mLrDx@P{rar&tYKfW-?Y!Qfa>W@k<3nyE5IJ5Bp6f?8v?ad#Cd|rPYC>Psw zTt`&CuPb*hy~zERYtv2saa2I3>0mWVcYl;z2Xki{<6ysdqTHMqC=Kwvr`mNUvGHlM zPq_Y}e&lRf1+mIJndt^To|9Ptp!e?8t9D7g-a**=qRy7`-@vlKh^}@WF`@>ID!sC; zA0f-@n}Kd+3%7&8KvXK;T|qt!Nkn(vbt) z3t-@5;)R*{qc{HTwvJ+6qen@3f!V6(Nz|4TUh33s~cdRF%CcsyCbNm&9ouPys!XscwB-Xw<2{|gssf9QYIC`nz9`&#d` zVT8%Xdu-nTIKMOq?wGV!&rhv24m2bZ7GwH+d-J6XYu!dML!m&v+cHNJhA`1to{scG zYUW6j-~uV!fD+0bNRZHZ8OhS|tNS5iM!m8XKA#=Hlh@`IdUMUu&JOx-jc@+1^Va(cOvx7tjQ#x$AlK zuNc%pCn9aR`T{{GG>dyQY+JiDVnnG{Oy7`|I?ajaZ6!B2HPuslCE$k*`k!t1XHP@4 z8_pqaoWqg(@(2AkmueFLKP9l&EC&ZfmL$GpsC2MO4rIHQ|JW(eun``l><!{Nk*mCGM z3;qL>ve7azyT8mY&#{FIvE#ba7KG_XbHEE*Y;5|dTE=Q!&$*xZ?AWfPcDwX{u3;y` z@9oF7j4sIeecl|nBgV}6@L^e1yA=1HLt;pK*!=MON5oGh1D{{C1gfu4M^0rpFv;nE zo3}qVl84{lty_5AYH@{M#a*&Nl%KNpJ(<6#ItAcE>v&6WIO7o8C6+BMcjA%+Z6@Wk ziIN}sU`-Mn%3otb+A|mqR+g@pet*k`0HqqBn8dk%EZ1=X$LA}+2!hS0UY?P5VtujJ zm9n!~ajGVH=msRZ1r*t6rSMl|lAo2;c^?cbM(xmGy;9LMud3 z8lSFN@MhxCHwokSkFVRZvYtYg` zQ5AOcti8S|f7_l1DZI&vxgya<@p+`3QeDcBFxqOnT|!=IvH%Jdm5}IE`QK-#;3Ut+;` zl`QCT@g`@VK6o|*k4+=Z9RUF0Ls{vS9RA0lmOa(4h;O+Za0jf@ga#1O1ccD6!{$eXq#DBjHbW)IX{=9=0u~KSz+xXHTz?CH`#cgG;;tZ zgb5*u@8;ou*ZoJA&TFuq-H7C~MmhefSi*2HTFRhml~o%Odt(%&S^dg+L13D2dF$Hl z{}2o+Q|IUvhL?ZG+GGov*nm6T*O~J?vvF3VaUUV=sKSwYknmNPT4IYw;DQNuGE>UY zU%p0;K;wCjS@*q4$ujFkuX<2ecz9dMgqcGM88n%b*Y$j=LcG?Y_8)iUEf4SE58>t) zU0-;G_CrYLq`4?k??p(iC-RA!m^Ku?-fO8my*&@;Xq)6glk9$3OYh8s;`=h?u4q@c zzfL$qD@;cLS~S8u&`ir_1bQzUom8k26&$^xHu`B~vkxEuWB?`q0@(H=O9tl=I{6OE zsUO-aQa=7|0U-YK6*!!iRoyXHS}(X?bwwQt!9L9xFPO5JpMC-dTpNq(m?rD7Xh*B2 zz)G;HpcMaX3e?-44j6V~x%_A5SoLi22ep%_yyml|)E5Qon1)K2p|^YujojyY)6YKo zG$Y8a1j|0A=4qf7{`ym7%>Iy+^T?pVz;!}6Ku(O*S%zaRM!o;}tA}OHY0Nk1a4}1vuK@)c z?0$DaW=-A=iQPwhT`=5axzo>bJDNNo$i!xVes9P zsw*XJm62TC9?Dw@Ny`Y?iY)YFA&Tqt5vK9y=PV5Ffnz{|l7)S@mECT7cR2gMbw~md ztwhMjXGW_YFZ zA1W+3d7;_S!@+E?|3SF;mxH_Tk3Zf>it}{~2|W+nZ!}P3o(Rc4R^h=e)=xEP^a}&p z$og~3YF84^A)d#`?s|F8H{y&|mjJM-_Cv*;u?+i7AJXHDdYW2m9G=&BzZw5TcfJ(w zL-ze++T@aEQr<>KE`@?FQdr)d48;Imp+efMtEA{b+ybp&<0hAZrW$HXtplyrW|6ZY z+uqJPLyl^$-z+f52e(B2F65SGjfeYK5ZEM;gLHuAkVW_ctZg#0n`i$1-Sx}Avs4fF zfJ|l=8IIk@mug%@d``RDVsTiUrI2CFpAgLPTXZTH@>m|f96>XPOr!F1$+8leiY3Tx zw+%XOpRYayFr`0sb$N!y#$^b%5-Tp^c!F)&M1TWEVUi(a`XGa@R=n)sKSyj%5BW^AfyTxxg9{dzv@(J|q9ATPM*pULi5I(Jc>#hXX1uhC&|_HT7O z3)DFc?;#I7j#I8Sr8{3^YX>|;?7JLFz3sd{lEE^zzctAq#eYe`nt)T$aClWlg=I3Y zeD6%E@p8~CxYQo%Cs%^BnpYokXJO)57CxlP)hWahGFtq)ZM{!K!Csw*%zvuCgHn~f z5T$V;92ptkXxRxyz13VBr52h*x7n{Bw!u9zQ_ZGdxxR!z0{6eE3LNwzrm^v+1FX$m z*Vb>=fQ^H5Z{6yefmn+-pC)z;jP28hyUqW#(H7X3vEPURKx3{y0iG|EYsl7B^;E_M zrYv1-dKzkHC3l7P8l>NdH_P6mHuBrG&N!SYBr;UU8`aPV!f9y%MQbt7GiSF%6;lS; z9vL1zj}L;+OP8Y3)&Lc3i|oA+&edyzzcu?7hvOcwVl0=`#WeqKOx5z`<08+x@373) zEj6a?7vj{p8LO;-%Fy5Qg_M*#!f9qAv31n&|Izf_fpC4#+ex$_B3g73k_e(j?+HQl z5=4nE>gr{+B?%#-Men^v@4a`?+gf!c*u^eOlw}F;_4)qZzsJnI_TGEWoSEl&hL^Mm zh5Y?qJ*EPD7+DoP3^TPz%@FKAv*%Y7`3DnHOMZTr0A_{qrJU`fpw~ZQBX_BW>%p~# zPux32HI*6B1&4heZ*0cMm8`A$@?W8cU0rO@a&(tEP>#4}Ln(k2`~oncWvW&Tn>PQ+ ztFPLNOn+AS&YuScdd(0qHb9gykDJA|>y^;8D))Jne^#Qw9%LCvs%xZ~DEe6Dswkx` zjtOaynD1^I-V+SC7B@iXC5&AT&4jn{{-E>y80~fxsJ>^oq-D%?5^L7YLax+bO?rV} z>gG|pb5F@pw{L=sC#d=w|1?01ZDYIc^#VO))%UyItt6#7LP=dwBZq~IPwX#8u!q3q zCe}reV`mNpotQtrSj_utObqQCR z2CMGrG4#)FNLeWl%IZlkkoM6J=iLU@K6MrtYA!co*&g6X%?H$80lFI5+T#`>#-@4Ce5s=D@Z`=` zfbD+{TrDQuP1z-Q#a&T*{P`QBo@?ga?dcds_+O&V7>lORCdXUkY%cQ;Vjcc`$$c(I zVF*Z{WCR0bQPwE}W__2GW-!;E?u=YgntHQ^60!NY`(Yx#uEJ(JGP5uqR#hI1El&_7 zPrF7wRDJ!Ni;?*(0aTy=t9p9azyrdrl(#p3IW3Pq;{E$TZYK~x765?}9F^+^LSkn(>T-b`Cal;_ zThg>f*dgZ4`y!nXffE|AxK2k|OZhfVm&1iEFj~gu-ZF;iCk3TvjI1C9Mo~zX6XJYx zQAEU}kgR1l?+JK~Y#!g$Npwd%rAlh~#qW_idhd1I#J2W`ht|<^Pbyb>=&D*IPI{g`_a<*E=0iTmK zsEXdzh|7Urfri}2?_T3e?I&eVOoF%me7mc+F-jqTj?U_MlO4x4NZ(F;hDRL%(f9m4 zG=5^z*9X|tI@OSjuGI05(x3V0tFNf~ZQY1fIRf9Jm1Eau)y3a@SxU>r!jth5oYsX& zZTA_GKv6U3DkPKs;)hkGjc!-)mtcZfHGYmVLSQ~uTP`Au-4aGdanOqWy^}$-+N}C< zSWsorA#9|o$E=$dxY-n?`^c8p!Fk`s*c+04)hGIM-boGrYX&qYfyJi(VS~)^W}lS_ zi*SYwMdOrP1PSZ?H&Khf1}G?8*7=nB2c@b0>@U`@nb_tCDUUwj4!2xZr7D}_14(N- z1PR3q@{ey; zs*GZVG!`vHA3Ypi#rIHu{3giPc?4pRKH3C_)NbVIx$XLPF;}Z%*Azz4eP$r-!``o1T;`mtzXP&SO)HEM z{70wS+m^eE)!@T)2<~a99#Cxi!BuxkGE|-u;KDYt#Xze^9Wvs($}t%_vHsQ*^&%0P zd4(b>HhKJ-QDwNy{QbQVZANc~xkN^Wo&^UCv+#CNY@dEf*8Ozbi^o3KM#g2@t57irWrb(ZEYwaa4!8a6=2=spKzG!jd_ ziQEUg7?HMTVxX$BkhWa7xC6j%12C`gRU-_z@3eW$K{n15sqb{2%7sNq0}{E}vg67N zg5DiRo;==#_XXtAInZm&jsUJG3nwF^A&&$B50bI2I!pD2?yEG^lr-wov5$+L2cDun9CfD;7)9vsYP%H7xC56DGwg}XsL(L zjAlpE82lMoH_mzt`DSACCe!-A1E;a&i)NOt=I7C`I%n)@F< zG{iPyv)Fe?WGuXW1Q5Ldn?kaq)T2<*rX8gik>@@&<})u?GG^@20FgOx3JbK?vWle2 zN&l2u@cnQ=F`i@S4%X;tvz@MTfPSRlfFk+99Y|oOvr2K!@URp?!e7)49OBqVccR}b z4yb!+FN`h~4qTc)XQ@EQv}%+h4iH<~;H1FXZ4w@Xzcb~xd=u)6jD_wr(ioflQ zV9XZ(CSyg?3jQy+zZ93#3WdKd^SB?2#!1D+>fLn%{w>00<6HV-Lt7cGY|_H= zm7VrFY?$JZEJbZSb$4I8oe)U1us%259p;nUPAtN~x)t0D{rqkuZwf8NK`Ue)GAxNA z@VWUHsGdh%-(OH5pST%@g_mcAu#HSMt&pJ(=~-e_2BO)Bs?Kpe*&fW8$zMS6F5gg;=$4_)59W}fe8t?y-I{m()rrV+h z9EFmL5g%b_RVvySh8&hig}1X7dWg@Kst}ar!R#u+UvMu>Ip|(V76d>2{biE zPoEnaK8HWie0|H?-@!Bk(~#yxroWps>2O6hJ|i6!(^Js#*LfxA_VO0w>e}qO0#;HS z6(Z=6$#NSOwJ>gU7@#kLekLvvC-Mca7aBea9MY5&$4gYfK(XTpGWsH4Z!ucJ+1HsF zWXy5HsLvucQhH}elzMG0@W$L-+3c%?bFQcuD02D2*BAX3WfhM1bg~g@PNTxMjh}#i zLGM;Ryh#MKxdH0pzFXB)z$4^y>zDLksl^5Bo{%efu9>7gVCVmj*hmb~aWr&{nZl*h z4eeJ;s)p}_olZIj|FIfy^kUDkF4tE_L}=oNKk4p2P0g=f7|GH4`+c5&U)&4A*w{_% zEp8eEcOkxCQZ6R`-i8h#onqIcT@uEjQ9T`VL0b*9{8JK*q{X=njqHbF1ALf5 zSJ&UaPXtpID*pOw_KOM3%mk()(-L(q$56Alj4yg>=tSc>nG_r*-S%?31LlPyPTpWs zVNWiTkw1>0YL5qojAyGGu)3C_Bl~x~3uM7j#xvDRO==?+N5)0RK8_6D|8vj4o=(v(X4(6u0*W>_uiz}w7D9T?B z&*Qstx_Q&vQ=_$|`Z1bv;l(QP-%aH)O$Zk3l<1s9z9*T8-@CAO9zS;Wq?E$T?P@pu z!c!l|rDmcDt{Ob3%VI1MM_8gQP4&rav-tTtD-oQpuZz0n!jp61aMglQsY)1CVBBLD z#zAXL==0qCA!rH@1jl!MrtVEO$ivBJh&1sMS*VC9eM`;b_UfTY;!HEQ>_{3XfX2B3 z#$KSM-jqIb2x9n?FmZgS_F|f>ltyZOu&K|59PK5$+n7J&C0S#P( zLPN&~0Em3!3<}@*XcE!+Z0%Dcmrf6!xQ;wePwhY8fg&}p3$tBDI7cLuDqC$MjGBI% z7D)8o`*mL$0C7)bU#W`14PQ2Ex4YF3HnWL_ey*!aaaQ@DVAlb_b0mXse5=jrA!27m zX|ncTu|O~3R@9xJ-|~t&0M_k|mAtXN&a+c~0sK$P>HQ1osYg(C2e}ad)m-iZP$uBl z$S&yhBaYSy5{$Gp2m|s9|FMIYp%gC5i4#OOaazz6wYaSXV7@ki)d!9S{K}Zc`P-; zWzKzQ!IeZm)oVUX@b8J60sG?4ap+Ec_shc zL|zJ$N3`kgn9UviNNiEOQl8WOscVzC3}|EkHSDhTnqrlxku%5swq`O_|08pY;^Xg+ zWZ{&kw&ttR$>#V61$jOh3dRv*KOTzw_0;_s_biDIWCFioszgiLE2wV7HQ%9huKUL?tFsu#iQ7F#1!KltyXFheAUf_g zpD}{mj`Sl^nPDkmJ6Q`a0m`PYPG5!DR!!{k15AHpJAUnFW#hzoc}BVC-uld-$Tk4* z_-kDGVXNmHi#Y_75S{jl4Efm_qd$;#03iz({$)KDZB3-TO7BqG-u{twZ2*YNr5UXwlId$s+^o5Zeim|FqG8kR9DGOh_7d03GuNuu865w!>xI0AisDeAbY9%vVSE+3 zEw2+YpRRa(xtXER6?B#)y`8CVGb3qeX%*>Tf9tPV4&CG%FPu4WgGZIbFVNP9>wch( zND>qH5gyG-16atOCu@Q~TAv^s9%vSP2Ok?i3RYh?uNsy?Woj8kre&+Q|3b{k8LuEF zq`6dWZ!&+M1$-v&r`|Ds(P0#lby9{^=`^aZ)(wRQhk&Y2aoaQ3>Zj_mC+Rkj_$L$^ zx@c2jn}}bqnSqj39MGxi+`9P#1&jzP{f#GE9yKLVRqexSq$F-PFYEq|m|Vq*@a>pP z&lP2O-R6=KGpZO)&Cabq`| zUoxR`h0P3C2>hMO&;f;eP(G5XgA%7d4ST~I*jdA8+~s(O$kS-GfCK=6<_hu{wYxbjq!~iJ!&eqKX?iGFH z+kxUNIluV1NjFYN$YU^Ilylv&&rIB~fTsL{Dpc0n|>;rF}eaO|UpZHFjPo~;x z78`@N(npTp#)FO;pv=g&XX}UpxgpCpb^(zqhV#52a=OppK8Y!muybX+?*jfx^U&PY zr-zh7*(r|`UujLkNGO_5wEKjevub*=hr*u)om)m3_D8-5io`vAXYqz>Q*cZjv;q+k@ z{ulKj#bGvZvL`m%;|Gk??Niu_LEUIL{S5yDd1^b&au2PBl`iD^^GR_#Se)+rN`(x% zYikpgGPYKYoFNK}SFxSQ^^!^Px9B2_>dzkY6qMJ<<$8%7ZN(h-H)2y2xQA;!l1T_1 zN7dZBPT4ScWc^he=eFP-V){8Fc#lC8iroex!)yDNYobch?s7}@)V);rA-@2Bl{-GY ze~u6r8?5+UUCoG;>?^MHbp03dNnX)=reJLeEM-+Jq;lPO74x7`15xqYwVL$btwPOL zEpH&8=)2!W<^w*3mHq|rtMT;CWJIF-w^(aw1V3-QPd{YgbT<$rbE+quwz66gTw}QJ zyh4>$FD%DbUcvus`{jc}(CVdUgPLb`i-t|BFw;u&JB>|edse^rB6FRy>CK;C501_N z8jnQkIn?#QLoRFP6}){)1i6#F;9Hzzy?|fbccp68Xb4<2tRwH)G5ELdY(3|9<}Of= zrThj6oAI1OX2)^ZF^>;Dan4I7eNNTNq+TvpKGuD?-i>osx%iO(1b<=u@~l}B&2qfP zNy8$JDo{rc$o=NneDyh^R3Z_8@~#gJty&1ix80Wv7+v~Vr==!eF-u+bb~XwSAC#5Z zzb`3IYuf=90y%{*{n1hjCLyZPJK8p1X2{Ugu)iGaWOof$`4ni$94tZFkp|Wi<$2jM z3!SRU(7E?}gp;C8tItN7uYtU-f;)9XM4gVxRI_x)t6Bgq(9cm^KSZ{7sk1&ZJ=bVp z{NVZRb^^Izu2+DTm87)z(>|8rZ}jh_k>FI{S{d z6275*W=P$C)955>(xz|6m!XnPp^j+l!DgAE* zfE#TmSKeX~9wd}$h@9CxQ)g7&(YSvB5XrJK;wmt)^%Ew7xK?AvDXCwGx@5+vqI&5) zprnJ02k=O+my=ZeUxQi17lraYa)})Ej57M58FBT&9+TJdj25(~m*YYx&#D9i0Ns(7 zr0%eMl%(*4%x%H!?cM$JW?!G6%dVlTn`an$VdD3l%~A~KU8>3D_3-UVg6YzYENo!F z3ZSEu%eVyr2aLYqo1GE0eQembFEI!dm;p}uwNG^}mDz%J;fCn~?sA-=FNRk5u23HU z9*fV%91UIjqrI`Y{-CqBmFl9?MDKFssBy8J&!KN(0d}Gx&Bbb1V70NFLfJeZ(#h6f zi<21)tBzLt+2RX|(zIj(v$h&@%(RAIP#%VVn@n%h7T)JccThl%TcJ9i0J{fx#qs&} zGUs*|(+pDOtza3tE!K9ADlE!l>ImYhj5HU(Uod^;`}zqJY=c+yF$4PS4|Nw3j^j8D zztI|eh({!?lrsy}^`Z2z?BBG%bBoPsUbaT__y(LS&}lPw8Gd|g7O!+!LOD~kq=5h8 ze}0)%$KZES3D4bpCEoQg9M20Zl}*&U7uJ@DYT~%+7#*7LA~LCKUo`MoF^s?MvC=+}NFQ}cBA`K19X6o;rj=kd7l6E#<2GJwT1P@M-myt!^u$oz$u z95;NqpP7->Q8$zsn;xskavY=Rr=1?<{QR^!Iic^y*5&mxBV1iG!|N(vM}}&P=H=UE zrS5iiTZa8sUEtxd%9?8)lP^dM0zi#_Yk>`E@o=BqpO)uvHT6oVGKX4jJ0F@^z`a!{%l%)bO*BBJ$5P|4P? zKz{9)>VFQ~Eu6aWAC3a{m75tOW_*CEpJx`gutS6h=fCJ<>a~@}_+`wiFdtDsQ*V;i zU;Wt`Tuy7IE4YO}c3t2%|0YWrB7vz9p_Z8EzfdUR{WWO;NA9&EZ0(5m#wunzNN|Ch zM zB=3Gv+34%Evj@;ylm3xUgM0xvj$BgHvu&wLK1MY^qA#`$)<-LGKc#`fRAB&MO<$W8 zRx3}IfU(m**D=<4dCe^T_ol_u)jkxJxenJOv1w4Wi}@Z!n;p37IVx=L3b2AyF8;EJ zdIz5t!n&Vq!cvtc66Qe`vKnvR-DoQmAM;_{tQKHCUF@0$k!Fd$>W$8SybM`Vfa+Zs zP9_>_2c!JuD3wC$ZsFkd1^RY#agaZ^@uccWOq4<07$4?vj94c>YE1?;E?vGwW}!U# z5MNmNlRt3y5SDV&YiOf`p(64$d8V*V$b=bwW~aoYSPnSN`}s3Kelv3_!l`|&gCz$KY-DYkcDHwWdA`fFB^~>4mhR6b^ncspwZ-L2L(Bu=;TJu7R|H~jUtzw>W!1LP=}(K!G9S%6)@4ELWN6^8V0<<-xowp=6u#OH;m zYznv|SI|s&3U7rAhwqT%WK`S!Z_2V2;Asqr$~MSo}e#G#D5|!_P6554mnS zVV4LZ(bHSfiWBnVN?H+tPQDR~Y!XZh*U9yt7=gwpDf}|WV&OhyO^)ne(n0i(-7hC* zy%z2RS*;p>Ib>mfZXz%DpGy;>1`6?ZVAFCa_B{Uqi;Z%Jopja}7K&N1Ve?nO-4!?$KXy;w|zx-K7K1=zawW#{rBsT;=R|MlU3jq6j`VT zzuqR%=&Mwp{d~Pb{lxc={AYj+1NfnY&?gR4S4Uo5!Bn!ZgAFEAKpUZVE|#))jDp9= z8&5OfZAk(-%94!xjdp9N(rK%Vfe_X!eo+f_csiheQa)p}8O{*!;a$mI8#s z7f=fm$vSFV_Wcq7(b)b-naTDp`L=hNT9*FPo4wdy2H6xPnad%&5Pl^23>S5ONszu+ zXR|kL2$6;PE#9SRQtA!?L(ytOeC)9^f{v|AedwVmY4`?}KfdWUfvJE^Iq7^?^GP&>0 zjD3>o#}|H6DiIl51K#C;qPN0@O*%ej@yx~5GYzeCganARi=_=Ux)^2~%vS3W-nklx z7q-``liZVbc*&|Pd>g!hXaZ@Lx6~*hmig9=*^rFp$9cdKr7M%(H+ZfNVP$n>X#7!^ z8=Lk3k8D|T4mF;iMy%3>2tfiXgbY*)#_pWyRdF;mR3!M~CqkMop>MYaz_T2Qm%Ugp zrt%7Zwm;f^p>vlL(cpZYrT;(j0rw7p8Q>6OoVeuW zC^-|+8f`~v;=zQ{ylnxWL0zoC;;3>KB>qx-bs|fI@f;beIE-2?Hys1j74NDkw)oIj z0jhK6t&7Gn4vNQqn}GPz@{JQglMe;T3PRfWDKgV8+L8Zt*3UW1O7R+(ofC*Nn&j7y zbA_f`ya}Glu^Rk46^r$L$ieX&8!!5V7Y`mrKge5XT;1&hTA1>E-Dc+{i$PWI_`=-rAE4@ztIGqKpbNHh4iMVl)`SHwKNisqb((^!+j z6zopS9=+X{xVkm_jri-Vt@P_P7)58L`yktbc1n}W0Vw?SDEn}*X3ThpAWHPwL__`7 zk_%auyPQAM3zy(OOtbvKOP*2b{g9U9EM;i`=s9c$O?NU^r(OGc<}wD)&b4<^a;(a!>;B|WCi_RwSv^Q!$&PV--zZtnD;yt zTc=v2VX!04P-8)yIcZRJzDOz7CZDfb%X#saE-((UHULm7i#~)#dcz9e&*f2Ac?&a5 zyX8kdgVw0M^(5v4V7UQmO*Y40)tyPLzTF#lrf5X0=BSdRr+mkWPXor9Z0h@*4~WWD zpz#+hEy4WbS6~r#KKyx7$qoH0Wk5P7@)U)Sl7DgyY{A3YRXh7H@||J?Yf4;i%(&f) z7ibenhT%G4J7~o$!9HEZy+#w~chN6Img5HgVlt2Cfs(l%H*Sd|$I*w)-1;p`>rk>4MMoENd_|4{q1u{FH(CL!odk%3u z5baUPC8RLt3O8Rqy4s0s0^^S~*IY@aw00P;*|=QesW&uP@40Ix8^ zlJL893`DuZqV%yNWBAj@3-N;XvnwY&v+p<-VLWX2BiD`Uh1)jeb6#`>D$nmqqI6WV zC6rY(GyAI@zcd-f%c%ZKl6Hyej=mD2^4Twaef=}O;CN11#5+tfZ5#KB6h>_#NK&gz zAUaKumv;R>SL?|U65-V4PlJvViZ!qJALpf=@)#ci8#(KmpLhpVY2UQUfG=CPizVs{ z#SzOy6AAAy_1T$ZVOUdV4Y$-czgx7P3b^a!3YXEv7frD%Do#1KO*nV#r-W0Vi}KGp z*I#^exF)5KrI?%E3gT)rSK^vfQl_SlbS=^kn|?p0amx5h`?~sHQ-BYOwC$<6ASMg* z6o=7$@Hb9eO6RS<@SUU7pyJ~LC?FfvI3KteI9f_=vGL-KfB9Hf9b=Ik-;3;X@Y1;q z-J|E_srpc8!-qTSFLMLTUJJbRey3=yB)FV2FH;uh-8mV~b@ORG)WvblU34fPD1r)A0pG=A5Q8b=>aP2GOgrS{ef)5a%+><-c$|+=!R` zn?EYD5o;XJcX#^MqEMdu4t;|rYMqlJKxhx;ZI}GD{3U}G$>;k6^L)`M$y~^Cm8BDi zR>F(b$=5#X%9O4Oag(Yv;m;YYp%A$*F`I_Qnr)qvUzz#i*eGn1OtEuJUw1mVI?u78 zSnU7VDhRmyS=<}Xp%ZX2n>Z>6ah83c`#f~E660YxdGC&g4t;wneMBY2UA*tl^-%=u zg&0_5j|m{A#Jhd2+S@@@@-+u!kh_VGN)xe6s9f>`?neW}N%u7&6m0X(D8^ASKh_?c zHXo}hS$#;jast`ML@iY&^-mE|X9LqT$60fI1)rVZF}idEG5eiu_RU)aI>8m2b<@rE zh#Wc7&&rRB%Ni?ZK7s@PG?=2gKYJ|yaICB&fm_3f$xc7q6M5vl$+7i&h!>5&zt>KM zCM%?5s9d$bmJ@c8k_|`fd2HQS15t|1a*DO^`Vm)d@dx*Hrw`hYABPaFtbyoW-UHV3 zVvBBn+Z}D&o>lXBULmUr#>OFRUyKQirk;h2YVHx0E!=Kb6jMI9vIfeY)iYk8=t4D> zmo>_WEqqGrX{RswY^c>5VHYm%TxMzH$i$taZCLInvPTp2rG{O#x6bZAK11700qa%7Hxm`8S^<8Jts#f3}D-Y8WY ziCLclSFswHngs^WEI^DNs)z)y-`wsbIfrT2va7koy#TV`EZF+J=4F*1@>Q5 zQ?T>Y{@C~lB<20<9K9$~x2!jUGE2~LxH~HT1B}33PW3lw1?W2I!~pMC{$|XAzlE_Xw^0wg z`s?=e5rqY7kk#rIzO5azO0Q9%^YN)p7`~Q4w)-GIrA1n~ zneGu_-7gMmf$}tSAY~7{$M-{|raU9{OB87IlFuwW%zn*wd7@KYmLaoTXM#@n@23XH z`Qcm{ufK`3v{f)(=ww}O^;YJfvEPnd*;+#J2zMGDqiy=~)*fu2&5BNs`IrF?89H;8 z(JxAn@-capCS?R>r4Pr0WDrFIN&>iKQe!d>P)Fu(8WPJ zu#Tg2&oMXDbNV^7Qq7RX4Eoy#HtD3sGexJ4tywD{%PPMYQZ7hGu>_-Nu90|-3nKdvMJhOv$ZvC)Y>gr<}Zc&NLEIx6x$mi{g|5VuK5<=<+PSw=fhDe%$c;GLC&MY`eG!gaiw zzb^BeFcu|_1v&L{Z(ug*WYb`Rm198PdjgrC4*dw1g+VsSmWR`HXN~RB$gaTTz9VX6&&0~l<;jyjm}xhAzymA6>!Evb_DMZev;=S^jf@Q`uc7` z@MnuVHI&js7}G%?crvM^R&X)#+FE!==}#2k;wtyDT~$F zF$q^#Rbp(rmB%XP!reliqd1OLvX189K<;6-8@cZJcbo^ZEm>d zMVkT}8_9cYB?8$to46hc+v_S^@v|Up6B=@!ddDSYC9k>+lPdKSoDl_8wypYEL`zq_ z92-ym6wuhVnocHZ!Sch)G>b6OXIkZAh%GSe__l>ZRfs_ZWZ8gFlA)4&6^#7L79``XXRt zt7Ux4KV$PjwwV1yABx%I2_4T|+RqE(Pn$Xkj4@f2Dz5`!-{P5Os5qimN&FPq-<5IJ z=s!pbl`qfQFYopyfKqwk8NW)yJB6!b$9v|1dg z6n%}8=!YE^=gA3?kzQaGGq$h)MaL^TTZX-NDWmZ!drM|DpLcg3@r z%et-_Pp-qTyNS2rq&;LogUTy7V5*U#n3pbj$35_)wD8>Qn$LV1%)gePQDWgh;NJbd zT@X8|dv;dy%H*$9!JkKk0hdX`keBB&U4h-vQz6=12{~c=6VViYF#}<>Ld!9dr+ntf zSyg+>wy@!CeRjHvzKb_^obUTe)tx?l=f<7G(YNLDQ-2Fu zY*j~{e04*~(go;HJB7yG=P;v6isrrXD140MO{2A72Jy9w{5<-d2u8MR4m?mE#xv^~` zcZYF#vS}FHoZx3Lmqgrv)+A<}jtOuKHCd;4D2})C9UI|v?}5JiXoMdc&SnfsohZ{~#nBhImi)(5P`%~SFZz8S3+j@WY>i`t5*~f9C@Pe=054&=fim7n5C1&eRNhgX?D7qt}nzG z>tY^rarqGIVy8|CQQYHYsdv!!RkFyq2iDH$DfxPH>^Ya=XoN*J;~w2R_ASsU))Dil zsN#8_oDq8jET>=~udN7Cis)}7F1RkyADzeF{X+@n%x`Amr`-^j- z!^=NuV-yae01&KYeH6JQD>88DRo{(zp2qs|V;`<<*ZeFHc}roOxrLC&TP}x5dB2!cB=BeM%pH zI+C>fleCU0?r|#&2 zJLx6wp1S5Rcz+)+`>hfD;QRMTR+LRZva3fplVlqIS2y`>vR@1hzOVi=QEQaji{ttL zqmM`ULvI#zF@ay@g@+hv{3R^+!=f4>w;}qctsq^szBBw4pSF@Cn^$gaHay@F`O97m zChCm$96`y0#?KVoL%CjcwUJ4TluJaD%~LvYIK#eSbewsod-uguvg}5 zlQ;UlpMigNIy7NfYi-87`7B!NZhYXau>5lBaHRYdk9%H=7i?<9lyz+Dcf}}jfTBC> zZUCzX;cYp_;aGuzg>ue+!1EpLGX|r>wGM15Hpf0YR<1J1czAB!e;0uBgagY_Skpet zZ|hHm3HQZdf~W^B(>e9lc+hPAeOm~Ba#+(9BtDeEfB@c^#wm16WEf{}Nz-pl^8TWg z0^Zh19!eGBwV9e^o>i$k0c7l(oQ6McSsB)`n}DT|=6`{MkHx~56C+DJ)(}^NV?uqn zEkhZ0A`D1p0it>}r<1O~t=YJsYF*Op0s5#gXZ8qSD~G2MoC=%UQW`be=wF&x2F%4B@e$WN z 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∼0un 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 H-826Kg@6M5 literal 0 HcmV?d00001 diff --git a/tools/battery/models/pdb/9zlo.cif.gz b/tools/battery/models/pdb/9zlo.cif.gz new file mode 100644 index 0000000000000000000000000000000000000000..df037ac758c46745d2aad4cd1b60eaa913f26a52 GIT binary patch literal 151311 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/ or @@ -205,7 +206,7 @@ def main(): "is started from a model it has to place by molecular replacement:", "", "| set | arm | start model (--model) | expected: MR group (sgno), R_free max, placement CC min |", "|:--|:--|:--|:--|"] - for t in tj["sets"]: + for t in tj["benchmarks"][cfg.get("benchmark", "inhouse")]: st = t["start"] if "alphafold" in st: sm = f"`tools/battery/{st['alphafold']}`: {st['why']}" diff --git a/tools/battery/site.timing.example.json b/tools/battery/site.timing.example.json new file mode 100644 index 000000000..6b9b0bf19 --- /dev/null +++ b/tools/battery/site.timing.example.json @@ -0,0 +1,7 @@ +{ + "_comment": "The least a site config needs for battery.py timing (README: 'The timing benchmark'): where run directories go and the open arm's data root, holding 9zlo/, 9s02/, 9gjx/ and 4nwv/ for --benchmark standard. Add an inhouse data root (myob_x10sa/, cytc_x10sa/) for --benchmark inhouse, and gpulock for --gpulock. Relative paths are taken from this file's directory. Models and references are in the repository: no pdb_cache, no network.", + "runs_root": "/path/to/runs", + "arms": { + "open": {"data_root": "/path/to/open"} + } +} diff --git a/tools/battery/timing.json b/tools/battery/timing.json index 4fad31445..aa585caae 100644 --- a/tools/battery/timing.json +++ b/tools/battery/timing.json @@ -1,17 +1,16 @@ { - "about": "Timing benchmark (README: 'The timing benchmark'): three sets, each started from a model rugnux has to place by molecular replacement, timed per step and checked for a right answer. 'start' is the model given to --model: an AlphaFold DB prediction committed in models/ (with its predicted aligned error beside it), or a deposited entry from the site's pdb_cache moved by a fixed rigid-body transform (strict NCS expanded first, then x' = R (x - c) + c + t, R a rotation by 'deg' about the unit 'axis', c the centroid of the expanded asymmetric unit, t 'shift' in A). The reference model the placement is checked against is the one the battery itself uses for the set (its manifest row's 'model', else the PDB entry of the set id). 'expect': 'mr_sgno' the space group the placed model is in (the model decides the hand), 'rfree_max' the highest R_FREE accepted, 'cc_min' the lowest correlation of the placed model's intensities with the reference model's (shell-normalised, 10-4 A, best over the lattice's reindexing operators).", - "sets": [ - {"set": "myob_x10sa", "arm": "inhouse", - "start": {"alphafold": "models/AF-P68082-F1-model_v6.cif", - "why": "AlphaFold DB AF-P68082-F1 v6: myoglobin, Equus caballus (UniProt P68082), the species of the battery's reference model 4DC8 (horse heart). No heme"}, - "expect": {"mr_sgno": 4, "rfree_max": 0.50, "cc_min": 0.30}}, - {"set": "cytc_x10sa", "arm": "inhouse", - "start": {"alphafold": "models/AF-P62894-F1-model_v6.cif", - "why": "AlphaFold DB AF-P62894-F1 v6: cytochrome c, Bos taurus (UniProt P62894), the protein of the battery's reference model (bovine heart, placed with 6FF5). No heme; three copies to place, related by a pseudo-translation"}, - "expect": {"mr_sgno": 154, "rfree_max": 0.50, "cc_min": 0.30}}, - {"set": "4nwv", "arm": "open", - "start": {"moved": {"pdb": "4nwv", "axis": [0.36, 0.48, 0.80], "deg": 30.0, "shift": [12.0, -18.0, 25.0]}, - "why": "the deposited model of 4NWV (I222, a virus capsid: 3 chains and 14 strict NCS operators, 45 chains once expanded), turned 30 deg and shifted 33 A: far outside what the rigid body corrects, so it is rejected and molecular replacement places the whole asymmetric unit"}, - "expect": {"mr_sgno": 23, "rfree_max": 0.35, "cc_min": 0.30}} - ] + "about": "Timing benchmarks (README: 'The timing benchmark'), chosen with battery.py timing --benchmark NAME: each set started from a model rugnux has to place by molecular replacement, timed per step and checked for a right answer. 'standard' needs only open data (the open arm's 9zlo, 9s02, 9gjx and 4nwv); 'inhouse' is the earlier set of two in-house standard proteins and 4nwv. 'start' is the model given to --model: an AlphaFold DB prediction committed in models/ (with its predicted aligned error beside it), or a deposited entry (committed in models/pdb/) moved by a fixed rigid-body transform (strict NCS expanded first, then x' = R (x - c) + c + t, R a rotation by 'deg' about the unit 'axis', c the centroid of the expanded asymmetric unit, t 'shift' in A). The reference model the placement is checked against is the one the battery itself uses for the set (its manifest row's 'model', else the PDB entry of the set id; committed in models/pdb/ for every set here but cytc_x10sa, whose reference_model.cif sits beside its data). 'expect': 'mr_sgno' the space group the placed model is in (the model decides the hand), 'rfree_max' the highest R_FREE accepted, 'cc_min' the lowest correlation of the placed model's intensities with the reference model's (shell-normalised, 10-4 A, best over the lattice's reindexing operators).", + "benchmarks": { + "standard": [ + {"set": "9zlo", "arm": "open", "start": {"alphafold": "models/AF-P17090-F1-model_v6.cif", "why": "AlphaFold DB AF-P17090-F1 v6: urease accessory protein UreE, Proteus mirabilis (UniProt P17090), the deposited entity of 9ZLO; two copies to place (P 21 21 21, 2.0 A, EIGER 16M)"}, "expect": {"mr_sgno": 19, "rfree_max": 0.5, "cc_min": 0.3}}, + {"set": "9s02", "arm": "open", "start": {"alphafold": "models/AF-P32322-F1-model_v6.cif", "why": "AlphaFold DB AF-P32322-F1 v6: pyrroline-5-carboxylate reductase 1, Homo sapiens (UniProt P32322; 9S02 deposits isoform 3); five copies to place (P 21 21 2, 1.65 A, EIGER2 16M)"}, "expect": {"mr_sgno": 18, "rfree_max": 0.5, "cc_min": 0.3}}, + {"set": "9gjx", "arm": "open", "start": {"alphafold": "models/AF-Q65MG6-F1-model_v6.cif", "why": "AlphaFold DB AF-Q65MG6-F1 v6: NADH-dependent nitro/flavin oxidoreductase, Bacillus licheniformis (UniProt Q65MG6), the deposited entity of 9GJX; six copies to place (P 1 21 1, 2.4 A, EIGER 16M)"}, "expect": {"mr_sgno": 4, "rfree_max": 0.5, "cc_min": 0.3}}, + {"set": "4nwv", "arm": "open", "start": {"moved": {"pdb": "4nwv", "axis": [0.36, 0.48, 0.8], "deg": 30.0, "shift": [12.0, -18.0, 25.0]}, "why": "the deposited model of 4NWV (I222, a virus capsid: 3 chains and 14 strict NCS operators, 45 chains once expanded), turned 30 deg and shifted 33 A: far outside what the rigid body corrects, so it is rejected and molecular replacement places the whole asymmetric unit"}, "expect": {"mr_sgno": 23, "rfree_max": 0.35, "cc_min": 0.3}} + ], + "inhouse": [ + {"set": "myob_x10sa", "arm": "inhouse", "start": {"alphafold": "models/AF-P68082-F1-model_v6.cif", "why": "AlphaFold DB AF-P68082-F1 v6: myoglobin, Equus caballus (UniProt P68082), the species of the battery's reference model 4DC8 (horse heart). No heme"}, "expect": {"mr_sgno": 4, "rfree_max": 0.5, "cc_min": 0.3}}, + {"set": "cytc_x10sa", "arm": "inhouse", "start": {"alphafold": "models/AF-P62894-F1-model_v6.cif", "why": "AlphaFold DB AF-P62894-F1 v6: cytochrome c, Bos taurus (UniProt P62894), the protein of the battery's reference model (bovine heart, placed with 6FF5). No heme; three copies to place, related by a pseudo-translation"}, "expect": {"mr_sgno": 154, "rfree_max": 0.5, "cc_min": 0.3}}, + {"set": "4nwv", "arm": "open", "start": {"moved": {"pdb": "4nwv", "axis": [0.36, 0.48, 0.8], "deg": 30.0, "shift": [12.0, -18.0, 25.0]}, "why": "the deposited model of 4NWV (I222, a virus capsid: 3 chains and 14 strict NCS operators, 45 chains once expanded), turned 30 deg and shifted 33 A: far outside what the rigid body corrects, so it is rejected and molecular replacement places the whole asymmetric unit"}, "expect": {"mr_sgno": 23, "rfree_max": 0.35, "cc_min": 0.3}} + ] + } } diff --git a/tools/battery/timing.py b/tools/battery/timing.py index e6a76a3b5..6b10aaec0 100644 --- a/tools/battery/timing.py +++ b/tools/battery/timing.py @@ -1,11 +1,12 @@ -"""The timing benchmark: three sets, each started from a model rugnux has to place by molecular +"""The timing benchmarks: a few sets, each started from a model rugnux has to place by molecular replacement, timed per step and checked for a right answer. -timing.json lists the sets (README, 'The timing benchmark'). Two are in-house standard proteins -started from their AlphaFold DB prediction (models/, committed with its predicted aligned error); -one is an open-arm entry started from its deposited model moved by a fixed rigid-body transform, -made at run time from the site's pdb_cache (`start_model`). Each runs the battery's own command for -its arm with --model . A set passes (`check`) when every one of these holds: +timing.json lists the sets of each benchmark (README, 'The timing benchmark'): 'standard', three +open-arm EIGER 16M sets and 4nwv, needs nothing but the open data; 'inhouse' is two in-house standard +proteins and 4nwv. A set is started from its AlphaFold DB prediction (models/, committed with its +predicted aligned error) or from its deposited model moved by a fixed rigid-body transform, made at +run time from the entry committed in models/pdb/ (`start_model`). Each runs the battery's own command +for its arm with --model . A set passes (`check`) when every one of these holds: space_group the battery's own verdict (score.judge: lattice and space group against the reference, the hand excepted) is a pass @@ -41,8 +42,12 @@ CC_SHELLS = 8 # equal-count shells for the normalisation STEP_LINE = re.compile(r"TIMING step (.+?)(?:, \d+ images)? ([\d.]+)$") -def load(): - return json.load(open(MANIFEST))["sets"] +def names(): + return list(json.load(open(MANIFEST))["benchmarks"]) + + +def load(benchmark): + return json.load(open(MANIFEST))["benchmarks"][benchmark] def read_model(path): @@ -66,8 +71,8 @@ def rotation(axis, deg): def start_model(start, wd, pdb_cache): - """The file given to --model: the committed prediction, or the deposited model moved by the - manifest's transform, written into the set's work directory.""" + """The file given to --model: the committed prediction, or the deposited model (models/pdb/, + else the pdb_cache) moved by the manifest's transform, written into the set's work directory.""" if start.get("alphafold"): return os.path.join(HERE, start["alphafold"]) mv = start["moved"] -- 2.54.0 From bfc6ca8487e1539b0027394d234f0d59d789e414 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Fri, 16 Oct 2026 17:16:28 +0200 Subject: [PATCH 02/81] MR and model validation: use every card's memory, split MR's functions over the cards On a multi-GPU host the structure stage ran essentially on one card: the rotation function's launches all went to the search's card, and the rigid-body engines of model validation and MR were admitted only within half of that one card's budget, although RigidBodyGPUPool already placed engines on other cards. On a 4x T4 server 4nwv's MR rotation function took 75.8 s on one card, validation queued its 10 fits on one engine and MR's rescoring and null got one engine. - PlanModelValidationGPU / PlanMolecularReplacementGPU: this card is planned exactly as on a machine with it alone (GPU-vs-CPU placement unchanged: 80% of the total, less what is resident). The rigid-body engines it has no room for go on the other cards in turn, each against its own budget (80% of its total, less the resident bytes, counted on every card) within half of it. MR also puts a copy of the molecular transform on each other card within half of its budget. - RigidBodyGPUPool::Reserve takes per-card engine counts. - Validation forwards the most it holds on any card as gpu_bytes to a validation beside, and may run one beside only where twice that fits every card's budget. - MR splits every rotation and translation function into contiguous slices of the orientation list over the cards holding a transform copy (and room for the call's buffers), one thread per card, gathered back in order. Each orientation is scored by itself (one block / one map), nothing is summed across orientations, so N cards give the bytes of one. - ScoreEngines keeps a room per card; score engines always go on the search's own card; function buffers are held on the card they run on. Byte-identical at N=1 (workstation, one RTX 5080): timing benchmark (myob, cytc, 4nwv) and 4nwv, 8tyy, 6oel, 3inp with --model give the same p.hkl, MTZ data, p_model.pdb, maps and report against rc176. New tests: per-card plans on four 15.6 GB cards (validation 1/3/3/3 engines, MR T+1/T+2/T+2/T+2), and the split driven over 1-4 virtual cards on one device, bitwise equal to one card. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../structure_refinement/ModelValidation.cpp | 56 ++++- .../structure_refinement/ModelValidation.h | 24 +- .../MolecularReplacement.cpp | 218 +++++++++++++++--- .../MolecularReplacement.h | 20 +- .../MolecularReplacementGPU.h | 28 +++ .../structure_refinement/RigidBodyGPU.cpp | 9 +- .../structure_refinement/RigidBodyGPU.h | 6 +- tests/ModelValidationTest.cpp | 39 +++- tests/MolecularReplacementTest.cpp | 108 ++++++++- 9 files changed, 454 insertions(+), 54 deletions(-) diff --git a/image_analysis/structure_refinement/ModelValidation.cpp b/image_analysis/structure_refinement/ModelValidation.cpp index a79dd085d..7be413fe1 100644 --- a/image_analysis/structure_refinement/ModelValidation.cpp +++ b/image_analysis/structure_refinement/ModelValidation.cpp @@ -799,6 +799,7 @@ ModelValidationResult Validate(const std::vector &merged, cuda_trim_allocation_pool(); ModelValidationGPUNeed need; need.card = get_gpu_total_memory(device); + need.other_cards = OtherCardsTotalMemory(device); need.resident = schedule.gpu_resident_bytes; need.beside = schedule.gpu_beside_bytes; sf_engine = StructureFactorsEngine(device, st.models[0], ucell, *sg, d_min, logger); @@ -837,8 +838,8 @@ ModelValidationResult Validate(const std::vector &merged, need.scale_fit = ModelScaleGPUPool::DeviceBytes(obs.size(), 1); need.scale_fit_engines = SCALE_GPU_ENGINES; - gpu_plan = PlanModelValidationGPU(need, static_cast(get_gpu_count())); - gpu_bytes = gpu_plan.bytes; + gpu_plan = PlanModelValidationGPU(need); + gpu_bytes = gpu_plan.most_on_a_card; may_run_beside = gpu_plan.may_run_beside; std::string parts; @@ -858,6 +859,12 @@ ModelValidationResult Validate(const std::vector &merged, part(fmt::format("the null's to {:.2f} A", null_d_min), gpu_plan.null_structure_factors, need.null_structure_factors, 0); part("rigid body", gpu_plan.rigid_body_engines > 0, need.rigid_body, gpu_plan.rigid_body_engines); + if (gpu_plan.rigid_body_engines > gpu_plan.rigid_body_per_card[0]) { + std::string per_card; + for (size_t n : gpu_plan.rigid_body_per_card) + per_card += fmt::format("{}{}", per_card.empty() ? "" : "/", n); + parts += fmt::format(" - {} on the cards from this one", per_card); + } part("scale fits", gpu_plan.scale_fit_engines > 0, need.scale_fit, gpu_plan.scale_fit_engines); logger.Info("Model validation: {} - {} held of a {} budget, 80% of the card's {}{}{}", parts, GBytes(gpu_plan.bytes), GBytes(gpu_plan.budget), GBytes(need.card), @@ -927,7 +934,7 @@ ModelValidationResult Validate(const std::vector &merged, #ifdef JFJOCH_USE_CUDA if (rigid_body_engines && gpu_plan.rigid_body_engines > 0) { - rigid_body_engines->Reserve(gpu_plan.rigid_body_engines); + rigid_body_engines->Reserve(gpu_plan.rigid_body_per_card); rigid_body_pool = rigid_body_engines.get(); } if (gpu_plan.scale_fit_engines > 0) { @@ -1888,7 +1895,7 @@ size_t ModelGPUBudget(size_t card, size_t resident) { return usable > resident ? usable - resident : 0; } -ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need, size_t cards) { +ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need) { ModelValidationGPUPlan plan; plan.budget = ModelGPUBudget(need.card, need.resident); auto take = [&](size_t bytes, size_t limit) { @@ -1903,22 +1910,55 @@ ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need plan.scale_fit_engines = need.scale_fit_engines > 0 && take(need.scale_fit, plan.budget) ? 1 : 0; // More engines only within half of the budget (see the declaration). - const size_t room = std::min(plan.budget / 2, plan.budget > need.beside ? plan.budget - need.beside : 0); + const auto room = [&](size_t budget) { return std::min(budget / 2, budget > need.beside ? budget - need.beside : 0); }; while (plan.rigid_body_engines > 0 && plan.rigid_body_engines < need.rigid_body_engines - && take(need.rigid_body, room)) + && take(need.rigid_body, room(plan.budget))) plan.rigid_body_engines++; while (plan.scale_fit_engines > 0 && plan.scale_fit_engines < need.scale_fit_engines - && take(need.scale_fit, room)) + && take(need.scale_fit, room(plan.budget))) plan.scale_fit_engines++; + // The rigid-body engines this card has no room for, on the other cards in turn. + plan.rigid_body_per_card.assign(1 + need.other_cards.size(), 0); + plan.rigid_body_per_card[0] = plan.rigid_body_engines; + std::vector held(plan.rigid_body_per_card.size(), 0); + held[0] = plan.bytes; + for (bool added = plan.rigid_body_engines > 0; added;) { + added = false; + for (size_t k = 1; k < held.size() && plan.rigid_body_engines < need.rigid_body_engines; k++) + if (held[k] + need.rigid_body <= room(ModelGPUBudget(need.other_cards[k - 1], need.resident))) { + held[k] += need.rigid_body; + plan.rigid_body_per_card[k]++; + plan.rigid_body_engines++; + added = true; + } + } + plan.most_on_a_card = *std::max_element(held.begin(), held.end()); + + const size_t cards = held.size(); + size_t smallest_budget = plan.budget; + for (size_t total : need.other_cards) + smallest_budget = std::min(smallest_budget, ModelGPUBudget(total, need.resident)); const size_t whole = (plan.structure_factors ? need.structure_factors : 0) + (plan.null_structure_factors ? need.null_structure_factors : 0) + (plan.rigid_body_engines > 0 ? need.rigid_body * need.rigid_body_engines : 0) + (plan.scale_fit_engines > 0 ? need.scale_fit * need.scale_fit_engines : 0); - plan.may_run_beside = 2 * whole <= cards * plan.budget; + plan.may_run_beside = 2 * whole <= cards * plan.budget && 2 * plan.most_on_a_card <= smallest_budget; return plan; } +std::vector OtherCardsTotalMemory(int device) { + std::vector out; +#ifdef JFJOCH_USE_CUDA + const int cards = get_gpu_count(); + for (int k = 1; k < cards; k++) + out.push_back(get_gpu_total_memory((device + k) % cards)); +#else + (void) device; +#endif + return out; +} + ModelValidationResult ValidateAgainstModel(const std::vector &merged, const UnitCell &cell, const std::string &model_path, diff --git a/image_analysis/structure_refinement/ModelValidation.h b/image_analysis/structure_refinement/ModelValidation.h index 4bc05dff7..eee350c03 100644 --- a/image_analysis/structure_refinement/ModelValidation.h +++ b/image_analysis/structure_refinement/ModelValidation.h @@ -288,6 +288,9 @@ struct ModelValidationSchedule { // where the null is scored to the data's own resolution and shares the engine to d_min). struct ModelValidationGPUNeed { size_t card = 0; // the card's total memory + // The total memory of every other card, in the order the rigid body's engines count on to them from this + // one (RigidBodyGPUPool::Reserve, OtherCardsTotalMemory). + std::vector other_cards; size_t resident = 0; // ModelValidationSchedule::gpu_resident_bytes size_t beside = 0; // ModelValidationSchedule::gpu_beside_bytes size_t structure_factors = 0; // to the data's resolution, with the maps @@ -302,9 +305,12 @@ struct ModelValidationGPUPlan { size_t budget = 0; // 80% of the card, less what is resident there bool structure_factors = false; bool null_structure_factors = false; - size_t rigid_body_engines = 0; // 0: the rigid body on the CPU + size_t rigid_body_engines = 0; // 0: the rigid body on the CPU; on every card together + // The rigid body's engines on this card and on each of need.other_cards, in that order. + std::vector rigid_body_per_card; size_t scale_fit_engines = 0; // 0: the scale fits on the CPU - size_t bytes = 0; // what the plan holds on the card + size_t bytes = 0; // what the plan holds on this card + size_t most_on_a_card = 0; // what it holds on the card it holds most on bool may_run_beside = false; }; @@ -323,9 +329,17 @@ size_t ModelGPUBudget(size_t card, size_t resident); // only within half of the budget, less what a validation beside holds: they change only how many fits // run at once, and buy little - on a large cell a fit already fills the card (measured on a 16 GB card: // 13.6 s with one rigid-body engine, 13.1 s with two, 12.6 s with five) - so the card keeps headroom -// rather than filling with them. A second validation may run beside where twice the whole of this one's GPU parts, at every -// engine it can use, fits the budgets of the cards together. -ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need, size_t cards = 1); +// rather than filling with them. Where this card has no room for all the rigid-body engines the +// validation can use, the rest go on the other cards, one card after the other in turn, each by the same +// rule against its own budget (80% of its total, less what is resident): this card's parts are decided as +// on a machine with this card alone, and how many cards there are changes only where fits run. A second +// validation may run beside where twice the whole of this one's GPU parts, at every engine it can use, fits +// the budgets of the cards together, and twice what this one holds on any card fits every card's budget. +ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need); + +// The total memory of every card but `device`, in the order from it that the rigid body's engines are put on +// them (RigidBodyGPUPool::Reserve): device + 1, device + 2, ... wrapping round. Empty without CUDA. +std::vector OtherCardsTotalMemory(int device); ModelValidationResult ValidateAgainstModel(const std::vector &merged, const UnitCell &cell, diff --git a/image_analysis/structure_refinement/MolecularReplacement.cpp b/image_analysis/structure_refinement/MolecularReplacement.cpp index 47d165261..e18add1a2 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.cpp +++ b/image_analysis/structure_refinement/MolecularReplacement.cpp @@ -312,16 +312,18 @@ public: CudaDevicePtr> fcalc, fmask; }; - // The room of a merge's plan, set before its placements are scored; `scores`: whether they go on the GPU. - void SetRoom(size_t room, bool scores) { + // The room of a merge's plan on each card, set before its placements are scored; the score engines go on + // `card`, the search's own, and `scores`: whether they go on the GPU at all. + void SetRoom(const std::map &room, int card, bool scores) { std::lock_guard lock(m_); room_ = room; + card_ = card; scores_ = scores; } - bool Fits(size_t bytes) { + bool Fits(int card, size_t bytes) { std::lock_guard lock(m_); - return bytes <= room_; + return bytes <= Room(card); } // The engine for this kind of placement, kept on the card for as long as the returned pointer lives. @@ -338,14 +340,14 @@ public: if (e.engine || e.refused) return Lease(e); e.making = true; - const size_t room = room_; + const int card = card_; + const size_t room = Room(card); lock.unlock(); std::unique_ptr sf; size_t points = 0, bytes = 0; try { - sf = std::make_unique(RigidBodyGPUEngine::CurrentDevice(), st.models[0], - st.cell, sg, d_min); + sf = std::make_unique(card, st.models[0], st.cell, sg, d_min); points = sf->Reflections(); bytes = Bytes(*sf); } catch (const std::exception &) { @@ -359,7 +361,6 @@ public: cv_.notify_all(); return nullptr; } - const int card = sf->Device(); cv_.wait(lock, [&] { return MakeRoom(card, bytes); }); resident_[card] += bytes; lock.unlock(); @@ -403,8 +404,7 @@ public: return sf.DeviceBytes() + ModelScaleGPU::DeviceBytes(points) + 2 * points * sizeof(std::complex); } - // `bytes` of the room on the current card for a function's working buffers, held for as long as the result - // lives. + // `bytes` of the room on `card` for a function's working buffers, held for as long as the result lives. class Held { public: Held(ScoreEngines &owner, int card, size_t bytes) : owner_(owner), card_(card), bytes_(bytes) {} @@ -422,8 +422,7 @@ public: int card_; size_t bytes_; }; - std::unique_ptr Hold(size_t bytes) { - const int card = RigidBodyGPUEngine::CurrentDevice(); + std::unique_ptr Hold(int card, size_t bytes) { std::unique_lock lock(m_); cv_.wait(lock, [&] { return MakeRoom(card, bytes); }); resident_[card] += bytes; @@ -456,7 +455,7 @@ private: // Whether `bytes` more fit the room on the card beside what is held there, once the least recently used // engines no score is using have been taken out. Under m_. bool MakeRoom(int card, size_t bytes) { - while (resident_[card] + bytes > room_) { + while (resident_[card] + bytes > Room(card)) { Entry *oldest = nullptr; for (auto &[key, entry] : engines_) if (entry.engine && entry.card == card && entry.engine.use_count() == 1 @@ -470,9 +469,16 @@ private: return true; } + // Under m_. + size_t Room(int card) const { + const auto it = room_.find(card); + return it == room_.end() ? 0 : it->second; + } + std::map, Entry> engines_; std::map resident_; - size_t room_ = 0; + std::map room_; + int card_ = 0; bool scores_ = false; uint64_t clock_ = 0; std::mutex m_; @@ -2323,9 +2329,10 @@ MergeGPUSize size_merge_gpu(const SearchModel &model, const MRMerge &merge, doub #endif // The search and the decision for one search model. -// `gpu_budget`: what the search may hold on its card (PlanMolecularReplacementGPU). +// `gpu_budget`: what the search may hold on its card (PlanMolecularReplacementGPU); `other_budgets`: on each other +// card, in the order from it. MolecularReplacementResult search_model(const SearchModel &model, const std::vector &merges, Logger &logger, - size_t nthreads, size_t gpu_budget) { + size_t nthreads, size_t gpu_budget, const std::vector &other_budgets) { MolecularReplacementResult result; result.residues_read = model.residues_read; result.residues_kept = model.residues_kept; @@ -2382,6 +2389,7 @@ MolecularReplacementResult search_model(const SearchModel &model, const std::vec // The rotation and translation functions on the GPU where the transform fits the budget (the plan's first // part, PlanMolecularReplacementGPU); the rest of the search is the same either way. std::unique_ptr gpu; + const int device = get_gpu_count() > 0 ? RigidBodyGPUEngine::CurrentDevice() : 0; if (get_gpu_count() > 0 && transform_bytes <= gpu_budget) { try { gpu = std::make_unique(ft); @@ -2391,6 +2399,12 @@ MolecularReplacementResult search_model(const SearchModel &model, const std::vec } } result.gpu_search = gpu != nullptr; + // The transform's copies on the other cards the plan gives one (made by the first merge's plan, the same for + // every merge), and the cards that score a function's orientations: this one first. + std::vector> copies; + std::vector search_cards; + if (gpu) + search_cards.push_back({device, gpu.get()}); #endif result.t_transform = seconds_since(t0); result.tncs = DetectTranslationalNcs(*merges[0].merged, gemmi::UnitCell(merges[0].cell), merges[0].space_group); @@ -2426,16 +2440,41 @@ MolecularReplacementResult search_model(const SearchModel &model, const std::vec MergeGPUSize size = sized[m].get(); MolecularReplacementGPUNeed need; need.budget = gpu_budget; + need.other_budgets = other_budgets; need.transform = transform_bytes; need.rigid_body = size.rigid_body; need.rigid_body_engines = size.rigid_body_engines; need.structure_factors = size.structure_factors; const MolecularReplacementGPUPlan plan = PlanMolecularReplacementGPU(need); - scorers.SetRoom(plan.room, plan.structure_factors); + const int cards = get_gpu_count(); + std::map room; + std::vector engines; + for (size_t k = 0; k < plan.cards.size(); k++) { + room[(device + static_cast(k)) % cards] = plan.cards[k].room; + engines.push_back(plan.cards[k].rigid_body_engines); + } + scorers.SetRoom(room, device, plan.structure_factors); if (plan.rigid_body_engines > 0) { - size.pool->Reserve(plan.rigid_body_engines); + size.pool->Reserve(engines); rigid_body[m] = std::move(size.pool); } + if (gpu && search_cards.size() == 1) { + std::vector on; + for (size_t k = 1; k < plan.cards.size(); k++) + if (plan.cards[k].transform) + on.push_back((device + static_cast(k)) % cards); + copies.resize(on.size()); + std::vector> uploading; + for (size_t i = 0; i < on.size(); i++) + uploading.push_back(std::async(std::launch::async, [&, i] { + const ScopedGpuPin pin(on[i]); + copies[i] = std::make_unique(ft); + })); + for (auto &u : uploading) + u.get(); + for (size_t i = 0; i < on.size(); i++) + search_cards.push_back({on[i], copies[i].get()}); + } logger.Info("Molecular replacement: {} on the GPU: transform {}, rigid body {}, scores {} - {} held of a {} " "budget, {} left for the score engines and the functions' buffers", merges[m].name, plan.search ? in_gb(need.transform) : "on the CPU", @@ -2443,20 +2482,44 @@ MolecularReplacementResult search_model(const SearchModel &model, const std::vec : "on the CPU", plan.structure_factors ? "up to " + in_gb(need.structure_factors) + " each" : "on the CPU", in_gb(plan.bytes), in_gb(gpu_budget), in_gb(plan.room)); + if (plan.cards.size() > 1) { + std::string per_card; + for (const MolecularReplacementGPUCard &c : plan.cards) + per_card += fmt::format("{}{}{}", per_card.empty() ? "" : "/", c.transform ? "T+" : "", + c.rigid_body_engines); + logger.Info("Molecular replacement: {} on the cards from this one: {} (T: a copy of the transform, then " + "the rigid-body engines); the functions split over {} card(s)", + merges[m].name, per_card, search_cards.size()); + } #else (void) m; #endif }; +#ifdef JFJOCH_USE_CUDA + // The cards whose room holds the buffers of a whole call of `bytes`, which a slice of it never needs more + // than - this one always, as the call is made on the GPU only where it fits there - and the room a slice + // holds on its card while it runs. + const auto fitting = [&](size_t bytes) { + std::vector out{search_cards[0]}; + for (size_t k = 1; k < search_cards.size(); k++) + if (scorers.Fits(search_cards[k].device, bytes)) + out.push_back(search_cards[k]); + return out; + }; + const MolecularReplacementGPUHold hold = [&](int card, size_t bytes) -> std::shared_ptr { + return scorers.Hold(card, bytes); + }; +#endif // A rotation or a translation function on the GPU where the search is there and the call's working buffers - // fit the room (held for the call), on the CPU otherwise - the same function, equal to rounding. + // fit the room on this card, on the CPU otherwise - the same function, equal to rounding. On the GPU its + // orientations are split over the cards with a copy of the transform and room for them, each slice holding + // its buffers' room on its card while it runs; the result is the same on any number of cards. const auto rotation_function = [&](const SearchReflections &refl, const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, const std::vector &rotations) { #ifdef JFJOCH_USE_CUDA const size_t bytes = MolecularReplacementGPU::RotationBytes(refl, sg, rotations.size()); - if (gpu && scorers.Fits(bytes)) { - const auto held = scorers.Hold(bytes); - return gpu->RotationFunction(refl, cell, sg, rotations); - } + if (gpu && scorers.Fits(device, bytes)) + return SplitRotationFunction(fitting(bytes), refl, cell, sg, rotations, hold); #endif return RotationFunction(ft, refl, cell, sg, rotations, nthreads); }; @@ -2465,10 +2528,8 @@ MolecularReplacementResult search_model(const SearchModel &model, const std::vec TranslationSetupGPU *prepared) { #ifdef JFJOCH_USE_CUDA const size_t bytes = MolecularReplacementGPU::TranslationBytes(setup, rotations.size(), known != nullptr); - if (gpu && scorers.Fits(bytes)) { - const auto held = scorers.Hold(bytes); - return gpu->TranslationFunction(setup, rotations, known, prepared); - } + if (gpu && scorers.Fits(device, bytes)) + return SplitTranslationFunction(fitting(bytes), setup, rotations, known, prepared, hold); #else (void) prepared; #endif @@ -3320,20 +3381,112 @@ MolecularReplacementGPUPlan PlanMolecularReplacementGPU(const MolecularReplaceme && take(need.rigid_body, need.budget / 2)) plan.rigid_body_engines++; plan.room = need.budget - (plan.search ? need.transform : 0) - plan.rigid_body_engines * need.rigid_body; + plan.cards.push_back({plan.search, plan.rigid_body_engines, plan.room}); + + // The other cards: a copy of the transform each, then the engines this card has no room for, in turn. + std::vector held; + for (size_t budget : need.other_budgets) { + MolecularReplacementGPUCard card; + card.transform = plan.search && need.transform <= budget / 2; + held.push_back(card.transform ? need.transform : 0); + plan.cards.push_back(card); + } + for (bool added = plan.rigid_body_engines > 0; added;) { + added = false; + for (size_t k = 0; k < held.size() && plan.rigid_body_engines < need.rigid_body_engines; k++) + if (held[k] + need.rigid_body <= need.other_budgets[k] / 2) { + held[k] += need.rigid_body; + plan.cards[k + 1].rigid_body_engines++; + plan.rigid_body_engines++; + added = true; + } + } + for (size_t k = 0; k < held.size(); k++) + plan.cards[k + 1].room = need.other_budgets[k] - held[k]; return plan; } +#ifdef JFJOCH_USE_CUDA +namespace { + +// slice(k, first, last) for the k-th of `parts` contiguous slices [first, last) of `n` items, each on a thread of +// its own; returns when every slice is done. +void on_slices(size_t n, size_t parts, const std::function &slice) { + const size_t per = (n + parts - 1) / parts; + std::vector> running; + for (size_t k = 0; k < parts; k++) + running.push_back(std::async(std::launch::async, [&, k] { + const size_t first = std::min(k * per, n); + slice(k, first, std::min(first + per, n)); + })); + for (auto &r : running) + r.get(); +} + +} // namespace + +std::vector SplitRotationFunction(const std::vector &cards, + const SearchReflections &refl, const gemmi::UnitCell &cell, + const gemmi::SpaceGroup &sg, const std::vector &rotations, + const MolecularReplacementGPUHold &hold) { + std::vector out(rotations.size()); + on_slices(rotations.size(), cards.size(), [&](size_t k, size_t first, size_t last) { + if (first == last) + return; + const std::vector slice(rotations.begin() + first, rotations.begin() + last); + const ScopedGpuPin pin(cards[k].device); + const std::shared_ptr held = + hold ? hold(cards[k].device, MolecularReplacementGPU::RotationBytes(refl, sg, slice.size())) : nullptr; + const std::vector v = cards[k].gpu->RotationFunction(refl, cell, sg, slice); + std::copy(v.begin(), v.end(), out.begin() + first); + }); + return out; +} + +std::vector SplitTranslationFunction(const std::vector &cards, + const TranslationSetup &setup, + const std::vector &rotations, + const std::vector> *known, + TranslationSetupGPU *prepared, + const MolecularReplacementGPUHold &hold) { + // What every card's slice needs of the setup, worked out once. + std::unique_ptr made{nullptr, nullptr}; + if (prepared == nullptr && cards.size() > 1 && rotations.size() > 1) { + made = cards[0].gpu->Prepare(setup, known != nullptr); + prepared = made.get(); + } + std::vector out(rotations.size()); + on_slices(rotations.size(), cards.size(), [&](size_t k, size_t first, size_t last) { + if (first == last) + return; + const std::vector slice(rotations.begin() + first, rotations.begin() + last); + const ScopedGpuPin pin(cards[k].device); + const std::shared_ptr held = + hold ? hold(cards[k].device, MolecularReplacementGPU::TranslationBytes(setup, slice.size(), known != nullptr)) + : nullptr; + const std::vector v = cards[k].gpu->TranslationFunction(setup, slice, known, prepared); + std::copy(v.begin(), v.end(), out.begin() + first); + }); + return out; +} +#endif + MolecularReplacementResult RunMolecularReplacement(const std::string &model_path, const std::vector &merges, Logger &logger, size_t nthreads, size_t gpu_resident_bytes) { const auto t0 = std::chrono::steady_clock::now(); // What the search may hold on the card: the budget model validation keeps to. What the stream-ordered pool // holds with no buffer in it - freed by the steps before - goes back to the driver first, as before a // validation: the engines are allocated outside the pool and cannot use it. + // The same on every other card, counting what is resident as held on each. size_t gpu_budget = 0; + std::vector other_budgets; #ifdef JFJOCH_USE_CUDA if (get_gpu_count() > 0) { cuda_trim_allocation_pool(); - gpu_budget = ModelGPUBudget(get_gpu_total_memory(RigidBodyGPUEngine::CurrentDevice()), gpu_resident_bytes); + const int device = RigidBodyGPUEngine::CurrentDevice(); + gpu_budget = ModelGPUBudget(get_gpu_total_memory(device), gpu_resident_bytes); + for (size_t total : OtherCardsTotalMemory(device)) + other_budgets.push_back(ModelGPUBudget(total, gpu_resident_bytes)); } #else (void) gpu_resident_bytes; @@ -3355,7 +3508,7 @@ MolecularReplacementResult RunMolecularReplacement(const std::string &model_path if (!pae_path.empty()) logger.Info("Molecular replacement: {} rigid domain(s) in the predicted aligned error {}", domains.size(), pae_path); - MolecularReplacementResult result = search_model(model, merges, logger, nthreads, gpu_budget); + MolecularReplacementResult result = search_model(model, merges, logger, nthreads, gpu_budget, other_budgets); result.model_path = model_path; result.pae_domains = static_cast(domains.size()); result.t_model += t_model; @@ -3366,7 +3519,10 @@ MolecularReplacementResult RunMolecularReplacement(const std::string &model_path if (result.ok && result.chosen < 0 && result.decision.starts_with("NOT_PLACED") && domains.size() >= 2) { const auto t_domains = std::chrono::steady_clock::now(); // Each domain on a thread of its own, its log kept and replayed in order, and with an equal share of the - // budget. + // budget on every card. + std::vector other_shares; + for (size_t b : other_budgets) + other_shares.push_back(b / domains.size()); std::vector logs; for (size_t i = 0; i < domains.size(); i++) logs.push_back(Logger::Buffered()); @@ -3374,7 +3530,7 @@ MolecularReplacementResult RunMolecularReplacement(const std::string &model_path for (size_t i = 0; i < domains.size(); i++) running.push_back(std::async(std::launch::async, [&, i] { return search_model(DomainModel(model, domains[i]), merges, logs[i], nthreads, - gpu_budget / domains.size()); + gpu_budget / domains.size(), other_shares); })); std::vector found; for (size_t i = 0; i < domains.size(); i++) { diff --git a/image_analysis/structure_refinement/MolecularReplacement.h b/image_analysis/structure_refinement/MolecularReplacement.h index ea163349a..c3820666c 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.h +++ b/image_analysis/structure_refinement/MolecularReplacement.h @@ -380,18 +380,30 @@ struct MolecularReplacementResult { // buffers may take beside them. Bytes of one of each; 0 where that part cannot run on the GPU. struct MolecularReplacementGPUNeed { size_t budget = 0; // ModelGPUBudget (ModelValidation.h), or a PAE domain's share of it + // The same for every other card, in the order the rigid body's engines count on to them from this one + // (RigidBodyGPUPool::Reserve, OtherCardsTotalMemory). + std::vector other_budgets; size_t transform = 0; size_t rigid_body = 0; size_t rigid_body_engines = 0; // how many rigid-body fits can run at once size_t structure_factors = 0; // the largest score engine of the merge's placements }; +// What a search puts on one card. +struct MolecularReplacementGPUCard { + bool transform = false; // a copy of the transform: the card scores its share of every function + size_t rigid_body_engines = 0; + size_t room = 0; // for the functions' working buffers (and on this card, the score engines) +}; + struct MolecularReplacementGPUPlan { bool search = false; // the transform held on the GPU, the functions run there - size_t rigid_body_engines = 0; // 0: the rigid body on the CPU + size_t rigid_body_engines = 0; // 0: the rigid body on the CPU; on every card together bool structure_factors = false; // the scores on the GPU size_t room = 0; // for the score engines and the functions' working buffers size_t bytes = 0; // the transform, the rigid-body engines and one score engine + // This card and each card of need.other_budgets, in that order. + std::vector cards; }; // The one rule for what a search puts on its GPU, decided before anything is reserved, from the budget model @@ -402,7 +414,11 @@ struct MolecularReplacementGPUPlan { // CPU. More rigid-body engines only within half of the budget, as model validation adds them. What is left of // the budget beside the transform and the engines is the room the score engines - kept for as long as they fit, // the least recently used given up first - and the functions' working buffers share, each waiting for the other -// to be done rather than spilling past it. +// to be done rather than spilling past it. This card is planned as on a machine with it alone; each other card +// then takes, within half of its own budget, a copy of the transform - the rotation and translation functions' +// orientations are split over the cards that hold one, each scored as on one card - and, one card after the +// other in turn, the rigid-body engines this card has no room for. How many cards there are changes only +// where the work runs, never a number. MolecularReplacementGPUPlan PlanMolecularReplacementGPU(const MolecularReplacementGPUNeed &need); // Search `merges` (the answer's first) for the predicted model at `model_path`, in every space group with diff --git a/image_analysis/structure_refinement/MolecularReplacementGPU.h b/image_analysis/structure_refinement/MolecularReplacementGPU.h index 1d68e31e0..c8f3ad538 100644 --- a/image_analysis/structure_refinement/MolecularReplacementGPU.h +++ b/image_analysis/structure_refinement/MolecularReplacementGPU.h @@ -10,6 +10,8 @@ // rounding, not bit for bit. Every reduction runs in a fixed order and nothing is summed with an // atomic, so the GPU is deterministic on its own. +#include +#include #include #include @@ -57,3 +59,29 @@ public: private: std::unique_ptr state_; }; + +// The search on one card: the transform uploaded on `device`. +struct MolecularReplacementGPUOnCard { + int device = 0; + MolecularReplacementGPU *gpu = nullptr; +}; + +// What a function's slice holds on its card while it runs: called on the slice's thread, with the card and the +// bytes its buffers take, and kept until the slice is done. Empty: nothing is held. +using MolecularReplacementGPUHold = std::function(int device, size_t bytes)>; + +// The rotation and translation functions with the orientations split over `cards`: the k-th card scores the +// k-th of cards.size() contiguous slices of `rotations`, on a thread of its own beside the others, and the +// results are put back in the order of `rotations`. Every orientation is scored by itself - one block of the +// rotation function, one map of the translation function - and nothing is summed across orientations, so the +// result is that of one card, bit for bit, on any number of cards. +std::vector SplitRotationFunction(const std::vector &cards, + const SearchReflections &refl, const gemmi::UnitCell &cell, + const gemmi::SpaceGroup &sg, const std::vector &rotations, + const MolecularReplacementGPUHold &hold = {}); +std::vector SplitTranslationFunction(const std::vector &cards, + const TranslationSetup &setup, + const std::vector &rotations, + const std::vector> *known, + TranslationSetupGPU *prepared, + const MolecularReplacementGPUHold &hold = {}); diff --git a/image_analysis/structure_refinement/RigidBodyGPU.cpp b/image_analysis/structure_refinement/RigidBodyGPU.cpp index 184015750..65d075b2c 100644 --- a/image_analysis/structure_refinement/RigidBodyGPU.cpp +++ b/image_analysis/structure_refinement/RigidBodyGPU.cpp @@ -179,13 +179,16 @@ size_t RigidBodyGPUPool::EngineBytes() const { return RigidBodyGPUEngine::DeviceBytes(*cap_); } -void RigidBodyGPUPool::Reserve(size_t engines) { +void RigidBodyGPUPool::Reserve(const std::vector &per_card) { // The engines give the same bits on any card of one model, so where they are changes only where they run. // A card that is merely busy is waited for by the engines' allocations, never left for the CPU. try { const int cards = get_gpu_count(); - for (size_t i = 0; i < engines; i++) - engines_.push_back(std::make_unique(*cap_, (device_ + static_cast(i)) % cards)); + const size_t rounds = per_card.empty() ? 0 : *std::max_element(per_card.begin(), per_card.end()); + for (size_t round = 0; round < rounds; round++) + for (size_t k = 0; k < per_card.size(); k++) + if (round < per_card[k]) + engines_.push_back(std::make_unique(*cap_, (device_ + static_cast(k)) % cards)); set_gpu(device_); // each engine was made on its own card } catch (const JFJochException &e) { throw RigidBodyGPUFailure(e.what()); diff --git a/image_analysis/structure_refinement/RigidBodyGPU.h b/image_analysis/structure_refinement/RigidBodyGPU.h index 29732ec70..d99ad72e7 100644 --- a/image_analysis/structure_refinement/RigidBodyGPU.h +++ b/image_analysis/structure_refinement/RigidBodyGPU.h @@ -56,9 +56,9 @@ public: bool Cover(const gemmi::Model &model, const gemmi::SpaceGroup &sg, Logger &logger); size_t EngineBytes() const; - // Reserves `engines` engines, engine i on the i-th card from Device(), so a validation uses every - // card there is. Engines that cannot be set up throw RigidBodyGPUFailure. - void Reserve(size_t engines); + // Reserves per_card[k] engines on the k-th card from Device() (k = 0 is Device() itself), one card after + // the other in turn. Engines that cannot be set up throw RigidBodyGPUFailure. + void Reserve(const std::vector &per_card); size_t Engines() const { return engines_.size(); } // The card the pool was made from, which its first engine is on and the others count on from. int Device() const { return device_; } diff --git a/tests/ModelValidationTest.cpp b/tests/ModelValidationTest.cpp index cec04d31d..cd6852bab 100644 --- a/tests/ModelValidationTest.cpp +++ b/tests/ModelValidationTest.cpp @@ -162,6 +162,43 @@ TEST_CASE("ModelValidation_GPUPlanOnCardSizes", "[ModelValidation]") { CHECK(large.may_run_beside); } +TEST_CASE("ModelValidation_GPUPlanEnginesOnOtherCards", "[ModelValidation]") { + // Four cards of 15.6 GB each: this card cannot take a second rigid-body engine within half of its 12.48 GB + // budget (4.42 + 1.88 GB > 6.24 GB), and the other nine go three to a card on the other three. + const size_t card = 15600000000; + const ModelValidationGPUPlan alone = PlanModelValidationGPU(LargeCellNeed(card)); + ModelValidationGPUNeed need = LargeCellNeed(card); + need.other_cards = {card, card, card}; + const ModelValidationGPUPlan plan = PlanModelValidationGPU(need); + // This card's parts are those of the card alone. + CHECK(plan.budget == alone.budget); + CHECK(plan.bytes == alone.bytes); + CHECK(plan.structure_factors == alone.structure_factors); + CHECK(plan.null_structure_factors == alone.null_structure_factors); + CHECK(plan.scale_fit_engines == alone.scale_fit_engines); + REQUIRE(plan.rigid_body_per_card.size() == 4); + CHECK(plan.rigid_body_per_card[0] == alone.rigid_body_engines); + CHECK(alone.rigid_body_engines == 1); + CHECK(plan.rigid_body_per_card == std::vector{1, 3, 3, 3}); + CHECK(plan.rigid_body_engines == 10); + CHECK(plan.most_on_a_card == 3 * need.rigid_body); + CHECK(plan.may_run_beside); + // Each other card within half of its own budget, less what a validation beside holds there. + need.beside = plan.most_on_a_card; + const ModelValidationGPUPlan beside = PlanModelValidationGPU(need); + for (size_t k = 1; k < 4; k++) + CHECK(beside.rigid_body_per_card[k] * need.rigid_body + <= std::min(plan.budget / 2, plan.budget - need.beside)); + // What is resident is counted on every card: a merge holding most of each leaves no room for extra engines. + need.beside = 0; + need.resident = 8 * GB; + const ModelValidationGPUPlan full = PlanModelValidationGPU(need); + CHECK(full.rigid_body_per_card == std::vector{1, 1, 1, 1}); + // One card alone: the plan as it was. + CHECK(alone.rigid_body_per_card == std::vector{1}); + CHECK(alone.most_on_a_card == alone.bytes); +} + TEST_CASE("ModelValidation_GPUPlanPartThatDoesNotFitGoesToTheCPU", "[ModelValidation]") { ModelValidationGPUNeed need = LargeCellNeed(8 * GB); need.structure_factors = 7 * GB; // over the 6.4 GB budget on its own @@ -1282,7 +1319,7 @@ namespace { size_t engines, Logger &logger) { auto pool = RigidBodyGPUPool::Plan(model, cell, sg, d_min, observations, logger); REQUIRE(pool); - pool->Reserve(engines); + pool->Reserve({engines}); return pool; } } diff --git a/tests/MolecularReplacementTest.cpp b/tests/MolecularReplacementTest.cpp index e03353a9f..cf8f3054e 100644 --- a/tests/MolecularReplacementTest.cpp +++ b/tests/MolecularReplacementTest.cpp @@ -3,8 +3,10 @@ #include +#include #include #include +#include #include #include @@ -131,6 +133,46 @@ TEST_CASE("MolecularReplacement_GPUPlanOnCardSizes", "[MolecularReplacement]") { CHECK(PlanMolecularReplacementGPU(LargeCellNeed(64 * GB)).rigid_body_engines == 9); } +TEST_CASE("MolecularReplacement_GPUPlanOnOtherCards", "[MolecularReplacement]") { + // Four cards of 15.6 GB, a 12.48 GB budget each: this card holds what it holds alone (one engine), each other + // card a copy of the transform and, within half of its budget, two engines. + const size_t card = 15600000000; + const MolecularReplacementGPUPlan alone = PlanMolecularReplacementGPU(LargeCellNeed(card)); + MolecularReplacementGPUNeed need = LargeCellNeed(card); + need.other_budgets = {need.budget, need.budget, need.budget}; + const MolecularReplacementGPUPlan plan = PlanMolecularReplacementGPU(need); + CHECK(plan.search == alone.search); + CHECK(plan.structure_factors == alone.structure_factors); + CHECK(plan.room == alone.room); + CHECK(plan.bytes == alone.bytes); + REQUIRE(plan.cards.size() == 4); + CHECK(plan.cards[0].transform); + CHECK(plan.cards[0].rigid_body_engines == alone.rigid_body_engines); + CHECK(plan.cards[0].room == alone.room); + CHECK(alone.rigid_body_engines == 1); + for (size_t k = 1; k < 4; k++) { + CHECK(plan.cards[k].transform); + CHECK(plan.cards[k].rigid_body_engines == 2); + CHECK(plan.cards[k].room == need.budget - need.transform - 2 * need.rigid_body); + } + CHECK(plan.rigid_body_engines == 7); + // No more engines than the search can use: with 64 GB cards this card alone takes all nine. + need = LargeCellNeed(64 * GB); + need.other_budgets = {need.budget}; + const MolecularReplacementGPUPlan large = PlanMolecularReplacementGPU(need); + CHECK(large.rigid_body_engines == 9); + CHECK(large.cards[0].rigid_body_engines == 9); + CHECK(large.cards[1].rigid_body_engines == 0); + CHECK(large.cards[1].transform); + // A search on the CPU puts nothing on the other cards either. + need = LargeCellNeed(card); + need.transform = need.budget + 1; + need.other_budgets = {need.budget}; + const MolecularReplacementGPUPlan cpu = PlanMolecularReplacementGPU(need); + CHECK(!cpu.search); + CHECK(!cpu.cards[1].transform); +} + TEST_CASE("MolecularReplacement_GPUPlanPartThatDoesNotFitGoesToTheCPU", "[MolecularReplacement]") { // 6 GB, a 4.8 GB budget, which the three parts fill to 4.80 GB: with a larger score engine, the scores // go to the CPU and the transform and the rigid body stay. @@ -511,7 +553,7 @@ TEST_CASE("MolecularReplacement_RigidBodyBesideFixedCopy", "[MolecularReplacemen gemmi::Structure gpu = start; auto pool = RigidBodyGPUPool::Plan(gpu.models[0], cell, sg, 3.0, fobs.v.size(), logger); REQUIRE(pool); - pool->Reserve(1); + pool->Reserve({1}); RefineRigidBody(gpu.models[0], cell, sg, fobs, 3.0, logger, 4, pool.get(), &first.models[0]); CHECK(worst(gpu) < 0.1); } @@ -577,3 +619,67 @@ TEST_CASE("MolecularReplacement_GPUMatchesCPU", "[MolecularReplacement]") { } } #endif + +#ifdef JFJOCH_USE_CUDA +TEST_CASE("MolecularReplacement_SplitOverCardsMatchesOneCard", "[MolecularReplacement]") { + if (get_gpu_count() == 0) + SKIP("no GPU"); + const SearchModel model = synthetic_model(); + const gemmi::UnitCell cell(42, 50, 58, 90, 90, 90); + const gemmi::SpaceGroup &sg = gemmi::get_spacegroup_by_name("P 21 21 21"); + const gemmi::Mat33 truth = axis_angle({1, 2, 3}, 50); + const auto merged = observed(PlaceSearchModel(model, truth, gemmi::Fractional(0.17, 0.31, 0.09), cell, sg)); + const SearchReflections refl = MakeSearchReflections(merged, cell, sg, 4.0, 12.0); + const MolecularTransform ft(model, 4.0, 4); + // Four "cards", each a search of its own on this one: the split's slices, gather and order are those of four + // cards, so this is the multi-card path, run where there is one card. + MolecularReplacementGPU one(ft); + std::vector> copies; + std::vector cards; + for (int k = 0; k < 4; k++) { + copies.push_back(std::make_unique(ft)); + cards.push_back({0, copies.back().get()}); // the test thread's device + } + std::atomic holds{0}; + const MolecularReplacementGPUHold hold = [&](int, size_t bytes) -> std::shared_ptr { + CHECK(bytes > 0); + holds++; + return nullptr; + }; + const auto all = RotationAsu(UniformRotations(15.0), CartesianPointGroup(sg, cell)); + REQUIRE(all.size() % 4 != 0); // the last slice shorter than the others + for (size_t n : {all.size(), size_t(3), size_t(1)}) { + const std::vector rotations(all.begin(), all.begin() + n); + const std::vector want = one.RotationFunction(refl, cell, sg, rotations); + for (size_t parts : {1, 2, 3, 4}) { + const std::vector some(cards.begin(), cards.begin() + parts); + const std::vector got = SplitRotationFunction(some, refl, cell, sg, rotations, hold); + CAPTURE(n, parts); + REQUIRE(got.size() == want.size()); + CHECK(std::memcmp(got.data(), want.data(), want.size() * sizeof(double)) == 0); + } + } + CHECK(holds > 0); + + const TranslationSetup setup = MakeTranslationSetup(refl, cell, sg); + const std::vector orientations{truth, all[3], all[17], all[20], all[31]}; + const TranslationSetup setup2 = MakeTranslationSetup(refl, cell, sg, true); + const auto known = KnownStructureFactors(ft, setup2, cell, {all[5]}, {gemmi::Fractional(0.3, 0.1, 0.4)}); + for (const std::vector> *k : {(const std::vector> *) nullptr, &known}) { + const TranslationSetup &s = k == nullptr ? setup : setup2; + const std::vector want = one.TranslationFunction(s, orientations, k); + for (size_t parts : {2, 4}) { + const std::vector some(cards.begin(), cards.begin() + parts); + const std::vector got = SplitTranslationFunction(some, s, orientations, k, nullptr, hold); + CAPTURE(parts, k != nullptr); + REQUIRE(got.size() == want.size()); + for (size_t i = 0; i < want.size(); i++) { + CHECK(std::memcmp(&got[i].z, &want[i].z, sizeof(double)) == 0); + CHECK(got[i].t.x == want[i].t.x); + CHECK(got[i].t.y == want[i].t.y); + CHECK(got[i].t.z == want[i].t.z); + } + } + } +} +#endif -- 2.54.0 From 3aa67a60597513c883d2411ae4d3e096eacc6492 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Fri, 16 Oct 2026 17:55:30 +0200 Subject: [PATCH 03/81] MR GPU: corner-packed molecular transform for the rotation function Each sample of the molecular transform interpolates over 8 grid corners that lie in four u-rows of the half-l grid, 4-5 32-byte sectors per sample. On the GPU the transform can now be held packed: every point (i, j, l) stores its four (v, w) corners, so the two neighbouring records hold all eight, read from two places. The packed grid is cut to |u| <= reach as the plain one already is in v, and has the conjugate plane l = -1 in front; below l = -1 the eight corners are read mirrored about -i0 - 1 and conjugated. Same floats, same accumulation order: rotation and translation functions give the same bits (checked in MolecularReplacement_GPUMatchesCPU). The layout is chosen up front from the budget (PackMolecularTransformGPU): packed where the answer merge's plan holds every part beside it that it holds beside the plain transform, and the budget holds both grids while the packed one is made from the plain one on the device; logged either way. The upload no longer stages a host copy of the grid. The CPU At() is unchanged: a microbenchmark gained 1.3x single-threaded and ~1.0-1.1x at 16-32 threads, not worth 2.7x the host memory. 4nwv (moved model, timing benchmark), RTX 5080: rotation 5.56 -> 2.48 s, MR step 20.9 -> 16.7 s; transform on the card 0.84 -> 2.28 GB. p.hkl, p_model.pdb and the MR_ report block byte-identical on the timing sets (GPU and --no-gpu) and on 4nwv, 8tyy, 6oel, 3inp. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../MolecularReplacement.cpp | 30 +++++- .../MolecularReplacement.h | 5 + .../MolecularReplacementGPU.cu | 98 ++++++++++++++++--- .../MolecularReplacementGPU.h | 9 +- tests/MolecularReplacementTest.cpp | 28 ++++++ 5 files changed, 150 insertions(+), 20 deletions(-) diff --git a/image_analysis/structure_refinement/MolecularReplacement.cpp b/image_analysis/structure_refinement/MolecularReplacement.cpp index 47d165261..782afc499 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.cpp +++ b/image_analysis/structure_refinement/MolecularReplacement.cpp @@ -2377,18 +2377,35 @@ MolecularReplacementResult search_model(const SearchModel &model, const std::vec return result; } const MolecularTransform &ft = *ft_made; - [[maybe_unused]] const size_t transform_bytes = ft.Grid().data.size() * sizeof(std::complex); + [[maybe_unused]] size_t transform_bytes = ft.Grid().data.size() * sizeof(std::complex); #ifdef JFJOCH_USE_CUDA // The rotation and translation functions on the GPU where the transform fits the budget (the plan's first // part, PlanMolecularReplacementGPU); the rest of the search is the same either way. std::unique_ptr gpu; if (get_gpu_count() > 0 && transform_bytes <= gpu_budget) { + // Packed where the answer merge's plan holds as much beside it (PackMolecularTransformGPU), decided on + // that merge's sizes, which its plan then takes as they are. + MergeGPUSize size = sized[0].get(); + MolecularReplacementGPUNeed need; + need.budget = gpu_budget; + need.transform = transform_bytes; + need.rigid_body = size.rigid_body; + need.rigid_body_engines = size.rigid_body_engines; + need.structure_factors = size.structure_factors; + const size_t packed_bytes = MolecularReplacementGPU::TransformBytes(ft, true); + const bool packed = PackMolecularTransformGPU(need, packed_bytes); + sized[0] = std::async(std::launch::deferred, [size = std::move(size)]() mutable { return std::move(size); }); + logger.Info("Molecular replacement: the transform on the GPU {}", packed + ? fmt::format("packed, {} in place of {}", in_gb(packed_bytes), in_gb(transform_bytes)) + : fmt::format("plain, {} (packed, {}, does not fit beside the rest of the plan)", in_gb(transform_bytes), + in_gb(packed_bytes))); try { - gpu = std::make_unique(ft); + gpu = std::make_unique(ft, packed); } catch (const JFJochException &e) { result.failure_reason = std::string("GPU: ") + e.what(); return result; } + transform_bytes = MolecularReplacementGPU::TransformBytes(ft, packed); } result.gpu_search = gpu != nullptr; #endif @@ -3323,6 +3340,15 @@ MolecularReplacementGPUPlan PlanMolecularReplacementGPU(const MolecularReplaceme return plan; } +bool PackMolecularTransformGPU(const MolecularReplacementGPUNeed &need, size_t packed) { + MolecularReplacementGPUNeed with_packed = need; + with_packed.transform = packed; + const MolecularReplacementGPUPlan plain = PlanMolecularReplacementGPU(need); + const MolecularReplacementGPUPlan plan = PlanMolecularReplacementGPU(with_packed); + return plan.search && plan.rigid_body_engines == plain.rigid_body_engines + && plan.structure_factors == plain.structure_factors && need.transform + packed <= need.budget; +} + MolecularReplacementResult RunMolecularReplacement(const std::string &model_path, const std::vector &merges, Logger &logger, size_t nthreads, size_t gpu_resident_bytes) { const auto t0 = std::chrono::steady_clock::now(); diff --git a/image_analysis/structure_refinement/MolecularReplacement.h b/image_analysis/structure_refinement/MolecularReplacement.h index ea163349a..87bd779e3 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.h +++ b/image_analysis/structure_refinement/MolecularReplacement.h @@ -405,6 +405,11 @@ struct MolecularReplacementGPUPlan { // to be done rather than spilling past it. MolecularReplacementGPUPlan PlanMolecularReplacementGPU(const MolecularReplacementGPUNeed &need); +// Whether the molecular transform goes on the GPU packed (MolecularReplacementGPU), `packed` bytes in place of +// the plain one's need.transform: where the plan with it holds every part the plain plan holds, and the budget +// both grids while the packed one is made from the plain one. +bool PackMolecularTransformGPU(const MolecularReplacementGPUNeed &need, size_t packed); + // Search `merges` (the answer's first) for the predicted model at `model_path`, in every space group with // the rotations of each merge's group - one copy, then further copies one at a time while each new one // stands out, packs and lowers R-free - and decide. A candidate is PLACED where a copy's translation diff --git a/image_analysis/structure_refinement/MolecularReplacementGPU.cu b/image_analysis/structure_refinement/MolecularReplacementGPU.cu index 23cf234f0..bb0f92a04 100644 --- a/image_analysis/structure_refinement/MolecularReplacementGPU.cu +++ b/image_analysis/structure_refinement/MolecularReplacementGPU.cu @@ -31,8 +31,17 @@ constexpr int MAX_BINS = 16; // SEARCH_BINS (MolecularReplacement.cpp) is 10 // The rotation function's per-reflection scratch is made for this many orientations at a time. constexpr size_t ROTATION_BATCH = 2048; +// The eight corners of an interpolation in the half-l grid lie in four rows of u. Packed, every point (i, j, l) +// holds the four (v, w) corners about it, so that two neighbouring records hold all eight: the same values, +// read from two places instead of four, for four times the memory per point. The packed grid is cut to the indices +// the plain one is read at in u as it is in v (2 reach + 1, so nv), and has the conjugate plane l = -1 in front. +struct Corners { + float2 v[4]; // (j, l), (j, l + 1), (j + 1, l), (j + 1, l + 1) +}; + struct Transform { - const float2 *data; + const float2 *data; // the plain half-l grid, or null + const Corners *corners; // the packed one, or null: nv x nv x (nwh + 1), the plane l = -1 first int nu, nv, nwh; float box, blur; }; @@ -69,18 +78,57 @@ __device__ float2 transform_interpolate(const Transform &g, const Rot &r, float3 f[a] = u - i0[a]; } float2 out = make_float2(0, 0); - for (int dx = 0; dx < 2; dx++) - for (int dy = 0; dy < 2; dy++) - for (int dz = 0; dz < 2; dz++) { - const float w = (dx ? f[0] : 1 - f[0]) * (dy ? f[1] : 1 - f[1]) * (dz ? f[2] : 1 - f[2]); - const float2 v = transform_at(g, i0[0] + dx, i0[1] + dy, i0[2] + dz); - out.x += w * v.x; - out.y += w * v.y; - } + if (g.corners) { + // Below l = -1 every corner is the conjugate of one about the opposite point, -i0 - 1: read there, + // in the mirrored order. + const bool mirror = i0[2] < -1; + int i = mirror ? -i0[0] - 1 : i0[0], j = mirror ? -i0[1] - 1 : i0[1]; + const int l = mirror ? -i0[2] - 1 : i0[2]; + if (i < 0 || i >= g.nv) { i %= g.nv; if (i < 0) i += g.nv; } + if (j < 0 || j >= g.nv) { j %= g.nv; if (j < 0) j += g.nv; } + const size_t row = static_cast(g.nv) * (j + static_cast(g.nv) * (l + 1)); + const Corners c[2] = {g.corners[i + row], g.corners[(i + 1 < g.nv ? i + 1 : 0) + row]}; + for (int dx = 0; dx < 2; dx++) + for (int dy = 0; dy < 2; dy++) + for (int dz = 0; dz < 2; dz++) { + const float w = (dx ? f[0] : 1 - f[0]) * (dy ? f[1] : 1 - f[1]) * (dz ? f[2] : 1 - f[2]); + float2 v = mirror ? c[1 - dx].v[2 * (1 - dy) + 1 - dz] : c[dx].v[2 * dy + dz]; + if (mirror) + v.y = -v.y; + out.x += w * v.x; + out.y += w * v.y; + } + } else { + for (int dx = 0; dx < 2; dx++) + for (int dy = 0; dy < 2; dy++) + for (int dz = 0; dz < 2; dz++) { + const float w = (dx ? f[0] : 1 - f[0]) * (dy ? f[1] : 1 - f[1]) * (dz ? f[2] : 1 - f[2]); + const float2 v = transform_at(g, i0[0] + dx, i0[1] + dy, i0[2] + dz); + out.x += w * v.x; + out.y += w * v.y; + } + } const float unblur = expf(g.blur * (s[0] * s[0] + s[1] * s[1] + s[2] * s[2]) / 4.0f); return make_float2(out.x * unblur, out.y * unblur); } +// The packed grid from the plain one: record (i, j, l) holds transform_at() of its four (v, w) corners, i the +// index of u's frequency in a grid of nv as j is of v's; zero past the last plane, which is never read. +__global__ void pack_corners(Transform g, Corners *out) { + const size_t n = static_cast(g.nv) * g.nv * (g.nwh + 1); + const size_t r = static_cast(blockIdx.x) * blockDim.x + threadIdx.x; + if (r >= n) + return; + const int i = static_cast(r % g.nv), j = static_cast((r / g.nv) % g.nv); + const int l = static_cast(r / (static_cast(g.nv) * g.nv)) - 1; + const int u = i <= g.nv / 2 ? i : i - g.nv; + Corners c; + for (int dy = 0; dy < 2; dy++) + for (int dz = 0; dz < 2; dz++) + c.v[2 * dy + dz] = l + dz < g.nwh ? transform_at(g, u, j + dy, l + dz) : make_float2(0, 0); + out[r] = c; +} + // A block-wide sum in a fixed order: each thread's value into shared memory, then a tree. __device__ double block_sum(double v, double *sh) { sh[threadIdx.x] = v; @@ -352,18 +400,38 @@ gemmi::FPhiGrid MapToFPhiGPU(const gemmi::Grid &map, int reach) { struct MolecularReplacementGPUState { CudaStream stream; CudaDevicePtr grid; + CudaDevicePtr corners; Transform transform{}; }; -MolecularReplacementGPU::MolecularReplacementGPU(const MolecularTransform &ft) +size_t MolecularReplacementGPU::TransformBytes(const MolecularTransform &ft, bool packed) { + const gemmi::FPhiGrid &g = ft.Grid(); + if (packed) + return static_cast(g.nv) * g.nv * (g.nw + 1) * sizeof(Corners); + return g.data.size() * sizeof(float2); +} + +MolecularReplacementGPU::MolecularReplacementGPU(const MolecularTransform &ft, bool packed) : state_(std::make_unique()) { const gemmi::FPhiGrid &g = ft.Grid(); - std::vector host(g.data.size()); - for (size_t i = 0; i < host.size(); i++) - host[i] = make_float2(g.data[i].real(), g.data[i].imag()); - state_->grid = upload(host, state_->stream); - state_->transform = {state_->grid.get(), g.nu, g.nv, g.nw, static_cast(ft.Box()), + static_assert(sizeof(std::complex) == sizeof(float2)); + state_->grid = CudaDevicePtr(std::max(g.data.size(), 1)); + cuda_err(cudaMemcpyAsync(state_->grid.get(), g.data.data(), g.data.size() * sizeof(float2), + cudaMemcpyHostToDevice, state_->stream)); + state_->transform = {state_->grid.get(), nullptr, g.nu, g.nv, g.nw, static_cast(ft.Box()), static_cast(ft.Blur())}; + if (packed) { + // Made from the plain grid on the device, which is then given back. + const size_t n = TransformBytes(ft, true) / sizeof(Corners); + state_->corners = CudaDevicePtr(n); + pack_corners<<((n + THREADS - 1) / THREADS), THREADS, 0, state_->stream>>>( + state_->transform, state_->corners); + cuda_err(cudaGetLastError()); + cuda_err(cudaStreamSynchronize(state_->stream)); + state_->grid = CudaDevicePtr(); + state_->transform.data = nullptr; + state_->transform.corners = state_->corners.get(); + } cuda_err(cudaStreamSynchronize(state_->stream)); } diff --git a/image_analysis/structure_refinement/MolecularReplacementGPU.h b/image_analysis/structure_refinement/MolecularReplacementGPU.h index 1d68e31e0..2e48f3207 100644 --- a/image_analysis/structure_refinement/MolecularReplacementGPU.h +++ b/image_analysis/structure_refinement/MolecularReplacementGPU.h @@ -28,9 +28,10 @@ struct TranslationSetupGPU; class MolecularReplacementGPU { public: - // Uploads the molecular transform, on the calling thread's current device. Throws JFJochException on - // a CUDA failure, as every call below does. - explicit MolecularReplacementGPU(const MolecularTransform &ft); + // Uploads the molecular transform, on the calling thread's current device; `packed`: with each point's + // interpolation corners together, read from two places instead of four, for more memory (TransformBytes) + // and to the same bits. Throws JFJochException on a CUDA failure, as every call below does. + explicit MolecularReplacementGPU(const MolecularTransform &ft, bool packed = false); ~MolecularReplacementGPU(); std::vector RotationFunction(const SearchReflections &refl, const gemmi::UnitCell &cell, @@ -48,6 +49,8 @@ public: std::unique_ptr Prepare(const TranslationSetup &setup, bool known_part); + // The device memory the transform is held in, plain or packed; while the packed one is made, both. + static size_t TransformBytes(const MolecularTransform &ft, bool packed); // The device memory a call takes for as long as it runs, and gives back when it returns: RotationFunction() // of `rotations` against `refl`'s reflections in `sg`, and TranslationFunction() of `rotations` (with // `known`, beside a known partial structure). diff --git a/tests/MolecularReplacementTest.cpp b/tests/MolecularReplacementTest.cpp index e03353a9f..c7a335f3b 100644 --- a/tests/MolecularReplacementTest.cpp +++ b/tests/MolecularReplacementTest.cpp @@ -159,6 +159,23 @@ TEST_CASE("MolecularReplacement_GPUPlanPartThatDoesNotFitGoesToTheCPU", "[Molecu CHECK(plan.room == 0); } +TEST_CASE("MolecularReplacement_GPUPackedTransformWhereThePlanHoldsAsMuch", "[MolecularReplacement]") { + // The large cell's transform packed, 2.28 GB: beside one rigid-body engine and a score engine on a 16 GB + // and on an 8 GB card, but on a 6 GB card the score engine would no longer fit. + const size_t packed = 2276000000; + CHECK(PackMolecularTransformGPU(LargeCellNeed(16 * GB), packed)); + CHECK(PackMolecularTransformGPU(LargeCellNeed(8 * GB), packed)); + CHECK(!PackMolecularTransformGPU(LargeCellNeed(6 * GB), packed)); + // On 24 GB the plain transform leaves room for a third rigid-body engine within half the budget; packed, + // it would not. + CHECK(PlanMolecularReplacementGPU(LargeCellNeed(24 * GB)).rigid_body_engines == 3); + CHECK(!PackMolecularTransformGPU(LargeCellNeed(24 * GB), packed)); + // No budget: nothing on the GPU, so nothing packed. + MolecularReplacementGPUNeed none = LargeCellNeed(16 * GB); + none.budget = 0; + CHECK(!PackMolecularTransformGPU(none, packed)); +} + TEST_CASE("MolecularReplacement_UniformRotationsCoverSO3", "[MolecularReplacement]") { const auto rotations = UniformRotations(6.0); const double step = 6.0 * M_PI / 180.0; @@ -551,6 +568,17 @@ TEST_CASE("MolecularReplacement_GPUMatchesCPU", "[MolecularReplacement]") { for (double d : {tf_gpu[i].t.x - cpu.t.x, tf_gpu[i].t.y - cpu.t.y, tf_gpu[i].t.z - cpu.t.z}) CHECK(std::fabs(2 * d - std::round(2 * d)) < 1e-6); } + // The packed transform gives the same bits as the plain one. + MolecularReplacementGPU packed(ft, true); + CHECK(packed.RotationFunction(refl, cell, sg, rotations) == rf_gpu); + const auto tf_packed = packed.TranslationFunction(setup, orientations); + for (size_t i = 0; i < orientations.size(); i++) { + CHECK(tf_packed[i].z == tf_gpu[i].z); + CHECK(tf_packed[i].t.x == tf_gpu[i].t.x); + CHECK(tf_packed[i].t.y == tf_gpu[i].t.y); + CHECK(tf_packed[i].t.z == tf_gpu[i].t.z); + } + CHECK(MolecularReplacementGPU::TransformBytes(ft, true) > MolecularReplacementGPU::TransformBytes(ft, false)); // The molecular transform's FFT. gemmi::DensityCalculator, float> dc; dc.d_min = 4.0; -- 2.54.0 From 38e75c8e5bf0834cfc7ddd8c0432a9ea4691b4ae Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 09:06:54 +0200 Subject: [PATCH 04/81] HDF5Writer_Socket: wait for the subscription before the first file is announced The test connected its SUB socket and wrote at once; file 1 is closed and announced on the PUB socket right after the second image, and PUB drops whatever it sends before the subscription has reached it (slow joiner). On a loaded CI runner the first notification was lost and the test read file 2 where it expected file 1. Wait 2 s after subscribing, as the preview and metadata socket tests already do. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- tests/HDF5WritingTest.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tests/HDF5WritingTest.cpp b/tests/HDF5WritingTest.cpp index bc18fc1a3..23e9fabb7 100644 --- a/tests/HDF5WritingTest.cpp +++ b/tests/HDF5WritingTest.cpp @@ -5,6 +5,7 @@ #include #include #include +#include #include "../common/DiffractionExperiment.h" #include "../writer/HDF5Objects.h" @@ -573,6 +574,10 @@ TEST_CASE("HDF5Writer_Socket", "[HDF5][Full]") { s.SubscribeAll(); s.ReceiveTimeout(std::chrono::seconds(5)); + // PUB drops what it sends before the subscription has reached it, and the first file is closed + // (and announced) right after the second image - ensure sub socket is properly connected + std::this_thread::sleep_for(std::chrono::seconds(2)); + for (int i = 0; i < x.GetImageNum(); i++) { DataMessage message{}; message.image = CompressedImage(image, x.GetXPixelsNum(), x.GetYPixelsNum()); -- 2.54.0 From 5d8c6f4504352a653c5b44f4c4fcb0458cef32ae Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 09:13:28 +0200 Subject: [PATCH 05/81] battery: the wrong-model null report lists pairs that were never scored A pair that crashed, exited non-zero or had no coordinates carries only set, model, verdict and reason; section() read the scored fields directly, so a single crashed pair raised KeyError 'data_same' while the report was written. The step then died with a traceback instead of its own pass/fail message, and the following "Keep the report" step found no report. Those rows now show '-' in the scored columns. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- tools/battery/nullmodel.py | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/tools/battery/nullmodel.py b/tools/battery/nullmodel.py index b1ef4fba3..47e44a686 100644 --- a/tools/battery/nullmodel.py +++ b/tools/battery/nullmodel.py @@ -146,13 +146,21 @@ def section(doc, rows): f">= {RANDOM_R_FREE_MIN} (a random structure: 0.586 acentric, 0.828 centric).") head = ["set", "wrong model", "(a) data", "(b) decisions", "space group", "hand", "MODEL_FIT", "sigma", "placement", "decided", "R_free", "CC model", "CC confirmed to", "verdict", "why"] - doc.table(head, [[r["set"], r["model"], "same" if r["data_same"] else "DIFFER", - "same" if not r["decisions_moved"] else f"{len(r['decisions_moved'])} moved", - r["sg"] or "-", r["enantiomorph"] or "-", r["model_fit"] or "-", - f(r["model_fit_sigma"], "{:+.1f}"), r.get("model_placement") or "-", - r["model_decisions"] or "-", - f(r["r_free"], "{:.3f}"), f(r["cc_model"], "{:.3f}"), - r["cc_confirmed"] or "-", r["verdict"], r["reason"]] for r in rows], + # A pair that crashed, exited non-zero or had no coordinates was never scored: it has only set, + # model, verdict and reason. + def data(r): + return "-" if "data_same" not in r else "same" if r["data_same"] else "DIFFER" + + def decisions(r): + return "-" if "decisions_moved" not in r else \ + "same" if not r["decisions_moved"] else f"{len(r['decisions_moved'])} moved" + + doc.table(head, [[r["set"], r["model"], data(r), decisions(r), + r.get("sg") or "-", r.get("enantiomorph") or "-", r.get("model_fit") or "-", + f(r.get("model_fit_sigma"), "{:+.1f}"), r.get("model_placement") or "-", + r.get("model_decisions") or "-", + f(r.get("r_free"), "{:.3f}"), f(r.get("cc_model"), "{:.3f}"), + r.get("cc_confirmed") or "-", r["verdict"], r["reason"]] for r in rows], num=(7, 10, 11), row_class=lambda row: "fail" if row[13] != "pass" else "", cell_class=lambda i, x: {"pass": "pass", "fail": "fail", "crash": "fail"}.get(x) if i == 13 else None) -- 2.54.0 From a3f30d03c1d0bd8bac5da64eec18beaf992da951 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 09:24:16 +0200 Subject: [PATCH 06/81] Rigid-body engines leave the calling thread on its own card; the MR search runs on its transform's card Every RigidBodyGPUEngine call did cudaSetDevice(engine's card) and never set the caller back. Molecular replacement's group threads refine copies on the pool's engines - on any card where every engine on this one is taken - and then run the next translation function on the same thread. MolecularReplacementGPU ran its calls on whatever card the thread was on, so that function's buffers and cuFFT plan were made on the engine's card, beside the transform and the stream on the search's card: an illegal memory access, 9s02 with four cards visible, every run (the further-copies loop: refine a trial on another card's engine, then translation_function on the group thread). - Each engine call (and the constructor) now holds a DeviceGuard: on the engine's card for the call, back on the caller's after it. - MolecularReplacementGPU remembers the card its transform was uploaded to and runs every call (and its destructor) there, whichever card the calling thread is on. - RigidBodyGPU_CallsLeaveTheCallerOnItsCard: one engine per card, all taken from one thread; the thread's card is unchanged after each call (meaningful with two or more cards). No number changes: where every call runs is the same card as before for each object. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../MolecularReplacementGPU.cu | 14 ++++++- .../structure_refinement/RigidBodyGPU.cu | 41 +++++++++++++------ tests/ModelValidationTest.cpp | 30 ++++++++++++++ 3 files changed, 72 insertions(+), 13 deletions(-) diff --git a/image_analysis/structure_refinement/MolecularReplacementGPU.cu b/image_analysis/structure_refinement/MolecularReplacementGPU.cu index 23cf234f0..fdb397c31 100644 --- a/image_analysis/structure_refinement/MolecularReplacementGPU.cu +++ b/image_analysis/structure_refinement/MolecularReplacementGPU.cu @@ -349,7 +349,10 @@ gemmi::FPhiGrid MapToFPhiGPU(const gemmi::Grid &map, int reach) { return hkl; } +// Every call runs on the card the transform was uploaded to, whichever card the calling thread is on: its buffers, +// its plans and its kernels beside the transform and the stream. struct MolecularReplacementGPUState { + int device = 0; CudaStream stream; CudaDevicePtr grid; Transform transform{}; @@ -357,6 +360,7 @@ struct MolecularReplacementGPUState { MolecularReplacementGPU::MolecularReplacementGPU(const MolecularTransform &ft) : state_(std::make_unique()) { + cuda_err(cudaGetDevice(&state_->device)); const gemmi::FPhiGrid &g = ft.Grid(); std::vector host(g.data.size()); for (size_t i = 0; i < host.size(); i++) @@ -367,11 +371,18 @@ MolecularReplacementGPU::MolecularReplacementGPU(const MolecularTransform &ft) cuda_err(cudaStreamSynchronize(state_->stream)); } -MolecularReplacementGPU::~MolecularReplacementGPU() = default; +MolecularReplacementGPU::~MolecularReplacementGPU() { + int current = 0; + cudaGetDevice(¤t); + cudaSetDevice(state_->device); + state_.reset(); + cudaSetDevice(current); +} std::vector MolecularReplacementGPU::RotationFunction(const SearchReflections &refl, const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, const std::vector &rotations) { + const ScopedGpuPin pin(state_->device); cudaStream_t stream = state_->stream; const int n = static_cast(refl.hkl.size()); const std::vector s = CopyVectors(refl, cell, sg); @@ -553,6 +564,7 @@ std::vector MolecularReplacementGPU::TranslationFunction( const int npairs = static_cast(setup.pair_j.size()); if (terms == 0 || rotations.empty() || (nops < 2 && known == nullptr)) return out; + const ScopedGpuPin pin(state_->device); cudaStream_t stream = state_->stream; const int nu = setup.nu, nv = setup.nv, nw = setup.nw, nwh = nw / 2 + 1; const size_t cells = static_cast(nu) * nv * nwh, points = static_cast(nu) * nv * nw; diff --git a/image_analysis/structure_refinement/RigidBodyGPU.cu b/image_analysis/structure_refinement/RigidBodyGPU.cu index 3f406a766..2b73e5b3d 100644 --- a/image_analysis/structure_refinement/RigidBodyGPU.cu +++ b/image_analysis/structure_refinement/RigidBodyGPU.cu @@ -27,6 +27,23 @@ void cuda_err(cudaError_t val) { throw JFJochException(JFJochExceptionCategory::GPUCUDAError, cudaGetErrorString(val)); } +// The calling thread on the engine's card for one call, and back on its own card after: a caller's later work +// - a function of the search, or memory it allocates - runs on the card the caller chose, not on whichever card +// the last engine it borrowed is on. +class DeviceGuard { +public: + explicit DeviceGuard(int device) { + cuda_err(cudaGetDevice(&previous_)); + cuda_err(cudaSetDevice(device)); + } + ~DeviceGuard() { cudaSetDevice(previous_); } + DeviceGuard(const DeviceGuard &) = delete; + DeviceGuard &operator=(const DeviceGuard &) = delete; + +private: + int previous_ = 0; +}; + void cufft_err(cufftResult val) { if (val != CUFFT_SUCCESS) throw JFJochException(JFJochExceptionCategory::GPUCUDAError, @@ -494,7 +511,7 @@ size_t RigidBodyGPUEngine::DeviceBytes(const RigidBodyGPUCapacity &c) { } RigidBodyGPUEngine::RigidBodyGPUEngine(const RigidBodyGPUCapacity &capacity, int device) { - cuda_err(cudaSetDevice(device)); + const DeviceGuard guard(device); impl_ = std::make_unique(capacity, device); } @@ -513,7 +530,7 @@ int RigidBodyGPUEngine::Device() const { void RigidBodyGPUEngine::SetBody(const std::vector> &relative) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); if (relative.size() > e.cap.atoms) throw JFJochException(JFJochExceptionCategory::GPUCUDAError, "rigid body: more atoms than the reserve"); e.n_atoms = static_cast(relative.size()); @@ -524,7 +541,7 @@ void RigidBodyGPUEngine::SetBody(const std::vector> &relat void RigidBodyGPUEngine::SetZone(const RigidBodyGPUZone &zone) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); const size_t np = static_cast(zone.nu) * zone.nv * zone.nw; const size_t nc = static_cast(zone.nu / 2 + 1) * zone.nv * zone.nw; if (static_cast(zone.atoms.size()) != e.n_atoms || np > e.cap.grid_points || nc > e.cap.complex_points || @@ -591,7 +608,7 @@ void RigidBodyGPUEngine::SetZone(const RigidBodyGPUZone &zone) { void RigidBodyGPUEngine::Fcalc(const double rotation[9], const double translation[3]) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); e.Density(rotation, translation, 0); cufft_err(cufftExecR2C(e.Plan(1), e.grid, reinterpret_cast(e.spectrum.get()))); e.Compose(0, e.f, e.df_dt); @@ -600,7 +617,7 @@ void RigidBodyGPUEngine::Fcalc(const double rotation[9], const double translatio void RigidBodyGPUEngine::SetFixedCopies(const std::vector> &fixed, const std::array &moving) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); const size_t copies = fixed.size() + 1; if (e.copies_mask_capacity < copies * e.n_mask_atoms) { e.copies_mask_capacity = copies * e.n_mask_atoms; @@ -641,7 +658,7 @@ void RigidBodyGPUEngine::SetFixedCopies(const std::vector void RigidBodyGPUEngine::Fmask() { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); float *mask_grid = e.grid.get() + e.GridPoints(); cufftComplex *mask_spectrum = reinterpret_cast(e.spectrum.get() + e.ComplexPoints()); // The mask atoms Fcalc() placed, four doubles each, as ModelMaskAtom lays them out. @@ -657,7 +674,7 @@ void RigidBodyGPUEngine::Fmask() { void RigidBodyGPUEngine::DownloadPoints(std::vector> &fcmol, std::vector> &fmask) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); fcmol.resize(e.n_points); fmask.resize(e.n_points); if (e.n_points == 0) @@ -670,7 +687,7 @@ void RigidBodyGPUEngine::DownloadPoints(std::vector> &fcmol void RigidBodyGPUEngine::FitSolvent(double b_hi, double &k_sol, double &b_sol) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); e.PackPoints(); const ModelSolventFit fit = e.scale->FitSolvent(e.point_fcmol, e.point_fmask, b_hi); k_sol = fit.k_sol; @@ -679,7 +696,7 @@ void RigidBodyGPUEngine::FitSolvent(double b_hi, double &k_sol, double &b_sol) { void RigidBodyGPUEngine::FitScale(double k_sol, double b_sol, double &k_overall, double b_star[6]) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); e.PackPoints(); const ModelScaleParams p = e.scale->Fit(e.point_fcmol, e.point_fmask, k_sol, b_sol); k_overall = p.k_overall; @@ -689,7 +706,7 @@ void RigidBodyGPUEngine::FitScale(double k_sol, double b_sol, double &k_overall, void RigidBodyGPUEngine::Residuals(double k_overall, const double b_star[6], double k_sol, double b_sol, double *residuals) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); const Scale sc = e.MakeScale(k_overall, b_star, k_sol, b_sol); residual_kernel<<>>(e.obs_row, e.obs_fobs, static_cast(e.n_obs), e.f, e.fmask, e.row_hkl, e.row_stol2, sc, e.f_mean, @@ -703,7 +720,7 @@ void RigidBodyGPUEngine::Jacobian(const double rotation[3][9], const double tran double k_overall, const double b_star[6], double k_sol, double b_sol, std::vector &jtj, std::vector &jtq) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); for (int j = 0; j < 3; j++) e.Density(rotation[j], translation[j], j); cufft_err(cufftExecR2C(e.Plan(3), e.grid, reinterpret_cast(e.spectrum.get()))); @@ -730,7 +747,7 @@ void RigidBodyGPUEngine::Jacobian(const double rotation[3][9], const double tran void RigidBodyGPUEngine::ProjectJacobian(const std::vector &x, double *jacobian) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); const int p = 1 + static_cast(e.n_constraints); cuda_err(cudaMemcpyAsync(e.x, x.data(), x.size() * sizeof(double), cudaMemcpyHostToDevice, e.stream)); project_kernel<<>>(e.jacobian, e.jk, p, e.x, static_cast(e.n_obs)); diff --git a/tests/ModelValidationTest.cpp b/tests/ModelValidationTest.cpp index cec04d31d..97698c0d6 100644 --- a/tests/ModelValidationTest.cpp +++ b/tests/ModelValidationTest.cpp @@ -1655,6 +1655,36 @@ TEST_CASE("RigidBodyGPU_Deterministic", "[ModelValidation][gpu]") { } } +// An engine's calls run on the engine's card and leave the calling thread on its own: every engine of a pool with +// one on each card, all taken at once from one thread, evaluated in turn. A thread left on the last engine's card +// would run what it does next - a search's function, memory it allocates - on that card, beside data on another. +TEST_CASE("RigidBodyGPU_CallsLeaveTheCallerOnItsCard", "[ModelValidation][gpu]") { + if (get_gpu_count() == 0) + SKIP("No GPU"); + Logger logger("RigidBodyGPU_CallsLeaveTheCallerOnItsCard"); + const char *cryst = kRigidBodyCrysts[4]; + const gemmi::Structure st = AnisoCluster(cryst); + const gemmi::SpaceGroup *sg = st.find_spacegroup(); + const auto fobs = OwnAmplitudes(cryst, st, 3.5, logger); + const size_t cards = get_gpu_count(); + std::vector models(cards, st.models[0]); + auto pool = TestPool(models[0], st.cell, *sg, 3.5, fobs.v.size(), cards, logger); + const int caller = RigidBodyGPUEngine::CurrentDevice(); + std::vector> targets; + for (size_t k = 0; k < cards; k++) + targets.push_back(std::make_unique(*pool, models[k], st.cell, *sg, 4)); + CHECK(RigidBodyGPUEngine::CurrentDevice() == caller); + const double q0[6] = {0.12, -0.09, 0.07, 0.15, -0.10, 0.05}; + for (auto &t : targets) { + t->SetZone(fobs, 3.5); + CHECK(RigidBodyGPUEngine::CurrentDevice() == caller); + std::vector r(t->NumObservations()), j(6 * t->NumObservations()); + REQUIRE(t->Residuals(q0, r.data())); + REQUIRE(t->Jacobian(q0, j.data())); + CHECK(RigidBodyGPUEngine::CurrentDevice() == caller); + } +} + // The model's structure factors on the GPU against the CPU path model validation takes - gemmi's density and // mask on the symmetrized grid, transformed by FFTW and read off by prepare_asu_data() - in the five groups, // at a resolution where the mask's shrink step does nothing and at one where it does. The same reflections -- 2.54.0 From fbdf036e6ff3fd78a12997d436c4fddb3343a21c Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 09:24:16 +0200 Subject: [PATCH 07/81] Rigid-body engines leave the calling thread on its own card; the MR search runs on its transform's card Every RigidBodyGPUEngine call did cudaSetDevice(engine's card) and never set the caller back. Molecular replacement's group threads refine copies on the pool's engines - on any card where every engine on this one is taken - and then run the next translation function on the same thread. MolecularReplacementGPU ran its calls on whatever card the thread was on, so that function's buffers and cuFFT plan were made on the engine's card, beside the transform and the stream on the search's card: an illegal memory access, 9s02 with four cards visible, every run (the further-copies loop: refine a trial on another card's engine, then translation_function on the group thread). - Each engine call (and the constructor) now holds a DeviceGuard: on the engine's card for the call, back on the caller's after it. - MolecularReplacementGPU remembers the card its transform was uploaded to and runs every call (and its destructor) there, whichever card the calling thread is on. - RigidBodyGPU_CallsLeaveTheCallerOnItsCard: one engine per card, all taken from one thread; the thread's card is unchanged after each call (meaningful with two or more cards). No number changes: where every call runs is the same card as before for each object. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../MolecularReplacementGPU.cu | 14 ++++++- .../structure_refinement/RigidBodyGPU.cu | 41 +++++++++++++------ tests/ModelValidationTest.cpp | 30 ++++++++++++++ 3 files changed, 72 insertions(+), 13 deletions(-) diff --git a/image_analysis/structure_refinement/MolecularReplacementGPU.cu b/image_analysis/structure_refinement/MolecularReplacementGPU.cu index bb0f92a04..f405855ca 100644 --- a/image_analysis/structure_refinement/MolecularReplacementGPU.cu +++ b/image_analysis/structure_refinement/MolecularReplacementGPU.cu @@ -397,7 +397,10 @@ gemmi::FPhiGrid MapToFPhiGPU(const gemmi::Grid &map, int reach) { return hkl; } +// Every call runs on the card the transform was uploaded to, whichever card the calling thread is on: its buffers, +// its plans and its kernels beside the transform and the stream. struct MolecularReplacementGPUState { + int device = 0; CudaStream stream; CudaDevicePtr grid; CudaDevicePtr corners; @@ -413,6 +416,7 @@ size_t MolecularReplacementGPU::TransformBytes(const MolecularTransform &ft, boo MolecularReplacementGPU::MolecularReplacementGPU(const MolecularTransform &ft, bool packed) : state_(std::make_unique()) { + cuda_err(cudaGetDevice(&state_->device)); const gemmi::FPhiGrid &g = ft.Grid(); static_assert(sizeof(std::complex) == sizeof(float2)); state_->grid = CudaDevicePtr(std::max(g.data.size(), 1)); @@ -435,11 +439,18 @@ MolecularReplacementGPU::MolecularReplacementGPU(const MolecularTransform &ft, b cuda_err(cudaStreamSynchronize(state_->stream)); } -MolecularReplacementGPU::~MolecularReplacementGPU() = default; +MolecularReplacementGPU::~MolecularReplacementGPU() { + int current = 0; + cudaGetDevice(¤t); + cudaSetDevice(state_->device); + state_.reset(); + cudaSetDevice(current); +} std::vector MolecularReplacementGPU::RotationFunction(const SearchReflections &refl, const gemmi::UnitCell &cell, const gemmi::SpaceGroup &sg, const std::vector &rotations) { + const ScopedGpuPin pin(state_->device); cudaStream_t stream = state_->stream; const int n = static_cast(refl.hkl.size()); const std::vector s = CopyVectors(refl, cell, sg); @@ -621,6 +632,7 @@ std::vector MolecularReplacementGPU::TranslationFunction( const int npairs = static_cast(setup.pair_j.size()); if (terms == 0 || rotations.empty() || (nops < 2 && known == nullptr)) return out; + const ScopedGpuPin pin(state_->device); cudaStream_t stream = state_->stream; const int nu = setup.nu, nv = setup.nv, nw = setup.nw, nwh = nw / 2 + 1; const size_t cells = static_cast(nu) * nv * nwh, points = static_cast(nu) * nv * nw; diff --git a/image_analysis/structure_refinement/RigidBodyGPU.cu b/image_analysis/structure_refinement/RigidBodyGPU.cu index 3f406a766..2b73e5b3d 100644 --- a/image_analysis/structure_refinement/RigidBodyGPU.cu +++ b/image_analysis/structure_refinement/RigidBodyGPU.cu @@ -27,6 +27,23 @@ void cuda_err(cudaError_t val) { throw JFJochException(JFJochExceptionCategory::GPUCUDAError, cudaGetErrorString(val)); } +// The calling thread on the engine's card for one call, and back on its own card after: a caller's later work +// - a function of the search, or memory it allocates - runs on the card the caller chose, not on whichever card +// the last engine it borrowed is on. +class DeviceGuard { +public: + explicit DeviceGuard(int device) { + cuda_err(cudaGetDevice(&previous_)); + cuda_err(cudaSetDevice(device)); + } + ~DeviceGuard() { cudaSetDevice(previous_); } + DeviceGuard(const DeviceGuard &) = delete; + DeviceGuard &operator=(const DeviceGuard &) = delete; + +private: + int previous_ = 0; +}; + void cufft_err(cufftResult val) { if (val != CUFFT_SUCCESS) throw JFJochException(JFJochExceptionCategory::GPUCUDAError, @@ -494,7 +511,7 @@ size_t RigidBodyGPUEngine::DeviceBytes(const RigidBodyGPUCapacity &c) { } RigidBodyGPUEngine::RigidBodyGPUEngine(const RigidBodyGPUCapacity &capacity, int device) { - cuda_err(cudaSetDevice(device)); + const DeviceGuard guard(device); impl_ = std::make_unique(capacity, device); } @@ -513,7 +530,7 @@ int RigidBodyGPUEngine::Device() const { void RigidBodyGPUEngine::SetBody(const std::vector> &relative) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); if (relative.size() > e.cap.atoms) throw JFJochException(JFJochExceptionCategory::GPUCUDAError, "rigid body: more atoms than the reserve"); e.n_atoms = static_cast(relative.size()); @@ -524,7 +541,7 @@ void RigidBodyGPUEngine::SetBody(const std::vector> &relat void RigidBodyGPUEngine::SetZone(const RigidBodyGPUZone &zone) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); const size_t np = static_cast(zone.nu) * zone.nv * zone.nw; const size_t nc = static_cast(zone.nu / 2 + 1) * zone.nv * zone.nw; if (static_cast(zone.atoms.size()) != e.n_atoms || np > e.cap.grid_points || nc > e.cap.complex_points || @@ -591,7 +608,7 @@ void RigidBodyGPUEngine::SetZone(const RigidBodyGPUZone &zone) { void RigidBodyGPUEngine::Fcalc(const double rotation[9], const double translation[3]) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); e.Density(rotation, translation, 0); cufft_err(cufftExecR2C(e.Plan(1), e.grid, reinterpret_cast(e.spectrum.get()))); e.Compose(0, e.f, e.df_dt); @@ -600,7 +617,7 @@ void RigidBodyGPUEngine::Fcalc(const double rotation[9], const double translatio void RigidBodyGPUEngine::SetFixedCopies(const std::vector> &fixed, const std::array &moving) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); const size_t copies = fixed.size() + 1; if (e.copies_mask_capacity < copies * e.n_mask_atoms) { e.copies_mask_capacity = copies * e.n_mask_atoms; @@ -641,7 +658,7 @@ void RigidBodyGPUEngine::SetFixedCopies(const std::vector void RigidBodyGPUEngine::Fmask() { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); float *mask_grid = e.grid.get() + e.GridPoints(); cufftComplex *mask_spectrum = reinterpret_cast(e.spectrum.get() + e.ComplexPoints()); // The mask atoms Fcalc() placed, four doubles each, as ModelMaskAtom lays them out. @@ -657,7 +674,7 @@ void RigidBodyGPUEngine::Fmask() { void RigidBodyGPUEngine::DownloadPoints(std::vector> &fcmol, std::vector> &fmask) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); fcmol.resize(e.n_points); fmask.resize(e.n_points); if (e.n_points == 0) @@ -670,7 +687,7 @@ void RigidBodyGPUEngine::DownloadPoints(std::vector> &fcmol void RigidBodyGPUEngine::FitSolvent(double b_hi, double &k_sol, double &b_sol) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); e.PackPoints(); const ModelSolventFit fit = e.scale->FitSolvent(e.point_fcmol, e.point_fmask, b_hi); k_sol = fit.k_sol; @@ -679,7 +696,7 @@ void RigidBodyGPUEngine::FitSolvent(double b_hi, double &k_sol, double &b_sol) { void RigidBodyGPUEngine::FitScale(double k_sol, double b_sol, double &k_overall, double b_star[6]) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); e.PackPoints(); const ModelScaleParams p = e.scale->Fit(e.point_fcmol, e.point_fmask, k_sol, b_sol); k_overall = p.k_overall; @@ -689,7 +706,7 @@ void RigidBodyGPUEngine::FitScale(double k_sol, double b_sol, double &k_overall, void RigidBodyGPUEngine::Residuals(double k_overall, const double b_star[6], double k_sol, double b_sol, double *residuals) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); const Scale sc = e.MakeScale(k_overall, b_star, k_sol, b_sol); residual_kernel<<>>(e.obs_row, e.obs_fobs, static_cast(e.n_obs), e.f, e.fmask, e.row_hkl, e.row_stol2, sc, e.f_mean, @@ -703,7 +720,7 @@ void RigidBodyGPUEngine::Jacobian(const double rotation[3][9], const double tran double k_overall, const double b_star[6], double k_sol, double b_sol, std::vector &jtj, std::vector &jtq) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); for (int j = 0; j < 3; j++) e.Density(rotation[j], translation[j], j); cufft_err(cufftExecR2C(e.Plan(3), e.grid, reinterpret_cast(e.spectrum.get()))); @@ -730,7 +747,7 @@ void RigidBodyGPUEngine::Jacobian(const double rotation[3][9], const double tran void RigidBodyGPUEngine::ProjectJacobian(const std::vector &x, double *jacobian) { RigidBodyGPUEngineImpl &e = *impl_; - cuda_err(cudaSetDevice(e.device)); + const DeviceGuard guard(e.device); const int p = 1 + static_cast(e.n_constraints); cuda_err(cudaMemcpyAsync(e.x, x.data(), x.size() * sizeof(double), cudaMemcpyHostToDevice, e.stream)); project_kernel<<>>(e.jacobian, e.jk, p, e.x, static_cast(e.n_obs)); diff --git a/tests/ModelValidationTest.cpp b/tests/ModelValidationTest.cpp index cd6852bab..25d16e3a4 100644 --- a/tests/ModelValidationTest.cpp +++ b/tests/ModelValidationTest.cpp @@ -1692,6 +1692,36 @@ TEST_CASE("RigidBodyGPU_Deterministic", "[ModelValidation][gpu]") { } } +// An engine's calls run on the engine's card and leave the calling thread on its own: every engine of a pool with +// one on each card, all taken at once from one thread, evaluated in turn. A thread left on the last engine's card +// would run what it does next - a search's function, memory it allocates - on that card, beside data on another. +TEST_CASE("RigidBodyGPU_CallsLeaveTheCallerOnItsCard", "[ModelValidation][gpu]") { + if (get_gpu_count() == 0) + SKIP("No GPU"); + Logger logger("RigidBodyGPU_CallsLeaveTheCallerOnItsCard"); + const char *cryst = kRigidBodyCrysts[4]; + const gemmi::Structure st = AnisoCluster(cryst); + const gemmi::SpaceGroup *sg = st.find_spacegroup(); + const auto fobs = OwnAmplitudes(cryst, st, 3.5, logger); + const size_t cards = get_gpu_count(); + std::vector models(cards, st.models[0]); + auto pool = TestPool(models[0], st.cell, *sg, 3.5, fobs.v.size(), cards, logger); + const int caller = RigidBodyGPUEngine::CurrentDevice(); + std::vector> targets; + for (size_t k = 0; k < cards; k++) + targets.push_back(std::make_unique(*pool, models[k], st.cell, *sg, 4)); + CHECK(RigidBodyGPUEngine::CurrentDevice() == caller); + const double q0[6] = {0.12, -0.09, 0.07, 0.15, -0.10, 0.05}; + for (auto &t : targets) { + t->SetZone(fobs, 3.5); + CHECK(RigidBodyGPUEngine::CurrentDevice() == caller); + std::vector r(t->NumObservations()), j(6 * t->NumObservations()); + REQUIRE(t->Residuals(q0, r.data())); + REQUIRE(t->Jacobian(q0, j.data())); + CHECK(RigidBodyGPUEngine::CurrentDevice() == caller); + } +} + // The model's structure factors on the GPU against the CPU path model validation takes - gemmi's density and // mask on the symmetrized grid, transformed by FFTW and read off by prepare_asu_data() - in the five groups, // at a resolution where the mask's shrink step does nothing and at one where it does. The same reflections -- 2.54.0 From b004a846dd14fb92ee7287219083a9aebd2e7d0b Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 09:24:40 +0200 Subject: [PATCH 08/81] RigidBodyGPU_CallsLeaveTheCallerOnItsCard: one engine on each card with the per-card Reserve Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- tests/ModelValidationTest.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/ModelValidationTest.cpp b/tests/ModelValidationTest.cpp index 25d16e3a4..885728b16 100644 --- a/tests/ModelValidationTest.cpp +++ b/tests/ModelValidationTest.cpp @@ -1705,7 +1705,9 @@ TEST_CASE("RigidBodyGPU_CallsLeaveTheCallerOnItsCard", "[ModelValidation][gpu]") const auto fobs = OwnAmplitudes(cryst, st, 3.5, logger); const size_t cards = get_gpu_count(); std::vector models(cards, st.models[0]); - auto pool = TestPool(models[0], st.cell, *sg, 3.5, fobs.v.size(), cards, logger); + auto pool = RigidBodyGPUPool::Plan(models[0], st.cell, *sg, 3.5, fobs.v.size(), logger); + REQUIRE(pool); + pool->Reserve(std::vector(cards, 1)); const int caller = RigidBodyGPUEngine::CurrentDevice(); std::vector> targets; for (size_t k = 0; k < cards; k++) -- 2.54.0 From 3ebf085e4c82cca8de19bc509054c7ce9b1db1a8 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 09:31:04 +0200 Subject: [PATCH 09/81] Host memory: the machine's total, a budget decided from it, and a pool for large per-worker buffers get_host_total_memory (sysconf / hw.memsize / GlobalMemoryStatusEx), DefaultHostMemoryBudget at 75% of the total - decided from the total, never from what is free, as the GPU plans are - and HostWorkerPool, a process-wide pool (a third of the budget) that workers reserve their large buffers against before making them, so how many run at once is decided by bytes rather than threads. Only scheduling reads any of it. [HostMemory] tests. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- common/CMakeLists.txt | 1 + common/HostMemory.cpp | 77 ++++++++++++++++++++++++++++++++++++++++ common/HostMemory.h | 60 +++++++++++++++++++++++++++++++ tests/CMakeLists.txt | 1 + tests/HostMemoryTest.cpp | 48 +++++++++++++++++++++++++ 5 files changed, 187 insertions(+) create mode 100644 common/HostMemory.cpp create mode 100644 common/HostMemory.h create mode 100644 tests/HostMemoryTest.cpp diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index f8a8ff5c9..b4711ecf3 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -77,6 +77,7 @@ ADD_LIBRARY(JFJochCommon STATIC DetectorModuleGeometry.cpp DetectorModuleGeometry.h DetectorSetup.h DetectorSetup.cpp ZeroCopyReturnValue.h Histogram.h DiffractionGeometry.h CUDAWrapper.cpp CUDAWrapper.h + HostMemory.cpp HostMemory.h ThreadAffinity.cpp ThreadAffinity.h ADUHistogram.cpp ADUHistogram.h RawToConvertedGeometryCore.h diff --git a/common/HostMemory.cpp b/common/HostMemory.cpp new file mode 100644 index 000000000..54c4a8b66 --- /dev/null +++ b/common/HostMemory.cpp @@ -0,0 +1,77 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "HostMemory.h" + +#if defined(_WIN32) +#ifndef NOMINMAX +#define NOMINMAX +#endif +#include +#elif defined(__APPLE__) +#include +#include +#include +#else +#include +#endif + +size_t get_host_total_memory() { +#if defined(_WIN32) + MEMORYSTATUSEX status{}; + status.dwLength = sizeof(status); + if (!GlobalMemoryStatusEx(&status)) + return 0; + return static_cast(status.ullTotalPhys); +#elif defined(__APPLE__) + uint64_t bytes = 0; + size_t len = sizeof(bytes); + if (sysctlbyname("hw.memsize", &bytes, &len, nullptr, 0) != 0) + return 0; + return static_cast(bytes); +#else + const long pages = sysconf(_SC_PHYS_PAGES), page = sysconf(_SC_PAGE_SIZE); + if (pages <= 0 || page <= 0) + return 0; + return static_cast(pages) * static_cast(page); +#endif +} + +size_t DefaultHostMemoryBudget() { + return static_cast(HOST_MEMORY_BUDGET_FRACTION * static_cast(get_host_total_memory())); +} + +HostWorkerPool &HostWorkerPool::Instance() { + static HostWorkerPool pool; + return pool; +} + +HostWorkerPool::HostWorkerPool() { + SetSize(0); +} + +void HostWorkerPool::SetSize(size_t bytes) { + std::lock_guard lock(m); + size = bytes > 0 ? bytes + : static_cast(HOST_WORKER_POOL_FRACTION * static_cast(DefaultHostMemoryBudget())); + cv.notify_all(); +} + +size_t HostWorkerPool::Size() { + std::lock_guard lock(m); + return size; +} + +HostWorkerPool::Reservation::Reservation(HostWorkerPool &pool, size_t bytes) : pool(pool), bytes(bytes) { + std::unique_lock lock(pool.m); + pool.cv.wait(lock, [&] { return pool.reserved == 0 || pool.reserved + bytes <= pool.size; }); + pool.reserved += bytes; +} + +HostWorkerPool::Reservation::~Reservation() { + { + std::lock_guard lock(pool.m); + pool.reserved -= bytes; + } + pool.cv.notify_all(); +} diff --git a/common/HostMemory.h b/common/HostMemory.h new file mode 100644 index 000000000..d016ddb58 --- /dev/null +++ b/common/HostMemory.h @@ -0,0 +1,60 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include +#include + +// The machine's physical memory in bytes - its total, not what is free at the moment. 0 where it +// cannot be read. +size_t get_host_total_memory(); + +// The host memory a run plans against: this fraction of the machine's physical memory, decided from +// the total, never from what happens to be free (as what runs on a GPU is decided on the card's total). +// The plan decides only what runs at the same time - two merges side by side or one after the other, +// how many large per-worker buffers are held at once - and never what is computed, so no result +// depends on it. +constexpr double HOST_MEMORY_BUDGET_FRACTION = 0.75; +size_t DefaultHostMemoryBudget(); + +// The share of the budget that the large per-worker buffers of parallel steps - a translation function's +// grids, a null replicate's model maps - may hold at once. The rest is what the run holds beside them: +// its reflections, its merge, the detector-sized arrays. +constexpr double HOST_WORKER_POOL_FRACTION = 1.0 / 3.0; + +// One pool for those buffers, process-wide. A worker reserves its bytes before it makes them and hands +// them back when it is done; one that would take the pool past its size waits until others have handed +// theirs back - except that a reservation made while nothing is reserved is always let through, however +// large. So how many such workers run at once is decided by their bytes, not by the thread count, and +// however the steps holding them nest or run side by side; what each worker computes, and where its +// result goes, does not change. A worker must not reserve again while it holds a reservation, and none +// may reserve on ParallelFor's pool: a holder's own parallel passes need those threads. Work spread over +// that pool is bounded by its count instead (Size() / bytes each). +class HostWorkerPool { +public: + static HostWorkerPool &Instance(); + + // The pool's size in bytes; 0 sets it back to HOST_WORKER_POOL_FRACTION of DefaultHostMemoryBudget(). + void SetSize(size_t bytes); + [[nodiscard]] size_t Size(); + + class Reservation { + public: + Reservation(HostWorkerPool &pool, size_t bytes); + ~Reservation(); + Reservation(const Reservation &) = delete; + Reservation &operator=(const Reservation &) = delete; + private: + HostWorkerPool &pool; + size_t bytes; + }; + +private: + HostWorkerPool(); + std::mutex m; + std::condition_variable cv; + size_t size = 0; + size_t reserved = 0; +}; diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c6dd46391..e5fb8f6bc 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -102,6 +102,7 @@ ADD_EXECUTABLE(jfjoch_test HotPixelFinderTest.cpp BandwidthEstimateTest.cpp ParallelForTest.cpp + HostMemoryTest.cpp RugnuxTest.cpp ResultReportTest.cpp DiagnosticOutputTest.cpp diff --git a/tests/HostMemoryTest.cpp b/tests/HostMemoryTest.cpp new file mode 100644 index 000000000..e58d17ebd --- /dev/null +++ b/tests/HostMemoryTest.cpp @@ -0,0 +1,48 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include + +#include +#include +#include +#include +#include +#include + +#include "../common/HostMemory.h" + +TEST_CASE("HostMemory_BudgetFromTheTotal", "[HostMemory]") { + const size_t total = get_host_total_memory(); + REQUIRE(total > 0); + CHECK(DefaultHostMemoryBudget() == static_cast(HOST_MEMORY_BUDGET_FRACTION * static_cast(total))); +} + +// As many reservations at once as the pool holds, and one at a time where a single one is larger than it. +TEST_CASE("HostWorkerPool_BoundsWorkersByBytes", "[HostMemory]") { + HostWorkerPool &pool = HostWorkerPool::Instance(); + for (const auto &[size, bytes, at_most] : std::vector>{ + {100, 40, 2}, {100, 100, 1}, {100, 1000, 1}, {1000, 10, 8}}) { + CAPTURE(size, bytes); + pool.SetSize(size); + std::atomic running{0}, most{0}, done{0}; + std::vector workers; + for (int i = 0; i < 8; i++) + workers.emplace_back([&] { + const HostWorkerPool::Reservation reserved(pool, bytes); + const int now = ++running; + int seen = most.load(); + while (now > seen && !most.compare_exchange_weak(seen, now)) {} + std::this_thread::sleep_for(std::chrono::milliseconds(20)); + --running; + ++done; + }); + for (auto &w : workers) + w.join(); + CHECK(done == 8); + CHECK(most >= 1); + CHECK(most <= at_most); + } + pool.SetSize(0); + CHECK(pool.Size() == static_cast(HOST_WORKER_POOL_FRACTION * static_cast(DefaultHostMemoryBudget()))); +} -- 2.54.0 From 64a87cdf52d7c30a66746724a393d378da65bdd3 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 09:31:04 +0200 Subject: [PATCH 10/81] CPU beam-centre FFT: two transforms at a time PointSurfaces held four padded (2h x 2w) r2c workspaces and three spectra at once - ~4.2 GiB on an 18 Mpx detector at any thread count, the Mac's peak on small proteins. Two workspaces now, the image's spectrum handed back before the squared image's is made: 24 instead of 44 bytes per padded point. Each transform is built and run as before (own buffers, own plan), so the surfaces are bit-identical. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../geom_refinement/BeamCenterFFTCPU.cpp | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/image_analysis/geom_refinement/BeamCenterFFTCPU.cpp b/image_analysis/geom_refinement/BeamCenterFFTCPU.cpp index 659c5c0ca..1496752f5 100644 --- a/image_analysis/geom_refinement/BeamCenterFFTCPU.cpp +++ b/image_analysis/geom_refinement/BeamCenterFFTCPU.cpp @@ -83,34 +83,39 @@ public: BeamCenterConvSurfaces2D BeamCenterFFTCPU::PointSurfaces(const std::vector &a, const std::vector &m, int64_t h, int64_t w) { - // The three forward transforms are independent of each other, and so are the four inverse ones, - // so each group runs at the same time, one workspace per transform. A workspace is built exactly - // as a single one was - its own buffers and its own plan for them - so every transform is the one - // it was, bit for bit; the four inverse ones reuse the three forward workspaces and one more. + // Two transforms at a time, each on a workspace of its own. A workspace is padded to twice the + // detector each way, so on a large detector the four workspaces and three spectra that the seven + // transforms used to hold at once were gigabytes. In order: the forward transforms of the image + // and the mask; the two inverse ones that read the image's spectrum, which is then handed back; + // the squared image's forward transform beside the mask's own inverse; and the last inverse. + // A workspace is built exactly as a single one was - its own buffers and its own plan for them - + // so every transform is the one it was, bit for bit. const int64_t ny = BeamCenterFFTPadSize(2 * h), nx = BeamCenterFFTPadSize(2 * w); - std::vector> fft; - for (int i = 0; i < 4; i++) - fft.push_back(std::make_unique(ny, nx)); + Rfft2 ws0(ny, nx), ws1(ny, nx); + + std::vector> A, M; + { + auto fA = std::async(std::launch::async, [&] { return ws0.Forward(a, h, w); }); + M = ws1.Forward(m, h, w); + A = fA.get(); + } + + BeamCenterConvSurfaces2D out; + { + auto fC = std::async(std::launch::async, [&] { return ws0.InverseProduct(A, A, 2 * h, 2 * w); }); + out.S = ws1.InverseProduct(A, M, 2 * h, 2 * w); + out.C = fC.get(); + } + std::vector>().swap(A); std::vector a2(a.size()); for (size_t i = 0; i < a2.size(); i++) a2[i] = a[i] * a[i]; - auto fA = std::async(std::launch::async, [&] { return fft[0]->Forward(a, h, w); }); - auto fM = std::async(std::launch::async, [&] { return fft[1]->Forward(m, h, w); }); - auto fA2 = std::async(std::launch::async, [&] { return fft[2]->Forward(a2, h, w); }); - const auto A = fA.get(); - const auto M = fM.get(); - const auto A2 = fA2.get(); - - BeamCenterConvSurfaces2D out; - auto fC = std::async(std::launch::async, [&] { return fft[0]->InverseProduct(A, A, 2 * h, 2 * w); }); - auto fS = std::async(std::launch::async, [&] { return fft[1]->InverseProduct(A, M, 2 * h, 2 * w); }); - auto fQ = std::async(std::launch::async, [&] { return fft[2]->InverseProduct(A2, M, 2 * h, 2 * w); }); - auto fD = std::async(std::launch::async, [&] { return fft[3]->InverseProduct(M, M, 2 * h, 2 * w); }); - out.C = fC.get(); - out.S = fS.get(); - out.Q = fQ.get(); - out.D = fD.get(); + { + auto fD = std::async(std::launch::async, [&] { return ws1.InverseProduct(M, M, 2 * h, 2 * w); }); + const auto A2 = ws0.Forward(a2, h, w); + out.Q = ws0.InverseProduct(A2, M, 2 * h, 2 * w); + out.D = fD.get(); + } return out; } - -- 2.54.0 From 43e836573d4a73601eac00dcfae4df42127c1e2d Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 09:31:05 +0200 Subject: [PATCH 11/81] MR and model validation on the CPU: workers bounded by their bytes, not the thread count - The CPU translation function runs as many rotations at once as the host worker pool holds (8 B per grid point each, 550 MiB on a 400 A cell; 33 at once at 32 threads was 18 GiB), at most nthreads. Counted, not reserved: the rotations run on ParallelFor's pool, whose workers must not wait on memory. - Null replicates (model validation's and MR's) whose structure factors are made on the CPU reserve 32 B per point of their grid (ModelGridPoints) against the pool before they start, so the nine replicates, and nulls run side by side, hold at most the pool between them. Every replicate and rotation computes what it did and is stored by index: no result depends on how many run at once. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../structure_refinement/ModelGrid.cpp | 7 +++++++ .../structure_refinement/ModelGrid.h | 9 ++++++++ .../structure_refinement/ModelValidation.cpp | 11 ++++++++++ .../MolecularReplacement.cpp | 21 +++++++++++++++++-- .../MolecularReplacement.h | 3 ++- 5 files changed, 48 insertions(+), 3 deletions(-) diff --git a/image_analysis/structure_refinement/ModelGrid.cpp b/image_analysis/structure_refinement/ModelGrid.cpp index 2dde37fe2..c10ea95fd 100644 --- a/image_analysis/structure_refinement/ModelGrid.cpp +++ b/image_analysis/structure_refinement/ModelGrid.cpp @@ -317,3 +317,10 @@ void PutMaskOnGrid(gemmi::Grid &grid, const gemmi::Model &model, const st if (shrink_has_offsets) masker.shrink(grid); } + +size_t ModelGridPoints(const gemmi::UnitCell &cell, const gemmi::SpaceGroup *sg, double d_min, double rate) { + const double spacing = d_min / (2 * rate); + const std::array m = gemmi::good_grid_size({{cell.a / spacing, cell.b / spacing, cell.c / spacing}}, + gemmi::GridSizeRounding::Up, sg); + return static_cast(m[0]) * static_cast(m[1]) * static_cast(m[2]); +} diff --git a/image_analysis/structure_refinement/ModelGrid.h b/image_analysis/structure_refinement/ModelGrid.h index 4998f2226..96f647292 100644 --- a/image_analysis/structure_refinement/ModelGrid.h +++ b/image_analysis/structure_refinement/ModelGrid.h @@ -27,3 +27,12 @@ void PutModelDensityOnGrid(gemmi::DensityCalculator, float> & // `grid` sized, with its cell and group set. void PutMaskOnGrid(gemmi::Grid &grid, const gemmi::Model &model, const std::vector &orbit_leaders, size_t nthreads); + +// The number of points of the grid a model's structure factors to d_min are computed on at DensityCalculator's +// `rate` (a spacing of d_min / (2 rate)) in this cell and space group: the grid's size, without making it. +size_t ModelGridPoints(const gemmi::UnitCell &cell, const gemmi::SpaceGroup *sg, double d_min, double rate = 1.5); + +// What computing a model's structure factors on the CPU holds at its peak, per point of that grid: the density +// and the bulk-solvent mask grids, and for each of them its transform's input copy, spectrum and coefficients, +// with the two made at once (ModelValidation's compute_model_factors). +constexpr size_t MODEL_FACTORS_BYTES_PER_GRID_POINT = 32; diff --git a/image_analysis/structure_refinement/ModelValidation.cpp b/image_analysis/structure_refinement/ModelValidation.cpp index 7be413fe1..b82008986 100644 --- a/image_analysis/structure_refinement/ModelValidation.cpp +++ b/image_analysis/structure_refinement/ModelValidation.cpp @@ -35,6 +35,7 @@ #include "../../common/CorrelationCoefficient.h" #include "../../common/JFJochMath.h" // PI (M_PI is not standard, and MSVC does not define it) +#include "../../common/HostMemory.h" #include "../../common/Logger.h" #include "../../common/ParallelFor.h" #include "../scale_merge/ReindexAmbiguity.h" // ReindexReflections @@ -1247,7 +1248,17 @@ ModelValidationResult Validate(const std::vector &merged, // the order the concurrent replicates finish in. std::vector null_r_work(NULL_REPLICATES), null_margin(NULL_REPLICATES); std::atomic placed_redraws{0}; + // A replicate whose structure factors are made on the CPU holds a gigabyte or more of grids on a large + // cell, so it reserves them against the host's worker pool (HostWorkerPool) first: as many replicates + // run at once as it holds, whatever the thread count, and each computes what it computes either way. + size_t replicate_bytes = MODEL_FACTORS_BYTES_PER_GRID_POINT + * ModelGridPoints(null_model.cell, null_model.find_spacegroup(), null_d_min); +#ifdef JFJOCH_USE_CUDA + if ((sf_gpu != nullptr && null_d_min == sf_gpu->DMin()) || (sf_null != nullptr && null_d_min == sf_null->DMin())) + replicate_bytes = 0; +#endif auto run_replicate = [&](int i) { + const HostWorkerPool::Reservation reserved(HostWorkerPool::Instance(), replicate_bytes); std::mt19937 rng(NULL_SEED + 1 + i); gemmi::Mat33 rot = null_rotation[i]; for (int redraw = 0;; redraw++) { diff --git a/image_analysis/structure_refinement/MolecularReplacement.cpp b/image_analysis/structure_refinement/MolecularReplacement.cpp index 7e5fdc3b1..64d0ca0c1 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.cpp +++ b/image_analysis/structure_refinement/MolecularReplacement.cpp @@ -33,6 +33,8 @@ #include "../../common/JFJochMath.h" // PI #include "../../common/Logger.h" +#include "../../common/CUDAWrapper.h" // get_gpu_count +#include "../../common/HostMemory.h" #include "../../common/ParallelFor.h" #include "ModelFFT.h" #include "ModelGrid.h" @@ -45,7 +47,6 @@ #include "RigidBodyGPUEngine.h" #include "ModelStructureFactorsGPU.h" #include "ModelScaleGPU.h" -#include "../../common/CUDAWrapper.h" #include "../../common/JFJochException.h" #include "../indexing/CUDAMemHelpers.h" // cuda_trim_allocation_pool #endif @@ -766,11 +767,18 @@ double null_sigma(const gemmi::Structure &placed, int copies, const gemmi::Mat33 where = translate(turned); } std::vector r_work(NULL_REPLICATES); + // Without a GPU each replicate's structure factors are made on the CPU, a gigabyte or more of grids on a + // large cell, so it reserves them against the host's worker pool (HostWorkerPool) first: as many run at + // once as it holds - with the nulls of other candidates beside it - and each computes the same either way. + const size_t replicate_bytes = get_gpu_count() == 0 + ? MODEL_FACTORS_BYTES_PER_GRID_POINT * ModelGridPoints(placed.cell, placed.find_spacegroup(), null_d_min) + : 0; std::atomic next{0}; std::vector> workers; for (size_t t = 0; t < std::min(std::max(nthreads, 1), NULL_REPLICATES); t++) workers.push_back(std::async(std::launch::async, [&] { for (int i = next++; i < NULL_REPLICATES; i = next++) { + const HostWorkerPool::Reservation reserved(HostWorkerPool::Instance(), replicate_bytes); gemmi::Structure rep = placed; std::vector &chains = rep.models[0].chains; for (int k = 0; k < copies; k++) { @@ -1561,7 +1569,16 @@ std::vector TranslationFunction(const MolecularTransform &ft, c const std::vector> *known, size_t nthreads) { const TranslationGather gather = make_gather(setup, known != nullptr); std::vector out(rotations.size()); - ParallelFor(static_cast(rotations.size()), nthreads, [&](int i) { + // A rotation's buffers - the grid's coefficients and the function, its terms' factors - are hundreds of + // megabytes on a large cell, so as many rotations run at once as the host's worker pool holds + // (HostWorkerPool), at most nthreads. Counted here rather than reserved in each: the rotations run on + // ParallelFor's pool, whose workers must not wait on one another's memory. + const size_t nu = setup.nu, nv = setup.nv, nw = setup.nw; + const size_t bytes = nu * nv * (nw / 2 + 1) * sizeof(std::complex) + nu * nv * nw * sizeof(float) + + setup.Terms() * (setup.ops * sizeof(std::complex) + sizeof(double)); + const size_t workers = std::clamp(HostWorkerPool::Instance().Size() / std::max(bytes, 1), 1, + std::max(nthreads, 1)); + ParallelFor(static_cast(rotations.size()), workers, [&](int i) { out[i] = translation_function(ft, setup, gather, rotations[i], known); }); return out; diff --git a/image_analysis/structure_refinement/MolecularReplacement.h b/image_analysis/structure_refinement/MolecularReplacement.h index f60ab15dc..750eac3af 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.h +++ b/image_analysis/structure_refinement/MolecularReplacement.h @@ -181,7 +181,8 @@ struct TranslationPeak { TranslationPeak TranslationFunction(const MolecularTransform &ft, const TranslationSetup &setup, const gemmi::Mat33 &rotation, const std::vector> *known = nullptr); -// The same at each of `rotations`, `nthreads` of them at once, the grid's gather worked out once for all. +// The same at each of `rotations`, `nthreads` of them at once - fewer where their buffers do not all fit the host's +// worker pool (HostWorkerPool) - the grid's gather worked out once for all. std::vector TranslationFunction(const MolecularTransform &ft, const TranslationSetup &setup, const std::vector &rotations, const std::vector> *known, size_t nthreads); -- 2.54.0 From 71afe748b3f7c6cf89c64d93aa5a83abb4d532e3 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 09:31:15 +0200 Subject: [PATCH 12/81] Rotation scaling on the host reads the reflections in place: 24 B per partial instead of 84 Without a GPU (and for the observation dump) RotationScaleMerge kept a full Obs copy of every partial - 84 B, 9.8-10.9 GiB on a 123 M-partial set, 2.6-2.9 GiB on 4nwv - beside the reflections it was copied from, which the run keeps anyway. A partial is now a PartialObs: a pointer to its reflection plus frame, prescaling_corr (with the flux divided out), the recomputed partiality and the working corr. Every other field is read from the reflection, which nothing changes after integration but h,k,l (read only at the ingest). Fields the CPU never read on a partial (h,k,l, delta_phi, var_per_I, capture, group) are gone. Same values in the same arithmetic order: output unchanged. The geometry pre-pass handed each image's reflections back right after the ingest; an engine that reads them (ReadsReflections) now has the post-refinement view gathered once it is reset, after the pre-pass merge - the gather reads only reflection fields, so it is the same gather. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../scale_merge/RotationScaleMerge.cpp | 144 +++++++++--------- .../scale_merge/RotationScaleMerge.h | 42 +++-- rugnux/RugnuxScaleMerge.cpp | 15 +- 3 files changed, 116 insertions(+), 85 deletions(-) diff --git a/image_analysis/scale_merge/RotationScaleMerge.cpp b/image_analysis/scale_merge/RotationScaleMerge.cpp index 86dc97067..5a73a377a 100644 --- a/image_analysis/scale_merge/RotationScaleMerge.cpp +++ b/image_analysis/scale_merge/RotationScaleMerge.cpp @@ -596,10 +596,8 @@ void RotationScaleMerge::IngestHost() { SmoothMosaicityAndPartiality(); ParallelChunks(static_cast(partials.size()), ThreadsForWork(partials.size(), nthreads), [&](int lo, int hi) { - for (int i = lo; i < hi; ++i) { - partials[i].delta_phi = ingest_delta_phi[i]; + for (int i = lo; i < hi; ++i) partials[i].partiality = ingest_partiality[i]; - } }); // The corr every pass starts from (see the header) was filled by the build, straight from the @@ -831,12 +829,13 @@ void RotationScaleMerge::IngestDevice(const RotationScaleMerge *observations_fro const int cnt = std::min(n - at, slice); ParallelChunks(cnt, nthreads, [&](int lo, int hi) { for (int i = lo; i < hi; ++i) { - const auto &o = partials[at + i]; - fbuf[0][i] = o.I; fbuf[1][i] = o.sigma; fbuf[2][i] = o.prescaling_corr; - fbuf[3][i] = o.partiality; fbuf[4][i] = o.zeta; fbuf[5][i] = o.corr; - fbuf[6][i] = o.bkg; fbuf[7][i] = o.var_bkg; fbuf[8][i] = o.image_number; - fbuf[9][i] = o.d; - flags[i] = static_cast((o.on_ice ? 1 : 0) | (o.clipped << 1)); // SetObsFlags + const PartialObs &o = partials[at + i]; + const Reflection &r = *o.r; + fbuf[0][i] = r.I; fbuf[1][i] = r.sigma; fbuf[2][i] = o.prescaling_corr; + fbuf[3][i] = o.partiality; fbuf[4][i] = r.zeta; fbuf[5][i] = o.corr; + fbuf[6][i] = r.bkg; fbuf[7][i] = r.var_bkg; fbuf[8][i] = r.image_number; + fbuf[9][i] = r.d; + flags[i] = static_cast((r.on_ice_ring ? 1 : 0) | (ClippedFlags(r) << 1)); // SetObsFlags } }); constexpr F fields[NFLOAT] = {F::I, F::Sigma, F::PrescalingCorr, F::Partiality, @@ -849,7 +848,7 @@ void RotationScaleMerge::IngestDevice(const RotationScaleMerge *observations_fro auto pos = std::make_shared(); pos->px.resize(n); pos->py.resize(n); ParallelChunks(n, nthreads, [&](int lo, int hi) { - for (int i = lo; i < hi; ++i) { pos->px[i] = partials[i].px; pos->py[i] = partials[i].py; } + for (int i = lo; i < hi; ++i) { pos->px[i] = partials[i].r->predicted_x; pos->py[i] = partials[i].r->predicted_y; } }); obs_position = std::move(pos); gpu_->SetRawRuns(static_cast(rawrun_start.size()), static_cast(perm.size()), perm.data(), @@ -1000,25 +999,18 @@ void RotationScaleMerge::BuildInRangeObservations(std::unique_ptr &ke for (const auto &r : partials_out[o].reflections) { if (!keep[src]) { ++src; continue; } ++src; - Obs &obs = partials[at]; - obs.h = r.h; obs.k = r.k; obs.l = r.l; - obs.I = r.I; obs.sigma = r.sigma; obs.d = r.d; + PartialObs &obs = partials[at]; + obs.r = &r; // The whole deterministic correction - Lorentz x polarization x sensor efficiency x air path - is the // numerator of corr, so the two halves are multiplied back together here. The incident flux is // divided out at the same time so the fits below see only what is left; it is the one term in // the product that is measured from the data rather than computed from the geometry. obs.prescaling_corr = static_cast(r.prescaling_corr * r.qe_corr * r.flight_corr / frame_flux[o]); - obs.partiality = r.partiality; obs.zeta = r.zeta; obs.delta_phi = r.delta_phi_deg; obs.bkg = r.bkg; obs.var_bkg = r.var_bkg; - obs.var_per_I = 0.0f; obs.capture = 0.0f; - obs.px = r.predicted_x; obs.py = r.predicted_y; - obs.image_number = r.image_number; + obs.partiality = r.partiality; obs.frame = o; - obs.on_ice = r.on_ice_ring ? 1 : 0; - obs.clipped = (r.clipped ? OBS_CLIPPED : 0) | (r.overloaded ? OBS_OVERLOADED : 0); obs.corr = r.image_scale_corr; - obs.group = -1; - finite_ok[at] = (std::isfinite(obs.I) && std::isfinite(obs.prescaling_corr) && obs.prescaling_corr != 0.0f - && std::isfinite(obs.sigma) && obs.sigma > 0.0f) ? 1 : 0; + finite_ok[at] = (std::isfinite(r.I) && std::isfinite(obs.prescaling_corr) && obs.prescaling_corr != 0.0f + && std::isfinite(r.sigma) && r.sigma > 0.0f) ? 1 : 0; ingest_delta_phi[at] = SmoothedDeltaPhi(sg, o, r.h, r.k, r.l, r.delta_phi_deg, resolved); ingest_partiality[at] = r.partiality; ingest_image_number[at] = r.image_number; @@ -1562,8 +1554,8 @@ void RotationScaleMerge::ReducePartialGroupMeans(int n_groups, std::vectorI, o.r->sigma, min_partiality, I_corr); if (w <= 0.0) continue; sw += w; swI += w * I_corr; @@ -2813,11 +2805,11 @@ int RotationScaleMerge::RockingEventFrames(int64_t *n_events) const { } return RockingEventFramesOver( [&](int i) { - const Obs &o = partials[i]; - return std::isfinite(o.corr) && o.corr > 0.0f && std::isfinite(o.I) - && std::isfinite(o.sigma) && o.sigma > 0.0f; + const PartialObs &o = partials[i]; + return std::isfinite(o.corr) && o.corr > 0.0f && std::isfinite(o.r->I) + && std::isfinite(o.r->sigma) && o.r->sigma > 0.0f; }, - [&](int i) { return partials[i].image_number; }, n_events); + [&](int i) { return partials[i].r->image_number; }, n_events); } template @@ -4389,15 +4381,23 @@ void RotationScaleMerge::Combine() { // A raw hkl's partials lie a frame apart in memory, and the work on one rocking event is long // enough that the CPU does not reach the next runs' loads on its own - the combine waited on a // cache miss for nearly every partial. So each run asks for the partials of the run - // COMBINE_PREFETCH_RUNS ahead. + // COMBINE_PREFETCH_RUNS ahead, and for the reflections of the run half as far ahead, whose partials + // - which say where the reflections are - were asked for that many runs before. constexpr int COMBINE_PREFETCH_RUNS = 8; auto prefetch_run = [&](int r) { - if (r >= n_run) return; - for (int p = rawrun_start[r]; p < rawrun_start[r] + rawrun_count[r]; ++p) { - const char *o = reinterpret_cast(&partials[perm[p]]); - Prefetch(o); - Prefetch(o + sizeof(Obs) - 1); - } + if (r < n_run) + for (int p = rawrun_start[r]; p < rawrun_start[r] + rawrun_count[r]; ++p) { + const char *o = reinterpret_cast(&partials[perm[p]]); + Prefetch(o); + Prefetch(o + sizeof(PartialObs) - 1); + } + const int rr = r - COMBINE_PREFETCH_RUNS / 2; + if (rr < n_run) + for (int p = rawrun_start[rr]; p < rawrun_start[rr] + rawrun_count[rr]; ++p) { + const char *o = reinterpret_cast(partials[perm[p]].r); + Prefetch(o); + Prefetch(o + sizeof(Reflection) - 1); + } }; // Combine one raw-hkl run into fulls, appended to `out`. Independent per run (the events of one hkl @@ -4409,9 +4409,9 @@ void RotationScaleMerge::Combine() { std::vector ev; // usable perm-indices of this raw hkl, in image-number order ev.reserve(hi - lo); for (int p = lo; p < hi; ++p) { - const auto &o = partials[perm[p]]; + const PartialObs &o = partials[perm[p]]; if (!std::isfinite(o.corr) || o.corr <= 0.0f) continue; - if (!std::isfinite(o.I) || !std::isfinite(o.sigma) || o.sigma <= 0.0f) continue; + if (!std::isfinite(o.r->I) || !std::isfinite(o.r->sigma) || o.r->sigma <= 0.0f) continue; ev.push_back(perm[p]); } const int group = rawrun_group[r]; @@ -4419,9 +4419,9 @@ void RotationScaleMerge::Combine() { size_t i = 0; while (i < ev.size()) { size_t kk = i + 1; - float last_frame = partials[ev[i]].image_number; + float last_frame = partials[ev[i]].r->image_number; while (kk < ev.size()) { - const float frame = partials[ev[kk]].image_number; + const float frame = partials[ev[kk]].r->image_number; if (frame - last_frame > max_frame_gap) break; last_frame = frame; ++kk; @@ -4430,11 +4430,11 @@ void RotationScaleMerge::Combine() { double pooled_bkg = 0.0; int n_pool = 0; for (size_t m = i; m < kk; ++m) { - const float b = partials[ev[m]].bkg; + const float b = partials[ev[m]].r->bkg; if (std::isfinite(b)) { pooled_bkg += b; ++n_pool; } } pooled_bkg = n_pool > 0 ? pooled_bkg / n_pool : 0.0; - auto pooled_I = [&](const Obs &r2) { + auto pooled_I = [&](const Reflection &r2) { const double n_bkg = std::max(0.0, static_cast(r2.sigma) * r2.sigma - r2.I) / std::max(r2.bkg, 1.0f); return static_cast(r2.I) + n_bkg * (static_cast(r2.bkg) - pooled_bkg); @@ -4443,12 +4443,12 @@ void RotationScaleMerge::Combine() { double sum_w = 0.0, sum_wI = 0.0, sum_partiality = 0.0; float d = NAN; int peak_outcome = partials[ev[i]].frame; - float peak_frame = partials[ev[i]].image_number; - float peak_px = partials[ev[i]].px, peak_py = partials[ev[i]].py; + float peak_frame = partials[ev[i]].r->image_number; + float peak_px = partials[ev[i]].r->predicted_x, peak_py = partials[ev[i]].r->predicted_y; float peak_partiality = -1.0f; - const bool on_ice = partials[ev[i]].on_ice; + const bool on_ice = partials[ev[i]].r->on_ice_ring; uint8_t flags = 0; - for (size_t m = i; m < kk; ++m) flags |= partials[ev[m]].clipped; + for (size_t m = i; m < kk; ++m) flags |= ClippedFlags(*partials[ev[m]].r); // A saturated pixel anywhere in the rocking curve means its brightest part was not measured: // the event is not a measurement of the reflection, and summing what is left - or scaling // the flanks up by the partiality model - reads it 2-3x low. Dropped whole, as XDS drops an @@ -4460,17 +4460,18 @@ void RotationScaleMerge::Combine() { } const bool clipped = flags & OBS_CLIPPED; for (size_t m = i; m < kk; ++m) { - const auto &r2 = partials[ev[m]]; - const double sigma_corr = static_cast(r2.sigma) * r2.corr; + const PartialObs &p2 = partials[ev[m]]; + const Reflection &r2 = *p2.r; + const double sigma_corr = static_cast(r2.sigma) * p2.corr; const double w = 1.0 / (sigma_corr * sigma_corr); sum_w += w; - sum_wI += w * pooled_I(r2) * r2.corr; - sum_partiality += r2.partiality; - if (r2.partiality > peak_partiality) { - peak_partiality = r2.partiality; - peak_outcome = r2.frame; + sum_wI += w * pooled_I(r2) * p2.corr; + sum_partiality += p2.partiality; + if (p2.partiality > peak_partiality) { + peak_partiality = p2.partiality; + peak_outcome = p2.frame; peak_frame = r2.image_number; - peak_px = r2.px; peak_py = r2.py; + peak_px = r2.predicted_x; peak_py = r2.predicted_y; } if (!std::isfinite(d) && std::isfinite(r2.d) && r2.d > 0.0f) d = r2.d; } @@ -4482,8 +4483,8 @@ void RotationScaleMerge::Combine() { for (int iter = 0; iter < 3; ++iter) { sum_w = 0.0; sum_wI = 0.0; sum_wb = 0.0; sum_cwb = 0.0; for (size_t m = i; m < kk; ++m) { - const auto &r2 = partials[ev[m]]; - const double corr = r2.corr; + const Reflection &r2 = *partials[ev[m]].r; + const double corr = partials[ev[m]].corr; const double I_corr = pooled_I(r2) * corr; const double sigma_corr = static_cast(r2.sigma) * corr; // The non-signal variance as the integrator measured it, which is where it belongs: @@ -4661,16 +4662,17 @@ void RotationScaleMerge::ComputePerFrameCC(const std::vector &partial_gr size_t n = 0; const int lo = frame_start[f], hi = frame_start[f] + frame_count[f]; for (int i = lo; i < hi; ++i) { - const auto &o = partials[i]; + const PartialObs &o = partials[i]; + const Reflection &r = *o.r; const int g = partial_group[i]; - if (o.on_ice) continue; + if (r.on_ice_ring) continue; if (g < 0) continue; if (o.partiality < min_partiality) continue; - if (!std::isfinite(o.I) || !std::isfinite(o.corr) || o.corr <= 0.0f) continue; - if (!std::isfinite(o.sigma) || o.sigma <= 0.0f) continue; + if (!std::isfinite(r.I) || !std::isfinite(o.corr) || o.corr <= 0.0f) continue; + if (!std::isfinite(r.sigma) || r.sigma <= 0.0f) continue; const double mean = partial_group_mean[g]; if (!std::isfinite(mean)) continue; - const double img = static_cast(o.I) * o.corr; + const double img = static_cast(r.I) * o.corr; sx += img; sy += mean; sx2 += img * img; sy2 += mean * mean; sxy += img * mean; ++n; } @@ -6435,7 +6437,7 @@ RotationScaleMerge::Result RotationScaleMerge::RunArm(bool scale_partials, bool #endif // The CPU partial scaling below writes every partial's corr when it is done, from a copy it starts // off corr_ingested itself, and nothing between here and there reads corr - so there the restore - // is not made, which saves a pass over the eighty-byte records to set four bytes of each. + // is not made, which saves a pass over the partials to set four bytes of each. if (!restored_on_gpu && !scale_partials) ParallelChunks(static_cast(partials.size()), ThreadsForWork(partials.size(), nthreads), [&](int lo, int hi) { @@ -6568,8 +6570,8 @@ RotationScaleMerge::Result RotationScaleMerge::RunArm(bool scale_partials, bool FillVector scaling_corr(n_partials); ParallelChunks(n_partials, partial_threads, [&](int lo, int hi) { for (int q = lo; q < hi; ++q) { - const Obs &o = partials[scaling_index[q]]; - scaling_refs[q] = {o.frame, o.I, o.sigma, o.partiality, o.prescaling_corr}; + const PartialObs &o = partials[scaling_index[q]]; + scaling_refs[q] = {o.frame, o.r->I, o.r->sigma, o.partiality, o.prescaling_corr}; scaling_corr[q] = corr_ingested[scaling_index[q]]; // the restore (see the top) } }); @@ -6580,9 +6582,9 @@ RotationScaleMerge::Result RotationScaleMerge::RunArm(bool scale_partials, bool // fitted on them is fitted on noise that the reference does not answer to. The Rotation // model needs zeta > 0. auto fitted_obs = [&](int i) { - const Obs &o = partials[i]; - return partial_group[i] >= 0 && !o.on_ice && o.partiality >= min_partiality - && std::isfinite(o.zeta) && o.zeta > 0.0f; + const PartialObs &o = partials[i]; + return partial_group[i] >= 0 && !o.r->on_ice_ring && o.partiality >= min_partiality + && std::isfinite(o.r->zeta) && o.r->zeta > 0.0f; }; const int n_fit_frames = static_cast(frame_start.size()); std::vector fit_start(n_fit_frames + 1, 0); @@ -6597,8 +6599,8 @@ RotationScaleMerge::Result RotationScaleMerge::RunArm(bool scale_partials, bool int32_t k = fit_start[f]; for (int i = frame_start[f]; i < frame_start[f] + frame_count[f]; ++i) { if (!fitted_obs(i)) continue; - const Obs &o = partials[i]; - scaling_fit[k++] = {partial_group[i], o.I, o.sigma, o.partiality, o.prescaling_corr}; + const PartialObs &o = partials[i]; + scaling_fit[k++] = {partial_group[i], o.r->I, o.r->sigma, o.partiality, o.prescaling_corr}; } }); @@ -6679,7 +6681,7 @@ RotationScaleMerge::Result RotationScaleMerge::RunArm(bool scale_partials, bool ParallelChunks(static_cast(partials.size()), ThreadsForWork(partials.size(), nthreads), [&](int lo, int hi) { for (int i = lo; i < hi; ++i) { - Obs &o = partials[i]; + PartialObs &o = partials[i]; if (apply[o.frame] && std::isfinite(o.corr)) o.corr = static_cast(o.corr * ratio[o.frame]); } @@ -6738,8 +6740,8 @@ RotationScaleMerge::Result RotationScaleMerge::RunArm(bool scale_partials, bool [&](int lo, int hi) { int64_t n = 0; for (int i = lo; i < hi; ++i) { - Obs &o = partials[i]; - if (!(std::isfinite(o.zeta) && o.zeta >= search_min_zeta)) { + PartialObs &o = partials[i]; + if (!(std::isfinite(o.r->zeta) && o.r->zeta >= search_min_zeta)) { if (std::isfinite(o.corr) && o.corr > 0.0f) ++n; o.corr = 0.0f; } diff --git a/image_analysis/scale_merge/RotationScaleMerge.h b/image_analysis/scale_merge/RotationScaleMerge.h index b1aa6d658..fafd1c892 100644 --- a/image_analysis/scale_merge/RotationScaleMerge.h +++ b/image_analysis/scale_merge/RotationScaleMerge.h @@ -128,7 +128,10 @@ public: // experiment: read live (its space group is changed by the caller between Run() calls). // partial_outcomes: the per-frame partials; the final per-frame scale (G, CC, mosaicity) is written - // back onto them so the offline per-image scaling table is still exported. + // back onto them so the offline per-image scaling table is still exported. Where the engine scales on + // the host (ReadsReflections), it reads the reflections themselves from the ingest on, so they + // must stay where they are, as they are, for as long as it merges: not freed, moved or changed, + // but for their h, k and l, which it does not read after the ingest. // reference_cell: the consensus cell (for the completeness count and the cell-consistency mask). RotationScaleMerge(const DiffractionExperiment &experiment, std::vector &partial_outcomes, @@ -259,6 +262,9 @@ public: [[nodiscard]] int GetGpuDevice() const { return gpu_device; } // Whether this engine scales on the GPU (decided by the ingest). [[nodiscard]] bool OnGPU() const; + // Whether the engine still reads the source reflections in later Runs (see the constructor): where it + // scales on the host, or keeps its partials for the observation dump. + [[nodiscard]] bool ReadsReflections() const { return !partials.empty(); } // Whether Run() also hands back the merge's fulls unmerged (Result::scaled_fulls). Off by default: // it is a copy as long as the fulls, wanted only by a caller that writes them. @@ -296,10 +302,10 @@ private: static constexpr uint8_t OBS_CLIPPED = 1; static constexpr uint8_t OBS_OVERLOADED = 2; - // One integrated observation - a per-frame partial during scaling/combine, or a combined full during - // scale-fulls/merge. Flat (not nested per image); a POD so the arrays translate straight to CUDA. - // No member initialisers, so that `partials` and `fulls` (FillVector) are first written by the - // parallel passes that fill them: whoever makes one sets every field. + // One combined full during scale-fulls/merge (a per-frame partial is a PartialObs, below). Flat (not + // nested per image); a POD so the arrays translate straight to CUDA. No member initialisers - here or in + // PartialObs - so that `fulls` and `partials` (FillVector) are first written by the parallel passes + // that fill them: whoever makes one sets every field. struct Obs { int32_t h, k, l; float I, sigma, d, prescaling_corr, partiality, zeta, delta_phi, bkg, var_bkg; @@ -321,6 +327,24 @@ private: int32_t group; // dense ASU-group id for the current space group; <0 = never mergeable }; + // One per-frame partial as the host holds it - without a GPU, or for the observation dump: where its + // reflection is, and the four values the ingest works out for it or the scaling changes. Every other + // field is the reflection's own, read from it: the run keeps the reflections for as long as the engine + // merges, and nothing changes in them after the images are integrated but the Miller indices of a + // reindexing, which only the ingest reads (from the reflections, into the raw-hkl runs). Twenty-four + // bytes where a copy of the fields was eighty-four - on a long axis, a hundred million partials. + struct PartialObs { + const Reflection *r; + int32_t frame; // index of the outcome whose per-frame scale G applies to this obs + float prescaling_corr; // the reflection's whole deterministic correction over the frame's flux + float partiality; // recomputed from the frame-order-smoothed mosaicity (Ingest) + float corr; // image_scale_corr (working; updated by scaling) + }; + // A reflection's Obs::clipped. + static uint8_t ClippedFlags(const Reflection &r) { + return (r.clipped ? OBS_CLIPPED : 0) | (r.overloaded ? OBS_OVERLOADED : 0); + } + // One leverage-corrected error-model sample per usable full: its counting variance at the group's // mean, that mean squared, its squared deviation from the mean - and the resolution it sits at, // because the fit is re-run over the samples that survive the automatic resolution cutoff. See @@ -414,7 +438,7 @@ private: // built only when the device pipeline is NOT resident (no GPU, or an observation dump was asked // for); on the resident path (resident_ingest) the device holds the observations and the host // keeps only the ingest arrays below, until the end of Ingest. - FillVector partials; // all per-frame partials, grouped by frame + FillVector partials; // all per-frame partials, grouped by frame bool resident_ingest = false; // What the ingest-time geometry smoothing (SmoothMosaicityAndPartiality) needs, one array per field // in `partials` order: the two fields it rewrites, the two the rocking-event walks read in raw-hkl @@ -696,13 +720,13 @@ private: std::vector partial_group_start, partial_group_count; NotCopied partial_group_perm; // Without a GPU: each partial's ASU group (-1 = in none), in observation order - where the CPU - // passes read a partial's group from. A partial's own Obs::group is not stamped: written into the - // eighty-byte records at random, once per grouping, it cost more than the grouping itself. + // passes read a partial's group from. It is not kept on the partial: written into the records at + // random, once per grouping, it cost more than the grouping itself. NotCopied partial_group; // The CPU scaling loops' working copy of the partials, or of the fulls. A loop passes over them // several times per iteration and reads a handful of fields each time, so it works on these rather - // than on the eighty-byte Obs. ScalingRef holds what the group means and the corr update read, in the CSR's + // than on the partials and their reflections. ScalingRef holds what the group means and the corr update read, in the CSR's // group order with the partials in no group after them, and corr is kept beside it in the same // order - so neither pass gathers. ScalingFit holds, frame by frame, the observations // FitScalingFrames fits: the fit's filters, which do not change over the loop, applied once, diff --git a/rugnux/RugnuxScaleMerge.cpp b/rugnux/RugnuxScaleMerge.cpp index 658fadb27..8706399d0 100644 --- a/rugnux/RugnuxScaleMerge.cpp +++ b/rugnux/RugnuxScaleMerge.cpp @@ -839,14 +839,17 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { // the scaling engine is finished - nothing after this point reads it on that pass // (the search and the reference re-merge run only on the canonical one) - so it is // freed BEFORE the fit: the engine holds about twice the partial payload again, - // and with it gone the fit no longer sits on the pass's memory peak. - if (prepass_postrefine_obs) + // and with it gone the fit no longer sits on the pass's memory peak. An engine that + // read the reflections in its merges left the gather to here, and from here nothing + // on the pass reads them either: each image's is handed back as it is gathered. + const bool release = geometry_prepass && rsm && config_.reference_data.empty(); + if (prepass_postrefine_obs || release) rsm.reset(); auto pr_obs = prepass_postrefine_obs ? std::move(*prepass_postrefine_obs) : gather ? GatherPostRefineObservations(indexer->GetIntegrationOutcome(), config_.nthreads, - /*release_reflections=*/false, logger, + /*release_reflections=*/release, logger, max_images) : PostRefineObservations{}; prepass_postrefine_obs.reset(); @@ -1201,8 +1204,10 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { // per-frame fields - so take the post-refine's view NOW and hand each image's vector back as // it is read: on a fine-sliced long axis the vectors are gigabytes, held to the end of the // pass for those 32 bytes a partial. A run with a reference MTZ keeps them: resolving the - // indexing ambiguity re-reads them (and re-ingests). - if (geometry_prepass && rsm && config_.reference_data.empty()) + // indexing ambiguity re-reads them (and re-ingests). So does an engine that scales on the host, + // which reads them in its merges (RotationScaleMerge::ReadsReflections): there the view is taken + // once the engine is done with them (prepare_post_refine). + if (geometry_prepass && rsm && config_.reference_data.empty() && !rsm->ReadsReflections()) prepass_postrefine_obs = GatherPostRefineObservations( indexer->GetIntegrationOutcome(), config_.nthreads, /*release_reflections=*/true, logger); -- 2.54.0 From 46c44e04d9478c5dd256a1a71e730824d1a84b19 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 09:31:24 +0200 Subject: [PATCH 13/81] Rotation scaling: a host-memory budget decides what runs side by side The run's budget (ProcessConfig::host_memory_budget_bytes, else 75% of the machine's RAM) is decided once and logged, and sizes the host worker pool. Three concurrencies of the scaling chain are decided on it from counts known before each starts (RotationScaleMerge::HostIngestBytes, HostMergeBytes, HostBytesBound), each logged where it serialises: - the quality guard's merge beside the main ingest: where they would not fit together, the guard merges first; - the canonical pass's post-refinement beside the merge chain: done before the first merge; - the all-observation P1 search merge beside the main engine's (GPU path): started where the search first reads it, after the main engine's merges and the release of their scratch. None of these reads what the other writes while it runs, so only the order changes: a [large] test runs the rotation set at a 1 TB and a 1 MB budget and compares the .hkl byte for byte. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../scale_merge/RotationScaleMerge.cpp | 37 +++++++ .../scale_merge/RotationScaleMerge.h | 9 ++ rugnux/Rugnux.cpp | 15 +++ rugnux/Rugnux.h | 7 ++ rugnux/RugnuxScaleMerge.cpp | 96 +++++++++++++++---- tests/RugnuxLargeTest.cpp | 64 +++++++++++++ 6 files changed, 210 insertions(+), 18 deletions(-) diff --git a/image_analysis/scale_merge/RotationScaleMerge.cpp b/image_analysis/scale_merge/RotationScaleMerge.cpp index 5a73a377a..120dc0753 100644 --- a/image_analysis/scale_merge/RotationScaleMerge.cpp +++ b/image_analysis/scale_merge/RotationScaleMerge.cpp @@ -779,6 +779,43 @@ size_t RotationScaleMerge::DeviceBytes() const { return std::max(bytes + bytes / 5, ingest); } +namespace { + // The host bytes the ingest holds per partial from then on: the corr every Run starts from and, with + // the GPU resident, the predicted position the fulls are given; on the host, the partial itself, the + // raw-hkl order, the finiteness mask and the ASU grouping's three per-partial arrays. Per raw-hkl run: + // its start, count, h, k, l, d and group. + constexpr size_t HOST_INGEST_BYTES_PER_PARTIAL_GPU = 3 * sizeof(float); + constexpr size_t HOST_INGEST_BYTES_PER_RUN = 7 * sizeof(int32_t); + // What one merge holds on the host at its peak, per rocking event (a full each at most: the full, its + // download staging and the merge's per-full fields), per distinct hkl (an ASU group and a merged + // reflection each at most: the merge's per-group accumulators, R_meas sums and their staging, the ISa + // scatter, the merged reflection), and per partial where the engine scales on the host (the scaling + // loop's copies of the partials and the memo of their corr). + constexpr size_t HOST_MERGE_BYTES_PER_EVENT = 190, HOST_MERGE_BYTES_PER_HKL = 420; + constexpr size_t HOST_MERGE_BYTES_PER_PARTIAL_CPU = 65; +} + +size_t RotationScaleMerge::HostIngestBytes() const { + constexpr size_t PER_PARTIAL_CPU = sizeof(PartialObs) + sizeof(float) + sizeof(uint8_t) + 4 * sizeof(int32_t); + const size_t per_partial = OnGPU() ? HOST_INGEST_BYTES_PER_PARTIAL_GPU : PER_PARTIAL_CPU; + return per_partial * static_cast(n_partials_obs) + HOST_INGEST_BYTES_PER_RUN * rawrun_start.size(); +} + +size_t RotationScaleMerge::HostMergeBytes() const { + // The device path's ingest counted the rocking events; without it every partial may be one. + const auto events = static_cast(rocking_events_at_ingest > 0 ? rocking_events_at_ingest : n_partials_obs); + return HOST_MERGE_BYTES_PER_EVENT * events + HOST_MERGE_BYTES_PER_HKL * rawrun_start.size() + + (OnGPU() ? 0 : HOST_MERGE_BYTES_PER_PARTIAL_CPU * static_cast(n_partials_obs)); +} + +size_t RotationScaleMerge::HostBytesBound(size_t n_reflections, bool on_gpu) { + constexpr size_t PER_PARTIAL_CPU = sizeof(PartialObs) + sizeof(float) + sizeof(uint8_t) + 4 * sizeof(int32_t) + + HOST_MERGE_BYTES_PER_PARTIAL_CPU; + const size_t per_reflection = (on_gpu ? HOST_INGEST_BYTES_PER_PARTIAL_GPU : PER_PARTIAL_CPU) + + HOST_INGEST_BYTES_PER_RUN + HOST_MERGE_BYTES_PER_EVENT + HOST_MERGE_BYTES_PER_HKL; + return per_reflection * n_reflections; +} + std::unique_ptr RotationScaleMerge::CloneIngest(int device, Logger &log) const { TimingMark mark(*logger, "rsm ingest copy"); std::unique_ptr c(new RotationScaleMerge(*this)); diff --git a/image_analysis/scale_merge/RotationScaleMerge.h b/image_analysis/scale_merge/RotationScaleMerge.h index fafd1c892..b5b90147c 100644 --- a/image_analysis/scale_merge/RotationScaleMerge.h +++ b/image_analysis/scale_merge/RotationScaleMerge.h @@ -250,6 +250,15 @@ public: [[nodiscard]] size_t DeviceBytes() const; // The device scaling's estimated peak (see the .cpp). Call after the ingest. [[nodiscard]] size_t GPUScalingPeakBytes() const; + + // The host memory an engine holds, for a caller deciding what may run beside it within the host budget + // (HostMemory.h); it decides nothing in the engine. HostIngestBytes: what the ingest holds from then on, + // between merges - call after IngestDevice(). HostMergeBytes: what one merge holds on top of it at its + // peak, from the counts the ingest knows (see the .cpp). HostBytesBound: the two together, before an + // ingest of `n_reflections`, at most. + [[nodiscard]] size_t HostIngestBytes() const; + [[nodiscard]] size_t HostMergeBytes() const; + [[nodiscard]] static size_t HostBytesBound(size_t n_reflections, bool on_gpu); // Above this fraction of the card's memory the scaling runs on the CPU. static constexpr double CPU_SCALING_ABOVE_CARD_FRACTION = 0.8; diff --git a/rugnux/Rugnux.cpp b/rugnux/Rugnux.cpp index e6e6eb076..6c2de20eb 100644 --- a/rugnux/Rugnux.cpp +++ b/rugnux/Rugnux.cpp @@ -32,6 +32,7 @@ #include "../reader/JFJochHDF5Reader.h" #include "../reader/JFJochStartMessageReader.h" +#include "../common/HostMemory.h" #include "../common/JFJochMath.h" #include "../common/ParallelFor.h" #include "../common/Logger.h" @@ -317,6 +318,20 @@ Rugnux::Rugnux(JFJochReader &reader, DiffractionExperiment experiment, LogHeaderBeamCenter(experiment_, pixel_mask_); + // What the run plans its host memory against, decided once from the machine's total (HostMemory.h): + // work that would not fit it side by side runs one part after the other, and the large per-worker + // buffers of the model's steps are held a share of it at a time. Only when things run changes. + const size_t machine = get_host_total_memory(); + host_budget_ = config_.host_memory_budget_bytes > 0 ? config_.host_memory_budget_bytes : DefaultHostMemoryBudget(); + HostWorkerPool::Instance().SetSize( + std::max(1, static_cast(HOST_WORKER_POOL_FRACTION * static_cast(host_budget_)))); + Logger("Rugnux").Info("Host memory budget {:.1f} GB ({}): what does not fit it side by side runs in series", + static_cast(host_budget_) / 1e9, + config_.host_memory_budget_bytes > 0 + ? std::string("set by the caller") + : fmt::format("{:.0f}% of the machine's {:.1f} GB", 100.0 * HOST_MEMORY_BUDGET_FRACTION, + static_cast(machine) / 1e9)); + // Every decision on a rotation run - per-frame scaling, the correction surfaces, the outlier test, // the error model, the CC1/2 half-sets and the resolution cut, the frame ledger, the space-group // search - is taken with Friedel mates merged, -A or not. Splitting them halves the multiplicity diff --git a/rugnux/Rugnux.h b/rugnux/Rugnux.h index e5cca61d9..92ca53d06 100644 --- a/rugnux/Rugnux.h +++ b/rugnux/Rugnux.h @@ -73,6 +73,11 @@ struct ProcessConfig { // The per-image loop is capped in that case (see RunPipeline); an explicit -N never is. bool nthreads_auto = false; + // The host memory the run plans against, in bytes; 0 (the default) takes the machine's + // (DefaultHostMemoryBudget). It decides only what runs side by side - never a number - so a caller + // setting it (the tests do) changes the run's time and its memory, and nothing it writes. + size_t host_memory_budget_bytes = 0; + // Output prefix for the _process.h5 (and scaled reflections). Empty => process without writing. std::string output_prefix; // What the reflection files record about where they came from (WriteReflections). @@ -800,6 +805,8 @@ class Rugnux { DiffractionExperiment experiment_; PixelMask pixel_mask_; ProcessConfig config_; + // The host memory budget (ProcessConfig::host_memory_budget_bytes, else the machine's), decided once. + size_t host_budget_ = 0; // The run's cancel flag, shared with the copies the run makes of itself to run passes side by // side (see RunAllPasses), so cancelling the run cancels those too. class CancelFlag { diff --git a/rugnux/RugnuxScaleMerge.cpp b/rugnux/RugnuxScaleMerge.cpp index 8706399d0..c50ccb5f6 100644 --- a/rugnux/RugnuxScaleMerge.cpp +++ b/rugnux/RugnuxScaleMerge.cpp @@ -948,13 +948,41 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { /*full_stats=*/false, /*measure_cc_before_corrections=*/true); return ScaleMergeResult{std::move(r.merged), std::move(r.statistics), r.cc_half_before_corrections}; }; + // What the host holds from here on (HostMemory.h): the reflections, and beside them the engines below. + // The counts are known now, before anything is ingested, so each concurrency below is decided on them: + // where two pieces of work would not fit the host budget together, one waits for the other. None of + // them reads anything another writes while it runs (see each), so only the order changes. + size_t n_reflections = 0, n_reflections_guard = 0; + { + const auto &outcomes = indexer->GetIntegrationOutcome(); + for (size_t o = 0; o < outcomes.size(); ++o) { + n_reflections += outcomes[o].reflections.size(); + if (static_cast(o) < prepass_images) + n_reflections_guard += outcomes[o].reflections.size(); + } + } + const size_t reflection_bytes = n_reflections * sizeof(Reflection); + const auto host_gb = [](size_t bytes) { return static_cast(bytes) / 1e9; }; std::future guard_ahead; - if (merge_first_part && !(postrefine_probe_ && !geometry_prepass && postrefine_probe_only_)) - guard_ahead = std::async(std::launch::async, [&] { - if (guard_on_second_gpu) - pin_gpu(1); // the card and its NUMA node, as an image-loop worker has them - return merge_guard(); - }); + if (merge_first_part && !(postrefine_probe_ && !geometry_prepass && postrefine_probe_only_)) { + // The guard's merge runs beside the main engine's ingest. Where an engine of the guard's frames and + // one of all the frames would not fit the budget together - counted at the most an engine of that + // many reflections can hold - the guard merges first, on its own, and the ingest starts after it. + const bool on_gpu = get_gpu_count() > 0; + const size_t beside = reflection_bytes + RotationScaleMerge::HostBytesBound(n_reflections_guard, on_gpu) + + RotationScaleMerge::HostBytesBound(n_reflections, on_gpu); + if (beside <= host_budget_ || guard_on_second_gpu) + guard_ahead = std::async(std::launch::async, [&] { + if (guard_on_second_gpu) + pin_gpu(1); // the card and its NUMA node, as an image-loop worker has them + return merge_guard(); + }); + else { + logger.Info("Host memory: the quality guard's merge and this pass's ingest need up to {:.1f} GB side by " + "side, over the {:.1f} GB budget - the guard merges first", host_gb(beside), host_gb(host_budget_)); + guard_merge = merge_guard(); + } + } // The scaling engine's ingest reads the outcomes and nothing else either, so its host half runs // beside the post-refinement too; with one GPU the device half waits for the guard to hand the // card back. @@ -1096,6 +1124,19 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { std::unique_ptr rsm_all; Logger all_arm_log = Logger::Buffered(); std::future all_arm_ahead; + const auto start_all_arm = [&rsm_all, &all_arm_log] { + return std::async(std::launch::async, [&rsm_all, &all_arm_log] { + pin_gpu(rsm_all->GetGpuDevice()); // the card and its NUMA node, as the guard's merge has them + TimingMark mark(all_arm_log, "merge P1, all observations"); + auto r = rsm_all->Run(/*for_search=*/true, /*full_stats=*/true, + /*measure_cc_before_corrections=*/false); + // This engine merges once: what is left for it to do is the write-back of its + // per-frame scales, so its observations and its merge's working arrays go now, + // rather than through the search the others are about to run. + rsm_all->ReleaseAllButPerFrameScale(); + return r; + }); + }; if (is_rotation) { if (experiment_.GetRefineRotationWedgeInScaling() || rot_ss.GetRotationWedgeForScaling().has_value()) @@ -1150,7 +1191,8 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { } // With one card the guard's merge has the card to itself first. if (merge_first_part && !guard_on_second_gpu) { - guard_merge = guard_ahead.valid() ? guard_ahead.get() : merge_guard(); + if (!guard_merge) + guard_merge = guard_ahead.valid() ? guard_ahead.get() : merge_guard(); guard_log.ReplayInto(logger); } rsm->IngestDevice(); @@ -1158,6 +1200,21 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { const int32_t cards = get_gpu_count(); engine_log.ReplayInto(logger); rsm->SetLogger(logger); + // The canonical pass's post-refinement gathers (from the moment the engine has ingested) and fits + // beside the merges that follow. Where its gather and the selection it ranks would not fit the host + // budget beside the reflections, this engine and its first merge, it is done before that merge. + const size_t host_engine = reflection_bytes + rsm->HostIngestBytes(); + const size_t host_merge = rsm->HostMergeBytes(); + constexpr size_t POSTREFINE_RANKED_BYTES = 16; // PostRefineRotationGeometry's ranking, per partial + const size_t host_postrefine = n_reflections * (sizeof(PostRefinePartial) + POSTREFINE_RANKED_BYTES); + bool postrefine_beside = p.postrefine_ahead.valid(); + if (postrefine_beside && host_engine + host_merge + host_postrefine > host_budget_) { + logger.Info("Host memory: the post-refinement ({:.1f} GB) does not fit beside the merge ({:.1f} GB, " + "{:.1f} GB held) within the {:.1f} GB budget - it is done before the merge", + host_gb(host_postrefine), host_gb(host_merge), host_gb(host_engine), host_gb(host_budget_)); + p.postrefine_ahead.wait(); + postrefine_beside = false; + } // On a card of its own from three cards up (card 0 has this engine, card 1 the quality guard's // and the speculative passes). Otherwise on the last card, beside the engine already there - // this one, or the guard's, which merges at most as many observations - and only where two @@ -1167,6 +1224,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { // holds more, but a merge that does not fit beside it waits for it to end. On a 16 GB card that // is the data sets up to about 90 M observations at high multiplicity; the large ones merge // their arms one after the other. + bool all_arm_beside = false; if (!geometry_prepass && !experiment_.GetGemmiSpaceGroup().has_value() && rsm->GetSearchMinZeta() > 0.0 && cards > 0 && rsm->OnGPU()) { const int32_t device = std::min(cards - 1, 2); @@ -1177,23 +1235,23 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { rsm_all->SetSearchMinZeta(0.0); rsm_all->SetExportScaledFulls(false); // as scale_and_merge sets them for a search merge rsm_all->SetFrenchWilson(false); + // ... and beside this engine's merges only where two merges fit the host budget as well, + // with the post-refinement where it is still running; otherwise it merges where the search + // first reads it, after this engine's merges, on its own. + const size_t host_beside = host_engine + 2 * host_merge + (postrefine_beside ? host_postrefine : 0); + all_arm_beside = host_beside <= host_budget_; + if (!all_arm_beside) + logger.Info("Host memory: two P1 merges side by side need about {:.1f} GB, over the {:.1f} GB " + "budget - the all-observation merge is made after this engine's", + host_gb(host_beside), host_gb(host_budget_)); } } if (rsm_all) { // Its observations are copied from this engine's card arrays, not staged from the // reflections a second time. rsm_all->IngestDevice(&*rsm); - all_arm_ahead = std::async(std::launch::async, [&rsm_all, &all_arm_log] { - pin_gpu(rsm_all->GetGpuDevice()); // the card and its NUMA node, as the guard's merge has them - TimingMark mark(all_arm_log, "merge P1, all observations"); - auto r = rsm_all->Run(/*for_search=*/true, /*full_stats=*/true, - /*measure_cc_before_corrections=*/false); - // This engine merges once: what is left for it to do is the write-back of its - // per-frame scales, so its observations and its merge's working arrays go now, - // rather than through the search the others are about to run. - rsm_all->ReleaseAllButPerFrameScale(); - return r; - }); + if (all_arm_beside) + all_arm_ahead = start_all_arm(); } } @@ -1637,6 +1695,8 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { // others is made again where it is wanted, in series, as it would have been without it. std::optional all_merge; std::future all_search_ahead; + if (rsm_all && !all_arm_ahead.valid()) + all_arm_ahead = start_all_arm(); // not beside the merges above (the host budget): now if (all_arm_ahead.valid()) { TimingMark wait_mark(logger, "wait for the all-observation merge"); try { diff --git a/tests/RugnuxLargeTest.cpp b/tests/RugnuxLargeTest.cpp index 19ba12005..38a6de228 100644 --- a/tests/RugnuxLargeTest.cpp +++ b/tests/RugnuxLargeTest.cpp @@ -9,11 +9,15 @@ #include #include +#include +#include #include +#include #include #include "TestData.h" #include "../common/DiffractionExperiment.h" +#include "../common/HostMemory.h" #include "../common/IndexingSettings.h" #include "../reader/JFJochHDF5Reader.h" #include "../rugnux/Rugnux.h" @@ -121,3 +125,63 @@ TEST_CASE("Rugnux_FirstPassMemoMatchesRecomputation", "[large]") { reader.Close(); } + +// The host memory budget decides only what runs side by side - the quality guard's merge beside the +// ingest, the post-refinement beside the merge chain, the two search merges beside each other, how many +// large per-worker buffers are held at once - and never what is computed. So a run planned against a +// budget nothing fits in (everything in series) writes what a run with room for everything writes, to +// the byte. +TEST_CASE("Rugnux_HostBudgetChangesOnlyTheSchedule", "[large]") { + const auto master = jfjoch_test::LargeDataFile("rotation_master.h5"); + if (!master) + SKIP("rotation_master.h5 not available (git-lfs data not pulled)"); + + RegisterHDF5Filter(); + const auto slurp = [](const std::string &path) { + std::ifstream f(path, std::ios::binary); + return std::string(std::istreambuf_iterator(f), std::istreambuf_iterator()); + }; + const auto run = [&](size_t budget, const std::string &prefix) { + JFJochHDF5Reader reader; + REQUIRE_NOTHROW(reader.ReadFile(*master)); + auto dataset = reader.GetDataset(); + REQUIRE(dataset); + DiffractionExperiment experiment(dataset->experiment); + IndexingSettings indexing; + indexing.Algorithm(IndexingAlgorithmEnum::Auto); + indexing.RotationIndexing(true); + experiment.ImportIndexingSettings(indexing); + + ProcessConfig config; + config.mode = ProcessMode::FullAnalysis; + config.nthreads = default_threads(); + config.spot_finding = DiffractionExperiment::DefaultDataProcessingSettings(); + config.spot_finding.indexing = true; + config.rotation_indexing = true; + config.two_pass_rotation = true; + config.rotation_postrefine_geometry = true; + config.run_scaling = true; + config.write_process_h5 = false; + config.output_prefix = prefix; + config.host_memory_budget_bytes = budget; + + Rugnux process(reader, experiment, *dataset->pixel_mask, config); + ProcessResult result; + REQUIRE_NOTHROW(result = process.Run()); + reader.Close(); + return result; + }; + const std::filesystem::path dir = std::filesystem::temp_directory_path() / "rugnux_host_budget_test"; + std::filesystem::create_directories(dir); + const ProcessResult roomy = run(size_t(1) << 40, (dir / "roomy").string()); + const ProcessResult tight = run(size_t(1) << 20, (dir / "tight").string()); + + REQUIRE(roomy.has_merge_statistics); + CHECK(tight.merge_statistics_text == roomy.merge_statistics_text); + CHECK(tight.merged_i_sigma == roomy.merged_i_sigma); + const std::string hkl = slurp((dir / "roomy.hkl").string()); + CHECK_FALSE(hkl.empty()); + CHECK(slurp((dir / "tight.hkl").string()) == hkl); + std::filesystem::remove_all(dir); + HostWorkerPool::Instance().SetSize(0); // process-wide: back to the machine's for the tests after this one +} -- 2.54.0 From 3fa17b9385647c72c4c26a07c3bc02e057bf6061 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 10:34:05 +0200 Subject: [PATCH 14/81] Model validation: the rigid-body engines on every card in turn, even where this card has room for all The engines past this card's first now go one card after the other, from the next card and this one last, each within half of its own budget, as MR's do. Before, this card took every extra engine it had room for and the other cards only the rest, so a small cell on four cards ran all its fits on one. Where this card has no room for a second engine (a large cell on 15.6 GB cards) the plan is unchanged: 1/3/3/3. This card's scale fits take the room its engines leave. Engines are interchangeable and deterministic, so only where fits run changes. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../structure_refinement/ModelValidation.cpp | 35 ++++++++++--------- .../structure_refinement/ModelValidation.h | 9 ++--- tests/ModelValidationTest.cpp | 12 +++++++ 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/image_analysis/structure_refinement/ModelValidation.cpp b/image_analysis/structure_refinement/ModelValidation.cpp index 7be413fe1..5556c7532 100644 --- a/image_analysis/structure_refinement/ModelValidation.cpp +++ b/image_analysis/structure_refinement/ModelValidation.cpp @@ -1909,30 +1909,33 @@ ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need plan.null_structure_factors = take(need.null_structure_factors, plan.budget); plan.scale_fit_engines = need.scale_fit_engines > 0 && take(need.scale_fit, plan.budget) ? 1 : 0; - // More engines only within half of the budget (see the declaration). + // More engines only within half of the budget (see the declaration). The rigid body's past this card's first go + // one card after the other in turn, from the next card and this one last, so that the fits run on every card + // even where this one alone has room for them all. const auto room = [&](size_t budget) { return std::min(budget / 2, budget > need.beside ? budget - need.beside : 0); }; - while (plan.rigid_body_engines > 0 && plan.rigid_body_engines < need.rigid_body_engines - && take(need.rigid_body, room(plan.budget))) - plan.rigid_body_engines++; - while (plan.scale_fit_engines > 0 && plan.scale_fit_engines < need.scale_fit_engines - && take(need.scale_fit, room(plan.budget))) - plan.scale_fit_engines++; - - // The rigid-body engines this card has no room for, on the other cards in turn. plan.rigid_body_per_card.assign(1 + need.other_cards.size(), 0); plan.rigid_body_per_card[0] = plan.rigid_body_engines; std::vector held(plan.rigid_body_per_card.size(), 0); - held[0] = plan.bytes; for (bool added = plan.rigid_body_engines > 0; added;) { added = false; - for (size_t k = 1; k < held.size() && plan.rigid_body_engines < need.rigid_body_engines; k++) - if (held[k] + need.rigid_body <= room(ModelGPUBudget(need.other_cards[k - 1], need.resident))) { + for (size_t i = 1; i <= held.size() && plan.rigid_body_engines < need.rigid_body_engines; i++) { + const size_t k = i % held.size(); // this card last in each turn + const bool fits = k == 0 ? take(need.rigid_body, room(plan.budget)) + : held[k] + need.rigid_body + <= room(ModelGPUBudget(need.other_cards[k - 1], need.resident)); + if (!fits) + continue; + if (k > 0) held[k] += need.rigid_body; - plan.rigid_body_per_card[k]++; - plan.rigid_body_engines++; - added = true; - } + plan.rigid_body_per_card[k]++; + plan.rigid_body_engines++; + added = true; + } } + while (plan.scale_fit_engines > 0 && plan.scale_fit_engines < need.scale_fit_engines + && take(need.scale_fit, room(plan.budget))) + plan.scale_fit_engines++; + held[0] = plan.bytes; plan.most_on_a_card = *std::max_element(held.begin(), held.end()); const size_t cards = held.size(); diff --git a/image_analysis/structure_refinement/ModelValidation.h b/image_analysis/structure_refinement/ModelValidation.h index eee350c03..3159c5d6d 100644 --- a/image_analysis/structure_refinement/ModelValidation.h +++ b/image_analysis/structure_refinement/ModelValidation.h @@ -329,10 +329,11 @@ size_t ModelGPUBudget(size_t card, size_t resident); // only within half of the budget, less what a validation beside holds: they change only how many fits // run at once, and buy little - on a large cell a fit already fills the card (measured on a 16 GB card: // 13.6 s with one rigid-body engine, 13.1 s with two, 12.6 s with five) - so the card keeps headroom -// rather than filling with them. Where this card has no room for all the rigid-body engines the -// validation can use, the rest go on the other cards, one card after the other in turn, each by the same -// rule against its own budget (80% of its total, less what is resident): this card's parts are decided as -// on a machine with this card alone, and how many cards there are changes only where fits run. A second +// rather than filling with them. The rigid-body engines past this card's first go one card after the other +// in turn, from the next card and this one last, each by the same rule against its own budget (80% of its +// total, less what is resident), so that the fits run on every card even where this one has room for them +// all; this card's other parts are decided as on a machine with this card alone (its scale fits in the room +// its engines leave), and how many cards there are changes only where fits run. A second // validation may run beside where twice the whole of this one's GPU parts, at every engine it can use, fits // the budgets of the cards together, and twice what this one holds on any card fits every card's budget. ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need); diff --git a/tests/ModelValidationTest.cpp b/tests/ModelValidationTest.cpp index 885728b16..44ad573f3 100644 --- a/tests/ModelValidationTest.cpp +++ b/tests/ModelValidationTest.cpp @@ -197,6 +197,18 @@ TEST_CASE("ModelValidation_GPUPlanEnginesOnOtherCards", "[ModelValidation]") { // One card alone: the plan as it was. CHECK(alone.rigid_body_per_card == std::vector{1}); CHECK(alone.most_on_a_card == alone.bytes); + + // Engines this card alone has room for still go on every card in turn: ten of 0.1 GB on four cards, from the + // next card and this one last. + need = LargeCellNeed(card); + need.other_cards = {card, card, card}; + need.rigid_body = 100000000; + const ModelValidationGPUPlan small = PlanModelValidationGPU(need); + CHECK(small.rigid_body_per_card == std::vector{3, 3, 2, 2}); + CHECK(small.rigid_body_engines == 10); + CHECK(small.scale_fit_engines == 4); + need.other_cards.clear(); + CHECK(PlanModelValidationGPU(need).rigid_body_per_card == std::vector{10}); } TEST_CASE("ModelValidation_GPUPlanPartThatDoesNotFitGoesToTheCPU", "[ModelValidation]") { -- 2.54.0 From 80f634b6413f58901715b72fd51e06207ccd327c Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 10:34:09 +0200 Subject: [PATCH 15/81] MR GPU: engines spread over the cards; the transform packed where it is expected faster Engine placement: the rigid-body engines past this card's first go one card after the other in turn, from the next card and this one last, each within half of its budget. A small cell on four cards (24 engines of 0.09 GB) had put all of them on this card, which has room for them, where rc176 spread them; now 6/6/6/6. A large cell on four 15.6 GB cards keeps T+1/T+2/T+2/T+2. Layout: packing was refused wherever it cost any card an engine, which kept 4nwv plain on four T4s although the packed rotation function on ONE card (15.1 s) already beat plain over four (18.5 s). Now the two layouts' plans are compared on a small cost model, decided once before the search from sizes and counts alone: seconds = rotation interpolations (orientations x reflections x operators) x s/interpolation / cards with a copy + rigid-body fits at once x engine GB x s/(fit GB) / engines Constants measured on 4nwv on Tesla T4 (17255 x 244183 x 4 interpolations): 75.8 s plain and 15.1 s packed on one card; rescoring + null 28.5 s with one engine and 11.6 s with seven, 9 fits of 2.10 GB, so 19.7 s shared among the engines. Packing must still keep the search, the scores and (where plain has it) the rigid body on the GPU, and the budget must hold both grids while the packed one is made. Expected on four T4s: packed T+1/T+1/T+1/T+1, 8.7 s against 21.8 s plain. One card is unchanged (the engines are the same either way, so packed). The layout line now logs both expected times and the search's size. Layout and engine count change where the work runs, never a number. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../MolecularReplacement.cpp | 101 +++++++++++++----- .../MolecularReplacement.h | 26 +++-- tests/MolecularReplacementTest.cpp | 100 +++++++++++++---- 3 files changed, 173 insertions(+), 54 deletions(-) diff --git a/image_analysis/structure_refinement/MolecularReplacement.cpp b/image_analysis/structure_refinement/MolecularReplacement.cpp index 7e5fdc3b1..9f7adaf6c 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.cpp +++ b/image_analysis/structure_refinement/MolecularReplacement.cpp @@ -2384,6 +2384,7 @@ MolecularReplacementResult search_model(const SearchModel &model, const std::vec return result; } const MolecularTransform &ft = *ft_made; + const std::vector sphere = UniformRotations(ROTATION_STEP_DEG); [[maybe_unused]] size_t transform_bytes = ft.Grid().data.size() * sizeof(std::complex); #ifdef JFJOCH_USE_CUDA // The rotation and translation functions on the GPU where the transform fits the budget (the plan's first @@ -2403,14 +2404,27 @@ MolecularReplacementResult search_model(const SearchModel &model, const std::vec need.rigid_body = size.rigid_body; need.rigid_body_engines = size.rigid_body_engines; need.structure_factors = size.structure_factors; + // The answer merge's rotation function, as search_merge() makes it. + const gemmi::UnitCell cell0(merges[0].cell); + const gemmi::SpaceGroup &sg0 = merges[0].space_group; + const size_t orientations = RotationAsu(sphere, CartesianPointGroup(sg0, cell0)).size(); + const size_t reflections = MakeSearchReflections(*merges[0].merged, cell0, sg0, result.d_min_search, + result.d_max_search).hkl.size(); + need.rotation_interpolations = static_cast(orientations) * static_cast(reflections) + * static_cast(sg0.operations().sym_ops.size()); const size_t packed_bytes = MolecularReplacementGPU::TransformBytes(ft, true); packed = PackMolecularTransformGPU(need, packed_bytes); sized[0] = std::async(std::launch::deferred, [size = std::move(size)]() mutable { return std::move(size); }); - logger.Info("Molecular replacement: the transform on the GPU {}{}", packed - ? fmt::format("packed, {} in place of {}", in_gb(packed_bytes), in_gb(transform_bytes)) - : fmt::format("plain, {} (packed, {}, does not fit beside the rest of the plan)", in_gb(transform_bytes), - in_gb(packed_bytes)), - other_budgets.empty() ? "" : ", the same in each copy on the other cards"); + MolecularReplacementGPUNeed with_packed = need; + with_packed.transform = packed_bytes; + const double s_plain = MolecularReplacementGPUSeconds(need, PlanMolecularReplacementGPU(need), false); + const double s_packed = MolecularReplacementGPUSeconds(with_packed, PlanMolecularReplacementGPU(with_packed), true); + logger.Info("Molecular replacement: the transform on the GPU {}{} - expected rotation function and rigid body " + "{:.1f} s packed, {:.1f} s plain ({} orientations x {} reflections)", + packed ? fmt::format("packed, {} in place of {}", in_gb(packed_bytes), in_gb(transform_bytes)) + : fmt::format("plain, {} (packed, {})", in_gb(transform_bytes), in_gb(packed_bytes)), + other_budgets.empty() ? "" : ", the same in each copy on the other cards", s_packed, s_plain, + orientations, reflections); try { gpu = std::make_unique(ft, packed); } catch (const JFJochException &e) { @@ -2432,7 +2446,6 @@ MolecularReplacementResult search_model(const SearchModel &model, const std::vec logger.Info("Molecular replacement: native Patterson's highest peak off the lattice {:.2f} of the origin at {:.3f} {:.3f} {:.3f}{}", result.tncs.height, result.tncs.vector.x, result.tncs.vector.y, result.tncs.vector.z, result.tncs.present ? " - tNCS" : ""); - const std::vector sphere = UniformRotations(ROTATION_STEP_DEG); ScoreEngines scorers; #ifdef JFJOCH_USE_CUDA // Each merge's rigid-body engines, reserved by its plan and kept until its choice is made (choose_in). @@ -3397,14 +3410,9 @@ MolecularReplacementGPUPlan PlanMolecularReplacementGPU(const MolecularReplaceme plan.search = take(need.transform, need.budget); plan.rigid_body_engines = need.rigid_body_engines > 0 && take(need.rigid_body, need.budget) ? 1 : 0; plan.structure_factors = take(need.structure_factors, need.budget); - // More engines only within half of the budget (see the declaration). - while (plan.rigid_body_engines > 0 && plan.rigid_body_engines < need.rigid_body_engines - && take(need.rigid_body, need.budget / 2)) - plan.rigid_body_engines++; - plan.room = need.budget - (plan.search ? need.transform : 0) - plan.rigid_body_engines * need.rigid_body; - plan.cards.push_back({plan.search, plan.rigid_body_engines, plan.room}); + plan.cards.push_back({plan.search, plan.rigid_body_engines, 0}); - // The other cards: a copy of the transform each, then the engines this card has no room for, in turn. + // The other cards: a copy of the transform each, within half of the card's budget. std::vector held; for (size_t budget : need.other_budgets) { MolecularReplacementGPUCard card; @@ -3412,34 +3420,71 @@ MolecularReplacementGPUPlan PlanMolecularReplacementGPU(const MolecularReplaceme held.push_back(card.transform ? need.transform : 0); plan.cards.push_back(card); } + // More engines one card after the other in turn, from the card after this one, each within half of its budget + // (see the declaration): the fits run side by side on as many cards as there are, however much room this one has. for (bool added = plan.rigid_body_engines > 0; added;) { added = false; - for (size_t k = 0; k < held.size() && plan.rigid_body_engines < need.rigid_body_engines; k++) - if (held[k] + need.rigid_body <= need.other_budgets[k] / 2) { - held[k] += need.rigid_body; - plan.cards[k + 1].rigid_body_engines++; - plan.rigid_body_engines++; - added = true; - } + for (size_t i = 1; i <= held.size() + 1 && plan.rigid_body_engines < need.rigid_body_engines; i++) { + const size_t k = i % (held.size() + 1); // this card last in each turn + const bool fits = k == 0 ? take(need.rigid_body, need.budget / 2) + : held[k - 1] + need.rigid_body <= need.other_budgets[k - 1] / 2; + if (!fits) + continue; + if (k > 0) + held[k - 1] += need.rigid_body; + plan.cards[k].rigid_body_engines++; + plan.rigid_body_engines++; + added = true; + } } + plan.room = need.budget - (plan.search ? need.transform : 0) - plan.cards[0].rigid_body_engines * need.rigid_body; + plan.cards[0].room = plan.room; for (size_t k = 0; k < held.size(); k++) plan.cards[k + 1].room = need.other_budgets[k] - held[k]; return plan; } +namespace { + +// The cost model of the transform's layout (MolecularReplacementGPUSeconds), measured on 4nwv on Tesla T4 cards: +// - the rotation function, 17255 orientations x 244183 reflections x 4 operators, took 75.8 s plain and 15.1 s +// packed on one card; +// - rescoring and the null took 28.5 s with one rigid-body engine and 11.6 s with seven, nine fits at once of +// 2.10 GB engines: 19.7 s of it is shared among the engines (a + b / engines). +constexpr double ROTATION_SECONDS_PLAIN = 75.8 / (17255.0 * 244183.0 * 4.0); // per interpolation +constexpr double ROTATION_SECONDS_PACKED = 15.1 / (17255.0 * 244183.0 * 4.0); +constexpr double RIGID_BODY_SECONDS = 19.7 / (9 * 2.101); // per fit and engine GB + +} // namespace + +double MolecularReplacementGPUSeconds(const MolecularReplacementGPUNeed &need, const MolecularReplacementGPUPlan &plan, + bool packed) { + const size_t cards = std::count_if(plan.cards.begin(), plan.cards.end(), + [](const MolecularReplacementGPUCard &c) { return c.transform; }); + if (cards == 0) + return INFINITY; + const double rotation = (packed ? ROTATION_SECONDS_PACKED : ROTATION_SECONDS_PLAIN) * need.rotation_interpolations + / static_cast(cards); + const size_t engines = std::min(plan.rigid_body_engines, need.rigid_body_engines); + if (engines == 0) + return rotation; // the rigid body on the CPU + const double rigid_body = RIGID_BODY_SECONDS * (need.rigid_body / 1e9) * static_cast(need.rigid_body_engines) + / static_cast(engines); + return rotation + rigid_body; +} + bool PackMolecularTransformGPU(const MolecularReplacementGPUNeed &need, size_t packed) { MolecularReplacementGPUNeed with_packed = need; with_packed.transform = packed; const MolecularReplacementGPUPlan plain = PlanMolecularReplacementGPU(need); const MolecularReplacementGPUPlan plan = PlanMolecularReplacementGPU(with_packed); - bool same = plan.search && plan.rigid_body_engines == plain.rigid_body_engines - && plan.structure_factors == plain.structure_factors && need.transform + packed <= need.budget; - // Every other card keeps its copy and its engines. A copy is made after the card's engines are reserved, and - // the two within half of its budget leave room for the plain grid it is made from. - for (size_t k = 1; k < plan.cards.size(); k++) - same = same && plan.cards[k].transform == plain.cards[k].transform - && plan.cards[k].rigid_body_engines == plain.cards[k].rigid_body_engines; - return same; + // Packed only where it keeps the search and the scores on the GPU, and the rigid body where the plain plan has it + // there (a part on the CPU is not traded for speed), and where the budget holds both grids while the packed one + // is made from the plain one; then where the two layouts' expected seconds say so. + if (!plan.search || plan.structure_factors != plain.structure_factors + || (plan.rigid_body_engines == 0) != (plain.rigid_body_engines == 0) || need.transform + packed > need.budget) + return false; + return MolecularReplacementGPUSeconds(with_packed, plan, true) < MolecularReplacementGPUSeconds(need, plain, false); } #ifdef JFJOCH_USE_CUDA diff --git a/image_analysis/structure_refinement/MolecularReplacement.h b/image_analysis/structure_refinement/MolecularReplacement.h index f60ab15dc..31b6094c3 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.h +++ b/image_analysis/structure_refinement/MolecularReplacement.h @@ -387,6 +387,9 @@ struct MolecularReplacementGPUNeed { size_t rigid_body = 0; size_t rigid_body_engines = 0; // how many rigid-body fits can run at once size_t structure_factors = 0; // the largest score engine of the merge's placements + // The rotation function's transform reads, for the cost of the transform's layout: orientations x reflections x + // symmetry operators of the merge's search. + double rotation_interpolations = 0; }; // What a search puts on one card. @@ -416,15 +419,26 @@ struct MolecularReplacementGPUPlan { // the least recently used given up first - and the functions' working buffers share, each waiting for the other // to be done rather than spilling past it. This card is planned as on a machine with it alone; each other card // then takes, within half of its own budget, a copy of the transform - the rotation and translation functions' -// orientations are split over the cards that hold one, each scored as on one card - and, one card after the -// other in turn, the rigid-body engines this card has no room for. How many cards there are changes only -// where the work runs, never a number. +// orientations are split over the cards that hold one, each scored as on one card. The rigid-body engines past this +// card's first go one card after the other in turn, from the next card and this one last, each within half of its +// budget, so that the fits run on every card even where this one alone has room for them all. How many cards there +// are changes only where the work runs, never a number. MolecularReplacementGPUPlan PlanMolecularReplacementGPU(const MolecularReplacementGPUNeed &need); +// The expected seconds of the GPU work the transform's layout changes, for `plan` made from `need`: the rotation +// function's need.rotation_interpolations, split over the cards with a copy of the transform, plus the rigid-body +// fits - need.rigid_body_engines at once, each costing as its engine's bytes - shared among the plan's engines. The +// rest of the search is the same in either layout. Constants measured on Tesla T4 cards; infinite where the search +// is not on the GPU, and without the rigid body where it is on the CPU. +double MolecularReplacementGPUSeconds(const MolecularReplacementGPUNeed &need, const MolecularReplacementGPUPlan &plan, + bool packed); + // Whether the molecular transform goes on the GPU packed (MolecularReplacementGPU), `packed` bytes in place of -// the plain one's need.transform, on this card and in every copy on the other cards: where the plan with it holds -// every part the plain plan holds on every card, and the budget both grids while the packed one is made from the -// plain one. +// the plain one's need.transform, on this card and in every copy on the other cards: where the plan with it keeps +// the search, the scores and the rigid body on the GPU as the plain plan does, the budget holds both grids while +// the packed one is made from the plain one, and its expected seconds (MolecularReplacementGPUSeconds) are fewer - +// the faster rotation function against what the copies and engines it costs on the cards take. Decided on sizes and +// counts alone, never on free memory. bool PackMolecularTransformGPU(const MolecularReplacementGPUNeed &need, size_t packed); // Search `merges` (the answer's first) for the predicted model at `model_path`, in every space group with diff --git a/tests/MolecularReplacementTest.cpp b/tests/MolecularReplacementTest.cpp index a131efd74..e23d96d4f 100644 --- a/tests/MolecularReplacementTest.cpp +++ b/tests/MolecularReplacementTest.cpp @@ -156,14 +156,16 @@ TEST_CASE("MolecularReplacement_GPUPlanOnOtherCards", "[MolecularReplacement]") CHECK(plan.cards[k].room == need.budget - need.transform - 2 * need.rigid_body); } CHECK(plan.rigid_body_engines == 7); - // No more engines than the search can use: with 64 GB cards this card alone takes all nine. + // No more engines than the search can use: with 64 GB cards, where this card alone has room for all nine, they + // still go to both cards in turn after this one's first. need = LargeCellNeed(64 * GB); need.other_budgets = {need.budget}; const MolecularReplacementGPUPlan large = PlanMolecularReplacementGPU(need); CHECK(large.rigid_body_engines == 9); - CHECK(large.cards[0].rigid_body_engines == 9); - CHECK(large.cards[1].rigid_body_engines == 0); + CHECK(large.cards[0].rigid_body_engines == 5); + CHECK(large.cards[1].rigid_body_engines == 4); CHECK(large.cards[1].transform); + CHECK(large.room == need.budget - need.transform - 5 * need.rigid_body); // A search on the CPU puts nothing on the other cards either. need = LargeCellNeed(card); need.transform = need.budget + 1; @@ -201,26 +203,84 @@ TEST_CASE("MolecularReplacement_GPUPlanPartThatDoesNotFitGoesToTheCPU", "[Molecu CHECK(plan.room == 0); } -TEST_CASE("MolecularReplacement_GPUPackedTransformWhereThePlanHoldsAsMuch", "[MolecularReplacement]") { - // The large cell's transform packed, 2.28 GB: beside one rigid-body engine and a score engine on a 16 GB - // and on an 8 GB card, but on a 6 GB card the score engine would no longer fit. +TEST_CASE("MolecularReplacement_GPUSmallEnginesSpreadOverTheCards", "[MolecularReplacement]") { + // A small cell's search on four 15.6 GB cards: 24 fits at once of 0.09 GB engines, which this card alone has + // room for. They go six to a card, in turn from the next card - the fits run on all four. + MolecularReplacementGPUNeed need; + need.budget = 12480000000; + need.other_budgets = {need.budget, need.budget, need.budget}; + need.transform = 10000000; + need.rigid_body = 90000000; + need.rigid_body_engines = 24; + need.structure_factors = 50000000; + const MolecularReplacementGPUPlan plan = PlanMolecularReplacementGPU(need); + REQUIRE(plan.cards.size() == 4); + CHECK(plan.rigid_body_engines == 24); + for (const MolecularReplacementGPUCard &c : plan.cards) { + CHECK(c.transform); + CHECK(c.rigid_body_engines == 6); + } + CHECK(plan.room == need.budget - need.transform - 6 * need.rigid_body); + CHECK(plan.bytes == need.transform + 6 * need.rigid_body + need.structure_factors); + // One card: all 24 on it, as before. + need.other_budgets.clear(); + CHECK(PlanMolecularReplacementGPU(need).rigid_body_engines == 24); +} + +TEST_CASE("MolecularReplacement_GPUPackedTransformWhereItIsExpectedFaster", "[MolecularReplacement]") { + // The large cell's transform packed, 2.28 GB, and its rotation function: 17255 orientations x 244183 + // reflections x 4 operators, the search the constants were measured on. const size_t packed = 2276000000; - CHECK(PackMolecularTransformGPU(LargeCellNeed(16 * GB), packed)); - CHECK(PackMolecularTransformGPU(LargeCellNeed(8 * GB), packed)); - CHECK(!PackMolecularTransformGPU(LargeCellNeed(6 * GB), packed)); - // On 24 GB the plain transform leaves room for a third rigid-body engine within half the budget; packed, - // it would not. - CHECK(PlanMolecularReplacementGPU(LargeCellNeed(24 * GB)).rigid_body_engines == 3); - CHECK(!PackMolecularTransformGPU(LargeCellNeed(24 * GB), packed)); - // Four cards of 15.6 GB: packed, each other card's copy would leave room for one engine in place of two. - MolecularReplacementGPUNeed four = LargeCellNeed(15600000000); - four.other_budgets = {four.budget, four.budget, four.budget}; - CHECK(!PackMolecularTransformGPU(four, packed)); - // With 24 GB cards beside it, every copy keeps its engines (the nine the search can use): packed. - four.other_budgets.assign(3, LargeCellNeed(24 * GB).budget); + const double large_search = 17255.0 * 244183.0 * 4.0; + auto need_on = [&](size_t card, size_t others, double interpolations) { + MolecularReplacementGPUNeed need = LargeCellNeed(card); + need.other_budgets.assign(others, need.budget); + need.rotation_interpolations = interpolations; + return need; + }; + // One card, where packing keeps the plan's engines: 75.8 s of rotation function down to 15.1 s, packed. + MolecularReplacementGPUNeed one = need_on(15600000000, 0, large_search); + const MolecularReplacementGPUPlan one_plan = PlanMolecularReplacementGPU(one); + CHECK(MolecularReplacementGPUSeconds(one, one_plan, false) == Catch::Approx(75.8 + 19.7).epsilon(1e-6)); + CHECK(PackMolecularTransformGPU(one, packed)); + CHECK(PackMolecularTransformGPU(need_on(8 * GB, 0, large_search), packed)); + // On a 6 GB card the score engine would no longer fit beside it: plain, however fast packing would be. + CHECK(!PackMolecularTransformGPU(need_on(6 * GB, 0, large_search), packed)); + + // Four 15.6 GB cards: packed, each copy leaves room for one engine in place of two (4 engines, not 7), but the + // rotation function over four cards goes from about 19 s to about 4 s, more than the engines cost. + MolecularReplacementGPUNeed four = need_on(15600000000, 3, large_search); + MolecularReplacementGPUNeed four_packed = four; + four_packed.transform = packed; + const MolecularReplacementGPUPlan plain_plan = PlanMolecularReplacementGPU(four); + const MolecularReplacementGPUPlan packed_plan = PlanMolecularReplacementGPU(four_packed); + CHECK(plain_plan.rigid_body_engines == 7); + CHECK(packed_plan.rigid_body_engines == 4); + const double plain_s = MolecularReplacementGPUSeconds(four, plain_plan, false); + const double packed_s = MolecularReplacementGPUSeconds(four_packed, packed_plan, true); + CAPTURE(plain_s, packed_s); + CHECK(plain_s == Catch::Approx(75.8 / 4 + 19.7 / 7).epsilon(1e-6)); + CHECK(packed_s == Catch::Approx(15.1 / 4 + 19.7 / 4).epsilon(1e-6)); CHECK(PackMolecularTransformGPU(four, packed)); + // A search a hundred times smaller with the same engines: the rotation function no longer pays for them. + CHECK(!PackMolecularTransformGPU(need_on(15600000000, 3, large_search / 100), packed)); + // On one 24 GB card, the same: packed holds two engines in place of three. + CHECK(PackMolecularTransformGPU(need_on(24 * GB, 0, large_search), packed)); + CHECK(!PackMolecularTransformGPU(need_on(24 * GB, 0, large_search / 100), packed)); + + // The rigid body on the CPU in both layouts: decided on the rotation function alone. + MolecularReplacementGPUNeed no_rigid_body = need_on(15600000000, 3, large_search / 100); + no_rigid_body.rigid_body = 0; + CHECK(PackMolecularTransformGPU(no_rigid_body, packed)); + // Where packing would put the rigid body on the CPU, plain: a budget just short of the packed transform and an + // engine (the scores on the CPU in both). + MolecularReplacementGPUNeed tight = need_on(15600000000, 0, large_search); + tight.structure_factors = 0; + tight.budget = packed + tight.rigid_body - 1; + CHECK(PlanMolecularReplacementGPU(tight).rigid_body_engines == 1); + CHECK(!PackMolecularTransformGPU(tight, packed)); // No budget: nothing on the GPU, so nothing packed. - MolecularReplacementGPUNeed none = LargeCellNeed(16 * GB); + MolecularReplacementGPUNeed none = need_on(16 * GB, 0, large_search); none.budget = 0; CHECK(!PackMolecularTransformGPU(none, packed)); } -- 2.54.0 From e2bc7a38707e9926e6075f233375d16ddfd2a747 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 10:45:04 +0200 Subject: [PATCH 16/81] Rotation scaling: the fulls and the merge's working arrays go with each arm, and are really freed ReleaseMergeScratch and ReleaseAllButPerFrameScale assigned `= {}` to std::vector members, which is the initializer-list assignment: it empties a vector and keeps its memory, so only the struct-typed members were ever handed back. They now free (Free(v): v = T()). And every RunArm hands back the fulls, their staging and group CSR and the merge's working arrays when it returns - each is rebuilt before it is read - instead of keeping them beside the next arm's combine and through the analyses: 4nwv on the CPU at 12 threads, live peak in scaling 13.0 -> 11.9 GiB, in the analyses 11.7 -> 7.3. Output unchanged. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../scale_merge/RotationScaleMerge.cpp | 11 +++- .../scale_merge/RotationScaleMerge.h | 64 ++++++++++--------- 2 files changed, 44 insertions(+), 31 deletions(-) diff --git a/image_analysis/scale_merge/RotationScaleMerge.cpp b/image_analysis/scale_merge/RotationScaleMerge.cpp index 120dc0753..8610dfc36 100644 --- a/image_analysis/scale_merge/RotationScaleMerge.cpp +++ b/image_analysis/scale_merge/RotationScaleMerge.cpp @@ -6912,7 +6912,7 @@ RotationScaleMerge::Result RotationScaleMerge::RunArm(bool scale_partials, bool // to grow they are freed first: growing in place would copy the previous chain's records into // the new allocation only for the gather to overwrite them. if (static_cast(nf) > fulls.capacity()) { - fulls = {}; + Free(fulls); fulls_staging = {}; } fulls.resize(nf); @@ -7161,5 +7161,14 @@ RotationScaleMerge::Result RotationScaleMerge::RunArm(bool scale_partials, bool // its CC1/2 is the answer without a second merge. A caller that did not ask keeps the NaN. if (measure_cc_before_corrections) r.cc_half_before_corrections = cc_half_before_corrections.value_or(r.statistics.overall.cc_half); + // The fulls and the merge's working arrays are rebuilt by every arm before they are read, so they go + // with it: kept, they sat beside the next arm's combine and through everything the caller did between + // merges - on a large cell in P1, the fulls and about 330 bytes per ASU group, gigabytes. Faulting them + // in again costs each arm a fraction of a second. + ReleaseMergeScratch(); + Free(fulls); + Free(fulls_staging); + Free(fulls_group_start); + Free(fulls_group_perm); return r; } diff --git a/image_analysis/scale_merge/RotationScaleMerge.h b/image_analysis/scale_merge/RotationScaleMerge.h index b5b90147c..fb3ad61cb 100644 --- a/image_analysis/scale_merge/RotationScaleMerge.h +++ b/image_analysis/scale_merge/RotationScaleMerge.h @@ -186,27 +186,31 @@ public: // beside others with it off, at the point where it would have run in series. void WriteBackPerFrameScale() { FinalizePerFrameScale(last_cc, last_cc_n, last_frame_scaled); } + // Hands an array (or a struct of them) back to the allocator. `v = {}` would not: on a std::vector it + // is the initializer-list assignment, which empties the vector and keeps its memory. + template static void Free(T &v) { v = T(); } + // Hand back the merge's working arrays - MergeAndStats' accumulators, R_meas sums, ISa scatter, // error-model pools and per-full fields. Each is resized and refilled before it is read, so the // next merge starts from them as an engine's first merge does, and gives the same answer. On a // large cell in P1 they are gigabytes, kept between merges only to save faulting them in again; // this is for a gap between merges where something else sits on the run's memory peak. void ReleaseMergeScratch() { - merge_fields = {}; - merge_acc = {}; - merge_accum = {}; - merge_merged_I = {}; - merge_rejected = {}; - merge_half_set = {}; - merge_obs_key = {}; - merge_wobs = {}; - merge_rmeas = {}; - merge_rmeas_staging = {}; - asymptote_scatter = {}; - em_samples = {}; - em_cut_pool = {}; - em_fit_pool = {}; - em_chi2 = {}; + Free(merge_fields); + Free(merge_acc); + Free(merge_accum); + Free(merge_merged_I); + Free(merge_rejected); + Free(merge_half_set); + Free(merge_obs_key); + Free(merge_wobs); + Free(merge_rmeas); + Free(merge_rmeas_staging); + Free(asymptote_scatter); + Free(em_samples); + Free(em_cut_pool); + Free(em_fit_pool); + Free(em_chi2); } // For an engine that will not merge again: everything on the host but the per-frame state @@ -214,21 +218,21 @@ public: // last_cc_n, last_frame_scaled). Its card memory goes with the engine. void ReleaseAllButPerFrameScale() { ReleaseMergeScratch(); - partials = {}; - fulls = {}; - fulls_staging = {}; - fulls_group_start = {}; - fulls_group_perm = {}; - perm = {}; - rawrun_start = {}; - rawrun_count = {}; - rawrun_h = {}; - rawrun_k = {}; - rawrun_l = {}; - rawrun_d = {}; - rawrun_group = {}; - finite_ok = {}; - corr_ingested = {}; + Free(partials); + Free(fulls); + Free(fulls_staging); + Free(fulls_group_start); + Free(fulls_group_perm); + Free(perm); + Free(rawrun_start); + Free(rawrun_count); + Free(rawrun_h); + Free(rawrun_k); + Free(rawrun_l); + Free(rawrun_d); + Free(rawrun_group); + Free(finite_ok); + Free(corr_ingested); obs_position.reset(); } -- 2.54.0 From 210664f45453a02d30c4b6098bec2a6637459c2c Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 10:48:36 +0200 Subject: [PATCH 17/81] Model scale fit: no log ratio at |Fcalc| = 0, and no LM step once the model has underflowed Two ways the scale fit's normal matrix went singular and gemmi's jordan_solve threw "Trying to reverse singular matrix. Column 0 is zeroed.", ending the run: 1. The isotropic start (fit_isotropic_b_approximately) takes log(Fobs/|Fcalc|) over the strong reflections. At a phase-restricted reflection whose Fcalc and Fmask share a phase, some solvent pair of the k_sol/b_sol grid can cancel the model exactly in float, |Fcalc + k_sol exp(-b_sol s^2) Fmask| = 0. log(Fobs/0) = inf made that grid point's k_overall and B NaN, every sum of the Levenberg-Marquardt NaN, and the solve failed. This is what stopped three open-arm sets in the output pass after MR on the GPU (the scale fit after model validation's rigid body): one strong reflection, one grid point. The CPU path has the same exposure; which grid point hits an exact zero depends on the last bits of Fcalc, so the --no-gpu run of the same set went through. Such a reflection has no log ratio and is now left out of the start - in the GPU kernel, in FixedSolventFit::Start and, as a marked local change, in gemmi's own fit_isotropic_b_approximately, so the three stay equal and the held-solvent fits are covered too. 2. In FitModelScale's CPU Levenberg-Marquardt (ModelValidation_CCModelUnrelatedModelConfirmsNothing in a CUDA=OFF build): on 66 reflections of an unrelated model the fit walked to k_overall -424 and a B where k exp(-B s^2) |F| underflows at every reflection; the squares in J^T J were all 0 while J^T r kept a residue near 1e-210, which jordan_solve rejects. The fit now ends there, at its best so far, as it would at the lambda limit; that grid point then loses on R. The GPU fit takes the derivatives in float and their squares in double, so it cannot reach this state. Both changes only touch fits that threw before. Byte identity checked against an rc176 build on the standard and inhouse timing benchmarks and on 4nwv, 8tyy, 6oel (p.hkl, p_model.pdb, MTZ data, MR_* report keys). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- gemmi_gph/gemmi/scaling.hpp | 5 +++ .../structure_refinement/ModelScaleGPU.cu | 3 +- .../structure_refinement/ModelScaling.cpp | 7 ++++ tests/ModelScaleGPUTest.cpp | 20 +++++++++++ tests/ModelScalingTest.cpp | 33 +++++++++++++++++++ 5 files changed, 67 insertions(+), 1 deletion(-) diff --git a/gemmi_gph/gemmi/scaling.hpp b/gemmi_gph/gemmi/scaling.hpp index 630774c0b..519cec6e7 100644 --- a/gemmi_gph/gemmi/scaling.hpp +++ b/gemmi_gph/gemmi/scaling.hpp @@ -232,6 +232,11 @@ struct Scaling { if (p.fobs < 1 || p.fobs < p.sigma) // skip weak reflections continue; double fcalc = std::abs(get_fcalc(p)); + // Local change (upstream fits it): a reflection where the solvent exactly cancels the model, + // |Fcalc| = 0 in float, has no log ratio - its log(Fobs/0) = inf made k_overall and B NaN, + // and the solver that starts from them failed on a singular matrix. + if (fcalc == 0) + continue; double x = p.stol2; double y = std::log(static_cast(p.fobs / fcalc)); sx += x; diff --git a/image_analysis/structure_refinement/ModelScaleGPU.cu b/image_analysis/structure_refinement/ModelScaleGPU.cu index d77e4a6ed..f26a72744 100644 --- a/image_analysis/structure_refinement/ModelScaleGPU.cu +++ b/image_analysis/structure_refinement/ModelScaleGPU.cu @@ -71,7 +71,8 @@ __global__ void scale_sums(const int *__restrict__ hkl, const double *__restrict const double fo = fobs[i]; if (f.mode == MODE_ISOTROPIC) { - if (!strong[i]) + // fit_isotropic_b_approximately() (local change in gemmi_gph): no log ratio at |F| = 0 + if (!strong[i] || f_abs == 0) continue; const double x = stol2[i]; const double y = logf(static_cast(fo / f_abs)); diff --git a/image_analysis/structure_refinement/ModelScaling.cpp b/image_analysis/structure_refinement/ModelScaling.cpp index d7b941c5a..6a099189b 100644 --- a/image_analysis/structure_refinement/ModelScaling.cpp +++ b/image_analysis/structure_refinement/ModelScaling.cpp @@ -65,6 +65,8 @@ struct FixedSolventFit { if (p.fobs < 1 || p.fobs < p.sigma) // skip weak reflections continue; double fcalc_abs = points[i].fcalc_abs; + if (fcalc_abs == 0) // local change in gemmi_gph: no log ratio + continue; double x = p.stol2; double y = std::log(static_cast(p.fobs / fcalc_abs)); sx += x; @@ -228,6 +230,11 @@ void LevMarFit(FixedSolventFit &target) { for (;;) { if (eval_limit > 0 && eval_count >= eval_limit) break; + // Not in gemmi: a fit that has walked to where k_overall exp(-B s^2) |F| underflows at every + // reflection has no step left to take - the squares in alpha are all 0 while beta keeps a + // residue near 1e-210, and jordan_solve() throws on that. It ends here, at its best so far. + if (alpha[0] == 0) + break; // prepare next parameters -> temp_beta std::copy(alpha, alpha + NA * NA, temp_alpha); diff --git a/tests/ModelScaleGPUTest.cpp b/tests/ModelScaleGPUTest.cpp index 86c167f83..67a52067f 100644 --- a/tests/ModelScaleGPUTest.cpp +++ b/tests/ModelScaleGPUTest.cpp @@ -382,4 +382,24 @@ TEST_CASE("ModelScaleGPUPool_MatchesFitModelScale", "[ModelValidation][gpu]") { } } +// ModelScaling fits past a reflection the solvent cancels exactly (ModelScalingTest.cpp), on the card. +TEST_CASE("ModelScaleGPUPool_FitsPastAReflectionTheSolventCancelsExactly", "[ModelValidation][gpu]") { + if (get_gpu_count() == 0) + SKIP("No GPU"); + gemmi::UnitCell cell(72, 44, 51, 90, 112, 90); + gemmi::Scaling scaling = MakeScaling(cell, *gemmi::find_spacegroup_by_name("C 1 2 1"), 2.5); + // exp(-b_sol s^2) = 1 at s = 0, so at the grid's k_sol = 0.10 the sum is -0.1f + 0.1f = 0 for every b_sol + auto &p = *std::find_if(scaling.points.begin(), scaling.points.end(), + [](const auto &q) { return q.fobs >= 1 && q.fobs >= q.sigma; }); + p.stol2 = 0; + p.fcmol = {-0.1f, 0.f}; + p.fmask = {1.f, 0.f}; + + ModelScaleGPUPool pool(0, scaling.points.size(), 1); + ModelScaleReport report; + REQUIRE_NOTHROW(report = pool.Fit(scaling, 80.0, 2)); + CHECK(std::isfinite(report.r_work_fit)); + CHECK(std::isfinite(scaling.k_overall)); +} + #endif diff --git a/tests/ModelScalingTest.cpp b/tests/ModelScalingTest.cpp index b5b5247f7..3898b033d 100644 --- a/tests/ModelScalingTest.cpp +++ b/tests/ModelScalingTest.cpp @@ -271,3 +271,36 @@ TEST_CASE("ModelScaling fits a grid point exactly as gemmi's Scaling does") { CHECK(ours.calculate_r_factor() == gemmis.calculate_r_factor()); } } + +// A reflection where the solvent term cancels the model exactly - |Fcalc + k_sol exp(-b_sol s^2) Fmask| = 0 +// in float - at some grid points. Its log(Fobs/|Fcalc|) was inf, which made the starting scale there NaN and +// the solver fail on a singular matrix. It has no log ratio, so the starting fit leaves it out. +TEST_CASE("ModelScaling fits past a reflection the solvent cancels exactly") { + const gemmi::UnitCell cell = Cell(); + const gemmi::SpaceGroup *sg = gemmi::find_spacegroup_by_name("P 21 21 21"); + REQUIRE(sg != nullptr); + gemmi::Scaling scaling(cell, sg); + scaling.use_solvent = true; + MakePoints(scaling, cell, /*k_overall=*/0.5, /*b_iso=*/20.0, + /*k_sol=*/0.35, /*b_sol=*/45.0, /*d_min=*/2.0, /*d_max=*/50.0); + // exp(-b_sol s^2) = 1 at s = 0, so at the grid's k_sol = 0.10 the sum is -0.1f + 0.1f = 0 for every b_sol + auto &p = scaling.points[0]; + p.stol2 = 0; + p.fcmol = {-0.1f, 0.f}; + p.fmask = {1.f, 0.f}; + REQUIRE(p.fobs >= 1); + + gemmi::Scaling gemmis = scaling; + ModelScaleReport report; + REQUIRE_NOTHROW(report = FitModelScale(scaling)); + CHECK(std::isfinite(report.r_work_fit)); + + gemmis.fix_k_sol = true; + gemmis.fix_b_sol = true; + gemmis.k_sol = 0.10; + gemmis.b_sol = 10.0; + REQUIRE(std::abs(gemmis.get_fcalc(gemmis.points[0])) == 0); + gemmis.fit_isotropic_b_approximately(); + CHECK(std::isfinite(gemmis.k_overall)); + REQUIRE_NOTHROW(gemmis.fit_parameters()); +} -- 2.54.0 From a0a9a4b99cb8855e549c8f10bb30c1152bfe8ed0 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 11:44:26 +0200 Subject: [PATCH 18/81] battery.py: macOS core tiers from every perflevel (an M6 is 2S+4P+6E, not 2P+4E) Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_018My7tqt8a4LyKKjP3FhScT --- tools/battery/battery.py | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/tools/battery/battery.py b/tools/battery/battery.py index 0c1dc3934..fdac9f0c9 100644 --- a/tools/battery/battery.py +++ b/tools/battery/battery.py @@ -321,9 +321,15 @@ def macos_hardware(): if m: freq_ghz, freq_source = float(m.group(1)), "model name" cores = sysctl("hw.physicalcpu") - p_cores, e_cores = sysctl("hw.perflevel0.physicalcpu"), sysctl("hw.perflevel1.physicalcpu") - if p_cores and e_cores: - cores = f"{p_cores}P+{e_cores}E" + # Apple silicon has two or three core tiers (an M6: Super, Performance, Efficiency), each a perflevel + # with its own name, fastest first: written as e.g. 2S+4P+6E. + tiers = [] + for level in range(int(sysctl("hw.nperflevels") or 0)): + n, name = sysctl(f"hw.perflevel{level}.physicalcpu"), sysctl(f"hw.perflevel{level}.name") + if n and name: + tiers.append(f"{n}{name[0]}") + if len(tiers) > 1: + cores = "+".join(tiers) mem = sysctl("hw.memsize") return {"cpu_model": model or "unknown", "cpu_base_ghz": freq_ghz, "cpu_base_source": freq_source, "cpu_max_boost_ghz": None, "sockets": int(sysctl("hw.packages") or 1), "physical_cores": cores, -- 2.54.0 From e8e5c4aeccbffc2bae7952e912708f782c57db62 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 11:57:43 +0200 Subject: [PATCH 19/81] battery model check: a synthetic free set where the deposited structure factors carry none An entry refined in SHELXL often deposits its structure factors with every reflection 'o' and no pdbx_r_free_flag, so the depositor-data baseline was skipped and the set had no REFMAC ratio; the report then showed only the plain R_free ratio, REFMAC on our data against the depositors' SHELXL R-free, which is a comparison of programs. Such an entry now gets a 5% free set from a fixed hash of the asymmetric-unit hkl (order-independent, the same reflections free in both data sets and every run), and baseline_note - shown as refmac_reason - records that it is synthetic. On the 0.6 A Z-DNA entry of the open arm (7atg, the only such set in the last full run) the first-cycle REFMAC ratio is 1.067 (0.171 vs 0.160) and the refined shared-free-set ratio 1.084 (0.166 vs 0.153, 2629 shared free reflections), where the plain R_free ratio read 1.69. Entries with a deposited free set take the unchanged path. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- tools/battery/model_check.py | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/tools/battery/model_check.py b/tools/battery/model_check.py index 644130d6f..547b36241 100644 --- a/tools/battery/model_check.py +++ b/tools/battery/model_check.py @@ -39,6 +39,9 @@ On free sets: the depositor's model was refined against every reflection except so most of Rugnux's free reflections were work reflections to it. `rfree` (Rugnux's own flags) therefore reads like a work R. `rfree_depflags` (depositor's flags on Rugnux's data) is the number that is comparable with `rfree_depdata` and, loosely, with `rfree_deposited`. +Where the deposited structure factors mark no free set (SHELXL entries often do not), both data +sets are scored on a synthetic one instead (synthetic_free; `baseline_note` says so). Their model +was refined against those reflections too, so both numbers read like work Rs, but alike. model_check.py rugnux.mtz 1abc [--workdir DIR] [--cache DIR] [--no-baseline] """ @@ -62,6 +65,7 @@ MAX_ATOMS = 200000 # REFMAC time grows with atoms x reflections CELL_TOL = 0.05 # Niggli cells compared loosely on purpose; the R score decides ANGLE_TOL = 3.0 REFINE_CYCLES = 10 # restrained refinement of the shared-free-set protocol +SYNTHETIC_FREE = 0.05 # free fraction given to deposited structure factors that carry no free set # ------------------------------------------------------------------ deposition @@ -186,6 +190,18 @@ def hkl_key(hkl): return (h[:, 0] * 2048 + h[:, 1]) * 2048 + h[:, 2] +def synthetic_free(hkl): + """Free flags (0 free, 1 work) for deposited structure factors that carry no free set: a fixed + hash of the asymmetric-unit hkl (splitmix64), so the same reflection is free in every run and in + both data sets, independent of reflection order.""" + with np.errstate(over="ignore"): + x = hkl_key(hkl).astype(np.uint64) + np.uint64(0x9E3779B97F4A7C15) + x = (x ^ (x >> np.uint64(30))) * np.uint64(0xBF58476D1CE4E5B9) + x = (x ^ (x >> np.uint64(27))) * np.uint64(0x94D049BB133111EB) + x ^= x >> np.uint64(31) + return np.where(x < np.uint64(SYNTHETIC_FREE * 2.0 ** 64), 0, 1) + + def to_group(hkl, f, sigf, flags, cell, sg, src): """Reduce reflections to the asymmetric unit of sg; independent measurements of one reflection are averaged (1/sigma^2), copies of the same one (same `src`) are not. A reflection @@ -504,7 +520,9 @@ def depositor_data(pdb_id, cache_dir, workdir, cell_m, sg_m): mean of F(+)/F(-); where only intensities were deposited (I, else the mean of I(+)/I(-)) they are converted by French-Wilson. Free flags from _refln.status ('f' free), else from a numeric _refln.pdbx_r_free_flag (0 when it takes more than two values - the CCP4 convention - else the - minority value). Returns None, reason when there is nothing usable.""" + minority value). Where neither marks a free set (e.g. a SHELXL entry whose free set was not + deposited), a synthetic one is made by synthetic_free and noted. Returns None, reason when there + is nothing usable, else the data and a note (None, or what was synthesised).""" path = fetch(RCSB + pdb_id + "-sf.cif.gz", os.path.join(cache_dir, pdb_id + "-sf.cif.gz")) if path is None: return None, "no deposited structure factors" @@ -523,28 +541,31 @@ def depositor_data(pdb_id, cache_dir, workdir, cell_m, sg_m): f, s, kind = val status = np.array([x.strip("'\"") for x in b.block.find_values("_refln.status")]) \ if "status" in labels else np.array([]) + note = None + v = b.make_int_array("pdbx_r_free_flag", -1) if "pdbx_r_free_flag" in labels else None if len(status) == len(hkl) and np.any(status == "f"): use = (status == "f") | (status == "o") flags = np.where(status == "f", 0, 1) - elif "pdbx_r_free_flag" in labels: - v = b.make_int_array("pdbx_r_free_flag", -1) + elif v is not None and len(np.unique(v[v >= 0])) >= 2: vals, counts = np.unique(v[v >= 0], return_counts=True) - if len(vals) < 2: - return None, "deposited structure factors carry no free set" free = 0 if len(vals) > 2 and 0 in vals else vals[np.argmin(counts)] use = v >= 0 flags = np.where(v == free, 0, 1) else: - return None, "deposited structure factors carry no free set" + use = np.ones(len(hkl), bool) if len(status) != len(hkl) else (status == "o") + flags = np.ones(len(hkl), int) + note = f"deposited structure factors carry no free set: a synthetic {SYNTHETIC_FREE:.0%} one is used" use &= np.isfinite(f) & np.isfinite(s) & (s > 0) if not np.allclose(b.cell.parameters, cell_m.parameters, rtol=0.02, atol=0.5): return None, "deposited structure factors in another cell" hkl, f, s, flags = to_group(hkl[use], f[use], s[use], flags[use], cell_m, sg_m, np.arange(use.sum())) + if note: + flags = synthetic_free(hkl) if not amplitudes: hkl, f, s, flags = french_wilson(workdir, hkl, f, s, flags, cell_m, sg_m) kind += ", French-Wilson (ctruncate)" - return (make_mtz(hkl, f, s, flags, cell_m, sg_m), kind), None + return (make_mtz(hkl, f, s, flags, cell_m, sg_m), kind), note def declared_twin(xyz): -- 2.54.0 From 91f656395392c38eeb942b6a64c18bdb8223aa5a Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 12:10:35 +0200 Subject: [PATCH 20/81] END message: optional merged / map_coefficients / placed_model blocks Structured results of an analysis run inside the broker, for jfjoch_writer to turn into .mtz, _maps.mtz and _model.cif itself: the merged reflections and the map coefficients one typed array per MTZ column, the placed model one array per atom field (coordinates as float64). Each block is a nested CBOR map under its own optional END key; a reader that does not know a key skips it, as for every other END key, and unknown keys inside a block are skipped the same way. Space groups travel as gemmi's extended H-M name, which round-trips to the same table entry for all 564 settings. Co-Authored-By: Claude Opus 5.5 --- common/JFJochMessages.h | 59 ++++++++++ docs/CBOR.md | 3 + frame_serialize/CBORStream2Deserializer.cpp | 118 ++++++++++++++++++++ frame_serialize/CBORStream2Serializer.cpp | 86 ++++++++++++++ 4 files changed, 266 insertions(+) diff --git a/common/JFJochMessages.h b/common/JFJochMessages.h index dd68afaee..bcb4dcd1e 100644 --- a/common/JFJochMessages.h +++ b/common/JFJochMessages.h @@ -368,6 +368,59 @@ struct StartMessage { std::optional smargon_position; }; +// The merged reflections as rugnux writes them to .mtz (WriteMergedMtz, +// writer/WriteRugnuxFiles.h): one row per unique reflection in the CCP4 anomalous layout, one vector +// per MTZ column. The anomalous columns (i_plus ... sigma_f_minus) are all empty where the merge kept +// no Bijvoet split, and the file then has none. free_flag is the FreeR_flag value, 0 for the test set. +struct MergedReflectionsMessage { + UnitCell unit_cell; + std::string space_group_name; // gemmi xhm(): the name keeps the setting, a number does not + float wavelength_A = 0; + std::string crystal_name; + std::vector history; // the MTZ HISTORY records after the one naming the program + std::vector h, k, l; + std::vector i_mean, sigma_i_mean; + std::vector i_plus, sigma_i_plus, i_minus, sigma_i_minus; + std::vector f, sigma_f; + std::vector f_plus, sigma_f_plus, f_minus, sigma_f_minus; + std::vector free_flag; +}; + +// The sigma_A-weighted map coefficients rugnux writes to _maps.mtz (WriteMapCoefficientsMtz), +// one vector per MTZ column. Phases in degrees, [0, 360). free_flag is FREE: 0 for the test set. +struct MapCoefficientsMessage { + UnitCell unit_cell; + std::string space_group_name; + float wavelength_A = 0; + std::vector h, k, l; + std::vector fp, fc, phic, fwt, phwt, delfwt, phdelwt, fom; + std::vector free_flag; +}; + +// The atomic model as placed against the data, one vector per atom field in file order, for +// WritePlacedModel to write _model.cif. A new residue starts wherever the model, chain or +// residue key changes. unit_cell and space_group_name are what WritePlacedModel is given (the data's); +// model_space_group_name is the group the coordinates were built in. +struct PlacedModelMessage { + std::string name; + UnitCell unit_cell; + std::string space_group_name; + std::string model_space_group_name; + std::vector model_number; + std::vector chain; + std::vector residue_name; + std::vector seq_num; + std::vector icode; // ' ' where there is none + std::vector het_flag; // 'A', 'H', or 0 where unknown + std::vector atom_name; + std::vector element; + std::vector altloc; // 0 where there is none + std::vector charge; + std::vector x, y, z; + std::vector b_iso, occupancy; + std::vector aniso; // 6 per atom (u11 u22 u33 u12 u13 u23), empty when none has one +}; + struct EndMessage { // The sample transformation chain, base first (see DetectorTransformation). Optional: when it is // empty the writer builds the same chain itself from the start message, so a producer that does @@ -481,6 +534,12 @@ struct EndMessage { // this says what was DONE about it. Offline (rugnux) only; the broker does not merge. std::vector frame_disposition; std::vector frame_disposition_codes; + + // The merged result of an analysis run inside the broker, for the writer to put beside the master + // file as .mtz, _maps.mtz and _model.cif. Absent where nothing was merged. + std::optional merged; + std::optional map_coefficients; + std::optional placed_model; }; struct MetadataMessage { diff --git a/docs/CBOR.md b/docs/CBOR.md index 9bcb8c441..b3e2e4b33 100644 --- a/docs/CBOR.md +++ b/docs/CBOR.md @@ -342,6 +342,9 @@ See [DECTRIS documentation](https://github.com/dectris/documentation/tree/main/s | pixel_sum | Array(int64) | Per-image sum of all valid pixels, excluding error/saturated pixels | | | image_scale_mosaicity | Array(float) | Scaling result: Image scale mosaicity \[deg\] | | | image_scale_cc | Array(float) | Scaling result: Image scale CC | | +| merged | object (optional) | Merged reflections of an in-broker analysis run, written by the writer as `.mtz`. `unit_cell`, `space_group_name` (gemmi extended H-M), `wavelength`, `crystal_name`, `history` (Array(string), MTZ HISTORY records), then one typed array per MTZ column: `h`, `k`, `l` (int32), `i_mean`, `sigma_i_mean`, `i_plus`, `sigma_i_plus`, `i_minus`, `sigma_i_minus`, `f`, `sigma_f`, `f_plus`, `sigma_f_plus`, `f_minus`, `sigma_f_minus` (float; the eight anomalous arrays empty where there is no Bijvoet split), `free_flag` (uint8, 0 = test set) | | +| map_coefficients | object (optional) | Map coefficients, written as `_maps.mtz`. `unit_cell`, `space_group_name`, `wavelength`, then `h`, `k`, `l` (int32), `fp`, `fc`, `phic`, `fwt`, `phwt`, `delfwt`, `phdelwt` (phases in degrees), `fom` (float), `free_flag` (uint8, 0 = test set) | | +| placed_model | object (optional) | Atomic model placed against the data, written as `_model.cif` (and `_model.pdb`). `name`, `unit_cell`, `space_group_name` (the data's), `model_space_group_name` (the coordinates'), then one array per atom: `model_number`, `seq_num`, `charge` (int32), `chain`, `residue_name`, `atom_name`, `element` (Array(string)), `icode`, `het_flag`, `altloc` (uint8), `x`, `y`, `z` (double, Angstrom), `b_iso`, `occupancy` (float), `aniso` (float, 6 per atom: U11 U22 U33 U12 U13 U23; empty where no atom has one) | | End-message vector fields are optional. When present, they provide master-file summary data so readers can inspect scan-level and per-image analysis results without opening every linked data file. Missing optional per-image values are encoded by the producer as zero unless otherwise noted. diff --git a/frame_serialize/CBORStream2Deserializer.cpp b/frame_serialize/CBORStream2Deserializer.cpp index a1f5ea29d..15d07c0e3 100644 --- a/frame_serialize/CBORStream2Deserializer.cpp +++ b/frame_serialize/CBORStream2Deserializer.cpp @@ -320,6 +320,19 @@ namespace { memcpy(v.data(), ptr, len); } + void GetCBORDoubleArray(CborValue &value, std::vector &v) { + if (GetCBORTag(value) != TagDoubleLE) + throw JFJochException(JFJochExceptionCategory::CBORError, "Incorrect array type tag"); + + auto [ptr, len] = GetCBORByteString(value); + + if (len % sizeof(double)) + throw JFJochException(JFJochExceptionCategory::CBORError, "Size mismatch"); + + v.resize(len / sizeof(double)); + memcpy(v.data(), ptr, len); + } + void GetCBORStringArray(CborValue &value, std::vector &v) { if (!cbor_value_is_array(&value)) throw JFJochException(JFJochExceptionCategory::CBORError, "Array expected"); @@ -1490,6 +1503,105 @@ namespace { cborErr(cbor_value_leave_container(&value, &map_value)); } + // A key this build does not know: a tagged item takes two advances (see ProcessEndMessageElement). + void SkipCBORValue(CborValue &value) { + if (cbor_value_is_tag(&value)) + cbor_value_advance(&value); + cbor_value_advance(&value); + } + + MergedReflectionsMessage ProcessMergedElement(CborValue &value) { + MergedReflectionsMessage m; + CborValue map_value; + cborErr(cbor_value_enter_container(&value, &map_value)); + while (!cbor_value_at_end(&map_value)) { + auto key = GetCBORString(map_value); + if (key == "unit_cell") m.unit_cell = ProcessUnitCellElement(map_value); + else if (key == "space_group_name") m.space_group_name = GetCBORString(map_value); + else if (key == "wavelength") m.wavelength_A = GetCBORFloat(map_value); + else if (key == "crystal_name") m.crystal_name = GetCBORString(map_value); + else if (key == "history") GetCBORStringArray(map_value, m.history); + else if (key == "h") GetCBORInt32Array(map_value, m.h); + else if (key == "k") GetCBORInt32Array(map_value, m.k); + else if (key == "l") GetCBORInt32Array(map_value, m.l); + else if (key == "i_mean") GetCBORFloatArray(map_value, m.i_mean); + else if (key == "sigma_i_mean") GetCBORFloatArray(map_value, m.sigma_i_mean); + else if (key == "i_plus") GetCBORFloatArray(map_value, m.i_plus); + else if (key == "sigma_i_plus") GetCBORFloatArray(map_value, m.sigma_i_plus); + else if (key == "i_minus") GetCBORFloatArray(map_value, m.i_minus); + else if (key == "sigma_i_minus") GetCBORFloatArray(map_value, m.sigma_i_minus); + else if (key == "f") GetCBORFloatArray(map_value, m.f); + else if (key == "sigma_f") GetCBORFloatArray(map_value, m.sigma_f); + else if (key == "f_plus") GetCBORFloatArray(map_value, m.f_plus); + else if (key == "sigma_f_plus") GetCBORFloatArray(map_value, m.sigma_f_plus); + else if (key == "f_minus") GetCBORFloatArray(map_value, m.f_minus); + else if (key == "sigma_f_minus") GetCBORFloatArray(map_value, m.sigma_f_minus); + else if (key == "free_flag") GetCBORUInt8Array(map_value, m.free_flag); + else SkipCBORValue(map_value); + } + cborErr(cbor_value_leave_container(&value, &map_value)); + return m; + } + + MapCoefficientsMessage ProcessMapCoefficientsElement(CborValue &value) { + MapCoefficientsMessage m; + CborValue map_value; + cborErr(cbor_value_enter_container(&value, &map_value)); + while (!cbor_value_at_end(&map_value)) { + auto key = GetCBORString(map_value); + if (key == "unit_cell") m.unit_cell = ProcessUnitCellElement(map_value); + else if (key == "space_group_name") m.space_group_name = GetCBORString(map_value); + else if (key == "wavelength") m.wavelength_A = GetCBORFloat(map_value); + else if (key == "h") GetCBORInt32Array(map_value, m.h); + else if (key == "k") GetCBORInt32Array(map_value, m.k); + else if (key == "l") GetCBORInt32Array(map_value, m.l); + else if (key == "fp") GetCBORFloatArray(map_value, m.fp); + else if (key == "fc") GetCBORFloatArray(map_value, m.fc); + else if (key == "phic") GetCBORFloatArray(map_value, m.phic); + else if (key == "fwt") GetCBORFloatArray(map_value, m.fwt); + else if (key == "phwt") GetCBORFloatArray(map_value, m.phwt); + else if (key == "delfwt") GetCBORFloatArray(map_value, m.delfwt); + else if (key == "phdelwt") GetCBORFloatArray(map_value, m.phdelwt); + else if (key == "fom") GetCBORFloatArray(map_value, m.fom); + else if (key == "free_flag") GetCBORUInt8Array(map_value, m.free_flag); + else SkipCBORValue(map_value); + } + cborErr(cbor_value_leave_container(&value, &map_value)); + return m; + } + + PlacedModelMessage ProcessPlacedModelElement(CborValue &value) { + PlacedModelMessage m; + CborValue map_value; + cborErr(cbor_value_enter_container(&value, &map_value)); + while (!cbor_value_at_end(&map_value)) { + auto key = GetCBORString(map_value); + if (key == "name") m.name = GetCBORString(map_value); + else if (key == "unit_cell") m.unit_cell = ProcessUnitCellElement(map_value); + else if (key == "space_group_name") m.space_group_name = GetCBORString(map_value); + else if (key == "model_space_group_name") m.model_space_group_name = GetCBORString(map_value); + else if (key == "model_number") GetCBORInt32Array(map_value, m.model_number); + else if (key == "chain") GetCBORStringArray(map_value, m.chain); + else if (key == "residue_name") GetCBORStringArray(map_value, m.residue_name); + else if (key == "seq_num") GetCBORInt32Array(map_value, m.seq_num); + else if (key == "icode") GetCBORUInt8Array(map_value, m.icode); + else if (key == "het_flag") GetCBORUInt8Array(map_value, m.het_flag); + else if (key == "atom_name") GetCBORStringArray(map_value, m.atom_name); + else if (key == "element") GetCBORStringArray(map_value, m.element); + else if (key == "altloc") GetCBORUInt8Array(map_value, m.altloc); + else if (key == "charge") GetCBORInt32Array(map_value, m.charge); + else if (key == "x") GetCBORDoubleArray(map_value, m.x); + else if (key == "y") GetCBORDoubleArray(map_value, m.y); + else if (key == "z") GetCBORDoubleArray(map_value, m.z); + else if (key == "b_iso") GetCBORFloatArray(map_value, m.b_iso); + else if (key == "occupancy") GetCBORFloatArray(map_value, m.occupancy); + else if (key == "aniso") GetCBORFloatArray(map_value, m.aniso); + else SkipCBORValue(map_value); + } + cborErr(cbor_value_leave_container(&value, &map_value)); + return m; + } + bool ProcessEndMessageElement(EndMessage &message, CborValue &value) { if (cbor_value_at_end(&value)) return false; @@ -1586,6 +1698,12 @@ namespace { message.space_group_number = GetCBORUInt(value); else if (key == "pixel_sum") GetCBORInt64Array(value, message.pixel_sum); + else if (key == "merged") + message.merged = ProcessMergedElement(value); + else if (key == "map_coefficients") + message.map_coefficients = ProcessMapCoefficientsElement(value); + else if (key == "placed_model") + message.placed_model = ProcessPlacedModelElement(value); else if (key == "rotation_lattice") { std::vector tmp; GetCBORFloatArray(value, tmp); diff --git a/frame_serialize/CBORStream2Serializer.cpp b/frame_serialize/CBORStream2Serializer.cpp index 385723e54..82ee03e51 100644 --- a/frame_serialize/CBORStream2Serializer.cpp +++ b/frame_serialize/CBORStream2Serializer.cpp @@ -515,6 +515,89 @@ inline void CBOR_ENC(CborEncoder &encoder, const char* key, const UnitCell &val) cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); } +inline void CBOR_ENC(CborEncoder &encoder, const char* key, const std::vector& v) { + cborErr(cbor_encode_text_stringz(&encoder, key)); + cborErr(cbor_encode_tag(&encoder, TagDoubleLE)); + cborErr(cbor_encode_byte_string(&encoder, reinterpret_cast(v.data()), v.size() * sizeof(double))); +} + +inline void CBOR_ENC(CborEncoder &encoder, const char* key, const MergedReflectionsMessage &m) { + CborEncoder mapEncoder; + cborErr(cbor_encode_text_stringz(&encoder, key)); + cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength)); + CBOR_ENC(mapEncoder, "unit_cell", m.unit_cell); + CBOR_ENC(mapEncoder, "space_group_name", m.space_group_name); + CBOR_ENC(mapEncoder, "wavelength", m.wavelength_A); + CBOR_ENC(mapEncoder, "crystal_name", m.crystal_name); + CBOR_ENC(mapEncoder, "history", m.history); + CBOR_ENC(mapEncoder, "h", m.h); + CBOR_ENC(mapEncoder, "k", m.k); + CBOR_ENC(mapEncoder, "l", m.l); + CBOR_ENC(mapEncoder, "i_mean", m.i_mean); + CBOR_ENC(mapEncoder, "sigma_i_mean", m.sigma_i_mean); + CBOR_ENC(mapEncoder, "i_plus", m.i_plus); + CBOR_ENC(mapEncoder, "sigma_i_plus", m.sigma_i_plus); + CBOR_ENC(mapEncoder, "i_minus", m.i_minus); + CBOR_ENC(mapEncoder, "sigma_i_minus", m.sigma_i_minus); + CBOR_ENC(mapEncoder, "f", m.f); + CBOR_ENC(mapEncoder, "sigma_f", m.sigma_f); + CBOR_ENC(mapEncoder, "f_plus", m.f_plus); + CBOR_ENC(mapEncoder, "sigma_f_plus", m.sigma_f_plus); + CBOR_ENC(mapEncoder, "f_minus", m.f_minus); + CBOR_ENC(mapEncoder, "sigma_f_minus", m.sigma_f_minus); + CBOR_ENC(mapEncoder, "free_flag", m.free_flag); + cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); +} + +inline void CBOR_ENC(CborEncoder &encoder, const char* key, const MapCoefficientsMessage &m) { + CborEncoder mapEncoder; + cborErr(cbor_encode_text_stringz(&encoder, key)); + cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength)); + CBOR_ENC(mapEncoder, "unit_cell", m.unit_cell); + CBOR_ENC(mapEncoder, "space_group_name", m.space_group_name); + CBOR_ENC(mapEncoder, "wavelength", m.wavelength_A); + CBOR_ENC(mapEncoder, "h", m.h); + CBOR_ENC(mapEncoder, "k", m.k); + CBOR_ENC(mapEncoder, "l", m.l); + CBOR_ENC(mapEncoder, "fp", m.fp); + CBOR_ENC(mapEncoder, "fc", m.fc); + CBOR_ENC(mapEncoder, "phic", m.phic); + CBOR_ENC(mapEncoder, "fwt", m.fwt); + CBOR_ENC(mapEncoder, "phwt", m.phwt); + CBOR_ENC(mapEncoder, "delfwt", m.delfwt); + CBOR_ENC(mapEncoder, "phdelwt", m.phdelwt); + CBOR_ENC(mapEncoder, "fom", m.fom); + CBOR_ENC(mapEncoder, "free_flag", m.free_flag); + cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); +} + +inline void CBOR_ENC(CborEncoder &encoder, const char* key, const PlacedModelMessage &m) { + CborEncoder mapEncoder; + cborErr(cbor_encode_text_stringz(&encoder, key)); + cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength)); + CBOR_ENC(mapEncoder, "name", m.name); + CBOR_ENC(mapEncoder, "unit_cell", m.unit_cell); + CBOR_ENC(mapEncoder, "space_group_name", m.space_group_name); + CBOR_ENC(mapEncoder, "model_space_group_name", m.model_space_group_name); + CBOR_ENC(mapEncoder, "model_number", m.model_number); + CBOR_ENC(mapEncoder, "chain", m.chain); + CBOR_ENC(mapEncoder, "residue_name", m.residue_name); + CBOR_ENC(mapEncoder, "seq_num", m.seq_num); + CBOR_ENC(mapEncoder, "icode", m.icode); + CBOR_ENC(mapEncoder, "het_flag", m.het_flag); + CBOR_ENC(mapEncoder, "atom_name", m.atom_name); + CBOR_ENC(mapEncoder, "element", m.element); + CBOR_ENC(mapEncoder, "altloc", m.altloc); + CBOR_ENC(mapEncoder, "charge", m.charge); + CBOR_ENC(mapEncoder, "x", m.x); + CBOR_ENC(mapEncoder, "y", m.y); + CBOR_ENC(mapEncoder, "z", m.z); + CBOR_ENC(mapEncoder, "b_iso", m.b_iso); + CBOR_ENC(mapEncoder, "occupancy", m.occupancy); + CBOR_ENC(mapEncoder, "aniso", m.aniso); + cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); +} + // Add encoder for LatticeMessage inline void CBOR_ENC(CborEncoder &encoder, const char* key, const LatticeMessage &val) { CborEncoder mapEncoder; @@ -857,6 +940,9 @@ void CBORStream2Serializer::SerializeSequenceEnd(const EndMessage& message) { // should take; the number is beside it for a reader written before the name existed. CBOR_ENC(mapEncoder, "space_group_name", message.space_group_name); CBOR_ENC(mapEncoder, "space_group_number", message.space_group_number); + CBOR_ENC(mapEncoder, "merged", message.merged); + CBOR_ENC(mapEncoder, "map_coefficients", message.map_coefficients); + CBOR_ENC(mapEncoder, "placed_model", message.placed_model); cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); -- 2.54.0 From aca27be862ca50dcb08ceddf44005ae5f98f15d7 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 12:19:51 +0200 Subject: [PATCH 21/81] jfjoch_writer writes rugnux's .mtz, _maps.mtz and _model.cif from the END blocks New gemmi-only library JFJochRugnuxFiles (writer/), linked by JFJochWriter, so the writer needs no analysis library and builds with JFJOCH_WRITER_ONLY: - WriteMergedMtz / WriteMapCoefficientsMtz / PlacedModelStructure make the files from the structured blocks; WriteRugnuxResultFiles writes whichever blocks END carries beside the master, each under a temporary name and renamed into place, an existing file replaced only when the run's overwrite is set. A file that fails costs only itself (logged), not the run. - FillRugnuxResultBlocks reads the blocks back from the files rugnux wrote at a prefix (p.mtz, p_maps.mtz, p_model.cif), for the broker to fill END. WriteMtzReflections now goes through WriteMergedMtz (MergedReflectionsForWriter builds the block); its output is byte-identical to before, checked by md5 on a synthetic set in both the Friedel-merged and the anomalous layout. StreamWriter writes the files after the master and before the END ACK, so the ACK means they are in place; END receipt and each rename are logged at INFO with the wall-clock time, for last-frame-to-files latency. The broker's direct HDF5 pusher writes them too. Test: rugnux's three files -> blocks -> CBOR -> writer reproduces all of them (and _model.pdb) byte for byte; a ~25k-reflection END is 2.7 MB. Co-Authored-By: Claude Opus 5.5 --- image_analysis/CMakeLists.txt | 2 +- image_analysis/WriteReflections.cpp | 119 ++++++--------- image_analysis/WriteReflections.h | 9 ++ image_pusher/HDF5FilePusher.cpp | 1 + tests/CMakeLists.txt | 1 + tests/RugnuxResultFilesTest.cpp | 219 ++++++++++++++++++++++++++++ writer/CMakeLists.txt | 18 ++- writer/FileWriter.cpp | 6 + writer/FileWriter.h | 4 + writer/RugnuxResultBlocks.cpp | 140 ++++++++++++++++++ writer/RugnuxResultBlocks.h | 22 +++ writer/StreamWriter.cpp | 7 +- writer/WriteRugnuxFiles.cpp | 210 ++++++++++++++++++++++++++ writer/WriteRugnuxFiles.h | 33 +++++ 14 files changed, 706 insertions(+), 85 deletions(-) create mode 100644 tests/RugnuxResultFilesTest.cpp create mode 100644 writer/RugnuxResultBlocks.cpp create mode 100644 writer/RugnuxResultBlocks.h create mode 100644 writer/WriteRugnuxFiles.cpp create mode 100644 writer/WriteRugnuxFiles.h diff --git a/image_analysis/CMakeLists.txt b/image_analysis/CMakeLists.txt index 098307e75..916ebb0e2 100644 --- a/image_analysis/CMakeLists.txt +++ b/image_analysis/CMakeLists.txt @@ -131,4 +131,4 @@ ADD_SUBDIRECTORY(azint) ADD_SUBDIRECTORY(roi) ADD_SUBDIRECTORY(structure_refinement) -TARGET_LINK_LIBRARIES(JFJochImageAnalysis JFJochAzIntEngine JFJochROIIntegration JFJochImagePreprocessing JFJochBraggPrediction JFJochBraggIntegration JFJochLatticeSearch JFJochIndexing JFJochSpotFinding JFJochCommon JFJochGeomRefinement JFJochScaleMerge JFJochStructureRefinement gemmi) +TARGET_LINK_LIBRARIES(JFJochImageAnalysis JFJochAzIntEngine JFJochROIIntegration JFJochImagePreprocessing JFJochBraggPrediction JFJochBraggIntegration JFJochLatticeSearch JFJochIndexing JFJochSpotFinding JFJochCommon JFJochGeomRefinement JFJochScaleMerge JFJochStructureRefinement JFJochRugnuxFiles gemmi) diff --git a/image_analysis/WriteReflections.cpp b/image_analysis/WriteReflections.cpp index faf3b5075..8cf24c2a5 100644 --- a/image_analysis/WriteReflections.cpp +++ b/image_analysis/WriteReflections.cpp @@ -7,6 +7,7 @@ #include "scale_merge/TwinningAnalysis.h" #include "bragg_integration/SystematicAbsence.h" #include "../common/ParallelFor.h" +#include "../writer/WriteRugnuxFiles.h" #include #include @@ -121,16 +122,16 @@ std::string GitDescription() { // (mtzformat.html), so a long value runs on over as many records as it needs, up to that limit, each // continuation starting with '+'. Readers strip the blanks at both ends of a record, so a record is // never cut just after a space: the space starts the next one, behind its '+'. -void AddProvenanceHistory(gemmi::Mtz &mtz, const OutputProvenance &provenance) { - const auto add = [&mtz](const std::string &label, const std::string &value) { +void AddProvenanceHistory(std::vector &history, const OutputProvenance &provenance) { + const auto add = [&history](const std::string &label, const std::string &value) { if (value.empty()) return; std::string rest = label + value; - while (!rest.empty() && mtz.history.size() < 30) { + while (!rest.empty() && history.size() < 30) { size_t n = std::min(80, rest.size()); while (n > 1 && n < rest.size() && rest[n - 1] == ' ') --n; - mtz.history.push_back(rest.substr(0, n)); + history.push_back(rest.substr(0, n)); rest = n < rest.size() ? "+" + rest.substr(n) : std::string(); } }; @@ -606,81 +607,49 @@ void WriteMmcifReflections(const std::vector &reflections, out.close(); } +MergedReflectionsMessage MergedReflectionsForWriter(const std::vector &reflections, + const UnitCell &unitCell, + const DiffractionExperiment &experiment, + const OutputProvenance &provenance) { + MergedReflectionsMessage m; + m.unit_cell = unitCell; + m.space_group_name = experiment.GetSpaceGroupOrP1().xhm(); + m.wavelength_A = experiment.GetWavelength_A(); + m.crystal_name = experiment.GetSampleName(); + m.history.push_back("From Rugnux " + jfjoch_version() + ", data reduction"); + AddProvenanceHistory(m.history, provenance); + + bool has_anom = true; + const std::vector out_rows = BuildMergedRows(reflections, experiment, has_anom); + for (const auto& row : out_rows) { + m.h.push_back(row.h); + m.k.push_back(row.k); + m.l.push_back(row.l); + m.i_mean.push_back(row.Imean); + m.sigma_i_mean.push_back(row.sImean); + m.f.push_back(row.Fmean); + m.sigma_f.push_back(row.sFmean); + if (has_anom) { + m.i_plus.push_back(row.Ip); + m.sigma_i_plus.push_back(row.sIp); + m.i_minus.push_back(row.Im); + m.sigma_i_minus.push_back(row.sIm); + m.f_plus.push_back(row.Fp); + m.sigma_f_plus.push_back(row.sFp); + m.f_minus.push_back(row.Fm); + m.sigma_f_minus.push_back(row.sFm); + } + m.free_flag.push_back(static_cast(row.rfree)); + } + return m; +} + void WriteMtzReflections(const std::vector &reflections, const UnitCell &unitCell, const DiffractionExperiment &experiment, const OutputProvenance &provenance, const std::string &filename) { - gemmi::Mtz mtz; - - // Optional but recommended metadata - mtz.spacegroup = &experiment.GetSpaceGroupOrP1(); - mtz.set_cell_for_all(unitCell); - - // Producing-software provenance in the MTZ header (title + HISTORY, the CCP4 convention). - mtz.title = "Rugnux merged reflections"; - mtz.history.push_back("From Rugnux " + jfjoch_version() + ", data reduction"); - AddProvenanceHistory(mtz, provenance); - - // Add dataset. HKL_base first, so the data dataset is id 1: a dataset written as id 0 is the - // reserved base dataset as far as CCP4's mtzlib is concerned, and the wavelength on it is - // dropped - mtzinfo then reports the Cu K-alpha default 1.54187 A, which is what a program that - // takes f'/f'' from the file would phase on. - mtz.add_base(); // the HKL_base dataset and the H K L columns - gemmi::Mtz::Dataset& ds = mtz.add_dataset("native"); - ds.crystal_name = experiment.GetSampleName(); - ds.wavelength = experiment.GetWavelength_A(); - - const int dataset_id = ds.id; - - // One row per reflection in the CCP4 anomalous layout (IMEAN + I(+)/I(-), and the same split for - // the French-Wilson amplitude), which aimless / ctruncate / mtz2sca / ANODE read directly. - bool has_anom = true; - const std::vector out_rows = BuildMergedRows(reflections, experiment, has_anom); - - mtz.add_column("IMEAN", 'J', dataset_id, -1, false); - mtz.add_column("SIGIMEAN", 'Q', dataset_id, -1, false); - if (has_anom) { - mtz.add_column("I(+)", 'K', dataset_id, -1, false); - mtz.add_column("SIGI(+)", 'M', dataset_id, -1, false); - mtz.add_column("I(-)", 'K', dataset_id, -1, false); - mtz.add_column("SIGI(-)", 'M', dataset_id, -1, false); - } - mtz.add_column("F", 'F', dataset_id, -1, false); // French-Wilson amplitude - mtz.add_column("SIGF", 'Q', dataset_id, -1, false); - if (has_anom) { - mtz.add_column("F(+)", 'G', dataset_id, -1, false); - mtz.add_column("SIGF(+)", 'L', dataset_id, -1, false); - mtz.add_column("F(-)", 'G', dataset_id, -1, false); - mtz.add_column("SIGF(-)", 'L', dataset_id, -1, false); - } - mtz.add_column("FreeR_flag", 'I', dataset_id, -1, false); - - mtz.nreflections = static_cast(out_rows.size()); - mtz.data.reserve(out_rows.size() * 16); - for (const auto& row : out_rows) { - mtz.data.push_back(static_cast(row.h)); - mtz.data.push_back(static_cast(row.k)); - mtz.data.push_back(static_cast(row.l)); - mtz.data.push_back(row.Imean); - mtz.data.push_back(row.sImean); - if (has_anom) { - mtz.data.push_back(row.Ip); - mtz.data.push_back(row.sIp); - mtz.data.push_back(row.Im); - mtz.data.push_back(row.sIm); - } - mtz.data.push_back(row.Fmean); - mtz.data.push_back(row.sFmean); - if (has_anom) { - mtz.data.push_back(row.Fp); - mtz.data.push_back(row.sFp); - mtz.data.push_back(row.Fm); - mtz.data.push_back(row.sFm); - } - mtz.data.push_back(static_cast(row.rfree)); - } - mtz.write_to_file(filename); + WriteMergedMtz(MergedReflectionsForWriter(reflections, unitCell, experiment, provenance), filename); } namespace { @@ -948,7 +917,7 @@ gemmi::Mtz UnmergedMtz(const std::vector &outcomes, mtz.set_cell_for_all(unitCell); mtz.title = "Rugnux unmerged observations"; mtz.history.push_back("From Rugnux " + jfjoch_version() + ", data reduction"); - AddProvenanceHistory(mtz, provenance); + AddProvenanceHistory(mtz.history, provenance); mtz.add_base(); // the HKL_base dataset and the H K L columns gemmi::Mtz::Dataset &ds = mtz.add_dataset("unmerged"); ds.crystal_name = experiment.GetSampleName(); diff --git a/image_analysis/WriteReflections.h b/image_analysis/WriteReflections.h index 559b3e662..68d2ab778 100644 --- a/image_analysis/WriteReflections.h +++ b/image_analysis/WriteReflections.h @@ -9,6 +9,7 @@ #include "../common/Reflection.h" #include "../common/UnitCell.h" #include "../common/DiffractionExperiment.h" +#include "../common/JFJochMessages.h" #include "IntegrationOutcome.h" #include @@ -49,6 +50,14 @@ void WriteMmcifReflections(const std::vector &reflections, const std::string &filename, size_t nthreads); +// The merged MTZ as a structured END-message block: the columns, metadata and HISTORY records that +// WriteMtzReflections writes, for jfjoch_writer to write the same file (WriteMergedMtz, +// writer/WriteRugnuxFiles.h). WriteMtzReflections is exactly WriteMergedMtz of this. +MergedReflectionsMessage MergedReflectionsForWriter(const std::vector &reflections, + const UnitCell &unitCell, + const DiffractionExperiment &experiment, + const OutputProvenance &provenance); + void WriteMtzReflections(const std::vector &reflections, const UnitCell &unitCell, const DiffractionExperiment &experiment, diff --git a/image_pusher/HDF5FilePusher.cpp b/image_pusher/HDF5FilePusher.cpp index bec85f54f..ac43e1661 100644 --- a/image_pusher/HDF5FilePusher.cpp +++ b/image_pusher/HDF5FilePusher.cpp @@ -66,6 +66,7 @@ bool HDF5FilePusher::EndDataCollection(const EndMessage &message) { if (!writer) throw JFJochException(JFJochExceptionCategory::WrongDAQState, "Image pusher not ready for writing images"); writer->WriteHDF5(message); + writer->WriteResultFiles(message, logger); writer->Finalize(); } catch (...) { writer.reset(); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index c6dd46391..5f5c4b207 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -172,6 +172,7 @@ ADD_EXECUTABLE(jfjoch_test LoadReferenceMtzFreeFlagsTest.cpp LoadReferenceSfCifTest.cpp WriteReflectionsTest.cpp + RugnuxResultFilesTest.cpp UnitCellTest.cpp CCTest.cpp MultiLatticeSearchTest.cpp diff --git a/tests/RugnuxResultFilesTest.cpp b/tests/RugnuxResultFilesTest.cpp new file mode 100644 index 000000000..d0910ab98 --- /dev/null +++ b/tests/RugnuxResultFilesTest.cpp @@ -0,0 +1,219 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include + +#include +#include +#include +#include + +#include +#include +#include // count_atom_sites + +#include "../common/Definitions.h" +#include "../common/DiffractionExperiment.h" +#include "../common/Logger.h" +#include "../image_analysis/WriteReflections.h" +#include "../frame_serialize/CBORStream2Serializer.h" +#include "../frame_serialize/CBORStream2Deserializer.h" +#include "../writer/WriteModel.h" +#include "../writer/WriteRugnuxFiles.h" +#include "../writer/RugnuxResultBlocks.h" +#include "SyntheticMergedReflections.h" + +namespace { + constexpr UnitCell TEST_CELL{47.0f, 47.0f, 63.0f, 90.0f, 90.0f, 90.0f}; + + std::string ReadFile(const std::string &path) { + std::ifstream f(path, std::ios::binary); + return {std::istreambuf_iterator(f), std::istreambuf_iterator()}; + } + + std::vector Labels(const gemmi::Mtz &mtz) { + std::vector v; + for (const auto &c : mtz.columns) + v.push_back(c.label); + return v; + } + + // A small model with what a placed model carries: two chains, a ligand, a water, an alternate + // conformation, an anisotropic atom, an insertion code and a charge. + gemmi::Structure TestModel() { + gemmi::Structure st; + st.name = "test"; + st.cell = TEST_CELL; + st.spacegroup_hm = "P 43 21 2"; + gemmi::Model &m = st.models.emplace_back(1); + double x = 1.0; + auto add_atom = [&x](gemmi::Residue &r, const std::string &name, const char *el, char altloc = 0) { + gemmi::Atom &a = r.atoms.emplace_back(); + a.name = name; + a.element = gemmi::Element(el); + a.altloc = altloc; + a.pos = gemmi::Position(x, 2.0 * x + 0.123, 3.0 * x - 0.456); + a.b_iso = 15.0f + static_cast(x); + a.occ = altloc ? 0.5f : 1.0f; + x += 1.37; + return &a; + }; + for (const std::string chain : {"A", "B"}) { + gemmi::Chain &ch = m.chains.emplace_back(chain); + for (int i = 1; i <= 3; i++) { + gemmi::Residue &r = ch.residues.emplace_back(gemmi::ResidueId{gemmi::SeqId(i, i == 3 ? 'A' : ' '), {}, "ALA"}); + r.het_flag = 'A'; + add_atom(r, "N", "N"); + add_atom(r, "CA", "C"); + add_atom(r, "C", "C"); + add_atom(r, "O", "O"); + add_atom(r, "CB", "C", 'A'); + add_atom(r, "CB", "C", 'B'); + } + } + gemmi::Residue &zn = m.chains[0].residues.emplace_back(gemmi::ResidueId{gemmi::SeqId(101, ' '), {}, "ZN"}); + zn.het_flag = 'H'; + gemmi::Atom *a = add_atom(zn, "ZN", "Zn"); + a->charge = 2; + a->aniso = {0.2f, 0.25f, 0.3f, 0.01f, -0.02f, 0.03f}; + gemmi::Residue &w = m.chains[1].residues.emplace_back(gemmi::ResidueId{gemmi::SeqId(201, ' '), {}, "HOH"}); + w.het_flag = 'H'; + add_atom(w, "O", "O"); + st.setup_cell_images(); + return st; + } +} + +TEST_CASE("RugnuxResultFiles: rugnux's files -> END blocks -> CBOR -> writer, byte for byte", "[rugnux_result_files]") { + Logger logger("RugnuxResultFiles"); + const std::filesystem::path dir = std::filesystem::temp_directory_path() / "rugnux_result_files_test"; + std::filesystem::remove_all(dir); + std::filesystem::create_directories(dir); + const std::string original = (dir / "rugnux").string(); + const std::string written = (dir / "writer").string(); + + // About the size of a standard-crystal run (~25k reflections), with an anomalous split. + jfjoch_test::SyntheticMergeParams params; + params.true_space_group = "P 43 21 2"; + params.twin_supergroup = "P 43 21 2"; + params.d_min_A = 2.25; + auto reflections = jfjoch_test::GenerateSyntheticMerged(params); + for (size_t i = 0; i < reflections.size(); i++) { + auto &r = reflections[i]; + r.I_plus = r.I * 1.01f; r.sigma_plus = r.sigma * 1.4f; + r.F_plus = std::sqrt(std::max(r.I, 1.0f)); r.sigmaF_plus = 0.1f; + if (i % 7 != 0) { + r.I_minus = r.I * 0.99f; r.sigma_minus = r.sigma * 1.4f; + r.F_minus = std::sqrt(std::max(r.I, 1.0f)); r.sigmaF_minus = 0.12f; + } + r.rfree_flag = (i % 20 == 0); + } + DiffractionExperiment experiment; + experiment.IncidentEnergy_keV(12.7f); + experiment.SpaceGroupNumber(96); + experiment.SetUnitCell(TEST_CELL); + OutputProvenance provenance; + provenance.command_line = "rugnux -N 8 input_master.h5"; + provenance.input_file = "/some/where/input_master.h5"; + WriteMtzReflections(reflections, TEST_CELL, experiment, provenance, original + ".mtz"); + + MapCoefficientsMessage maps; + maps.unit_cell = TEST_CELL; + maps.space_group_name = "P 43 21 2"; + maps.wavelength_A = experiment.GetWavelength_A(); + for (size_t i = 0; i < reflections.size(); i++) { + const float phi = static_cast((i * 37) % 360); + maps.h.push_back(reflections[i].h); + maps.k.push_back(reflections[i].k); + maps.l.push_back(reflections[i].l); + maps.fp.push_back(reflections[i].F); + maps.fc.push_back(reflections[i].F * 0.9f); + maps.phic.push_back(phi); + maps.fwt.push_back(reflections[i].F * 1.1f); + maps.phwt.push_back(phi); + maps.delfwt.push_back(reflections[i].F * 0.1f); + maps.phdelwt.push_back(phi); + maps.fom.push_back(0.8f); + maps.free_flag.push_back(reflections[i].rfree_flag ? 0 : 1); + } + WriteMapCoefficientsMtz(maps, original + "_maps.mtz"); + + WritePlacedModel(TestModel(), TEST_CELL, experiment.GetSpaceGroupOrP1(), original, logger); + + EndMessage end{}; + end.max_image_number = 100; + FillRugnuxResultBlocks(original, end); + REQUIRE(end.merged); + REQUIRE(end.map_coefficients); + REQUIRE(end.placed_model); + CHECK(end.merged->h.size() == reflections.size()); + CHECK(end.merged->i_plus.size() == reflections.size()); + CHECK(end.placed_model->atom_name.size() == 2 * 3 * 6 + 2); + + std::vector buffer(MESSAGE_SIZE_FOR_START_END); + CBORStream2Serializer serializer(buffer.data(), buffer.size()); + REQUIRE_NOTHROW(serializer.SerializeSequenceEnd(end)); + std::cout << "END message with " << reflections.size() << " merged reflections, as many map coefficients and " + << end.placed_model->atom_name.size() << " atoms: " << serializer.GetBufferSize() << " bytes" << std::endl; + auto deserialized = CBORStream2Deserialize(buffer.data(), serializer.GetBufferSize()); + REQUIRE(deserialized); + REQUIRE(deserialized->end_message); + const EndMessage &out = *deserialized->end_message; + REQUIRE(out.merged); + REQUIRE(out.map_coefficients); + REQUIRE(out.placed_model); + CHECK(out.merged->history == end.merged->history); + CHECK(out.placed_model->x == end.placed_model->x); + + WriteRugnuxResultFiles(out, written, false, logger); + + CHECK(ReadFile(written + ".mtz") == ReadFile(original + ".mtz")); + CHECK(ReadFile(written + "_maps.mtz") == ReadFile(original + "_maps.mtz")); + CHECK(ReadFile(written + "_model.cif") == ReadFile(original + "_model.cif")); + CHECK(ReadFile(written + "_model.pdb") == ReadFile(original + "_model.pdb")); + + const gemmi::Mtz mtz = gemmi::read_mtz_file(written + ".mtz"); + CHECK(Labels(mtz) == std::vector{"H", "K", "L", "IMEAN", "SIGIMEAN", "I(+)", "SIGI(+)", "I(-)", + "SIGI(-)", "F", "SIGF", "F(+)", "SIGF(+)", "F(-)", "SIGF(-)", + "FreeR_flag"}); + CHECK(mtz.nreflections == static_cast(reflections.size())); + CHECK(mtz.datasets.back().wavelength == Catch::Approx(experiment.GetWavelength_A()).epsilon(1e-5)); + const gemmi::Mtz maps_mtz = gemmi::read_mtz_file(written + "_maps.mtz"); + CHECK(Labels(maps_mtz) == std::vector{"H", "K", "L", "FP", "FC", "PHIC", "FWT", "PHWT", "DELFWT", + "PHDELWT", "FOM", "FREE"}); + CHECK(maps_mtz.get_column_with_label("K")[5] == static_cast(maps.k[5])); + CHECK(maps_mtz.get_column_with_label("PHWT")[5] == maps.phwt[5]); + const gemmi::Structure st = gemmi::read_structure_gz(written + "_model.cif"); + CHECK(gemmi::count_atom_sites(st) == 2 * 3 * 6 + 2); + + std::filesystem::remove_all(dir); +} + +TEST_CASE("RugnuxResultFiles: an existing file is kept when overwrite is off", "[rugnux_result_files]") { + Logger logger("RugnuxResultFiles"); + const std::filesystem::path dir = std::filesystem::temp_directory_path() / "rugnux_result_files_overwrite"; + std::filesystem::remove_all(dir); + std::filesystem::create_directories(dir); + const std::string prefix = (dir / "run").string(); + + EndMessage end{}; + end.merged = MergedReflectionsMessage{}; + end.merged->unit_cell = TEST_CELL; + end.merged->space_group_name = "P 43 21 2"; + end.merged->h = {1}; end.merged->k = {2}; end.merged->l = {3}; + end.merged->i_mean = {10}; end.merged->sigma_i_mean = {1}; + end.merged->f = {3}; end.merged->sigma_f = {0.2}; + end.merged->free_flag = {1}; + + { std::ofstream f(prefix + ".mtz"); f << "keep"; } + WriteRugnuxResultFiles(end, prefix, false, logger); + CHECK(ReadFile(prefix + ".mtz") == "keep"); + CHECK(!std::filesystem::exists(prefix + ".mtz.tmp")); + + WriteRugnuxResultFiles(end, prefix, true, logger); + const gemmi::Mtz mtz = gemmi::read_mtz_file(prefix + ".mtz"); + CHECK(mtz.nreflections == 1); + CHECK(Labels(mtz) == std::vector{"H", "K", "L", "IMEAN", "SIGIMEAN", "F", "SIGF", "FreeR_flag"}); + + std::filesystem::remove_all(dir); +} diff --git a/writer/CMakeLists.txt b/writer/CMakeLists.txt index 2f6f43738..c96b830b7 100644 --- a/writer/CMakeLists.txt +++ b/writer/CMakeLists.txt @@ -31,14 +31,18 @@ ADD_LIBRARY(JFJochWriter STATIC HDF5DataFilePluginPerformance.h ) -TARGET_LINK_LIBRARIES(JFJochWriter JFJochPreview JFJochLogger JFJochHDF5Wrappers CBORStream2FrameSerialize) +# The placed atomic model (mmCIF/PDB) that rugnux writes beside its merged output. +ADD_LIBRARY(JFJochModelWriter STATIC WriteModel.cpp WriteModel.h) +TARGET_LINK_LIBRARIES(JFJochModelWriter JFJochLogger gemmi) -# The placed atomic model (mmCIF/PDB) that rugnux writes beside its merged output. Its own target, -# because it needs gemmi, which JFJochWriter does not link and a writer-only build does not want. -IF (NOT JFJOCH_WRITER_ONLY) - ADD_LIBRARY(JFJochModelWriter STATIC WriteModel.cpp WriteModel.h) - TARGET_LINK_LIBRARIES(JFJochModelWriter JFJochLogger gemmi) -ENDIF() +# rugnux's merged MTZ, map-coefficient MTZ and placed model, to and from the structured END-message +# blocks, so that jfjoch_writer writes them with gemmi alone and no analysis library. +ADD_LIBRARY(JFJochRugnuxFiles STATIC WriteRugnuxFiles.cpp WriteRugnuxFiles.h + RugnuxResultBlocks.cpp RugnuxResultBlocks.h) +TARGET_LINK_LIBRARIES(JFJochRugnuxFiles JFJochModelWriter JFJochLogger gemmi) + +TARGET_LINK_LIBRARIES(JFJochWriter JFJochPreview JFJochLogger JFJochHDF5Wrappers CBORStream2FrameSerialize + JFJochRugnuxFiles) # The streaming writer and the jfjoch_writer service belong to the Linux server stack, not the # portable viewer subset: JFJochStreamWriter pulls in JFJochImagePuller (not built in a viewer-only diff --git a/writer/FileWriter.cpp b/writer/FileWriter.cpp index 5d6b42432..92d9a3804 100644 --- a/writer/FileWriter.cpp +++ b/writer/FileWriter.cpp @@ -9,6 +9,7 @@ #include "../common/Logger.h" #include "../common/JFJochException.h" #include "JFJochDecompress.h" +#include "WriteRugnuxFiles.h" FileWriter::FileWriter(const StartMessage &request, bool check_overwrite_at_start, bool trusted_path) : start_message(request) { @@ -339,3 +340,8 @@ void FileWriter::WriteHDF5(const EndMessage &msg) { std::rethrow_exception(first_exception); } } + +void FileWriter::WriteResultFiles(const EndMessage &msg, Logger &logger) { + if (master_file) + WriteRugnuxResultFiles(msg, start_message.file_prefix, start_message.overwrite.value_or(false), logger); +} diff --git a/writer/FileWriter.h b/writer/FileWriter.h index c4ba5494e..df96a3e1c 100644 --- a/writer/FileWriter.h +++ b/writer/FileWriter.h @@ -9,6 +9,7 @@ #include "../common/JFJochMessages.h" #include "../common/ZMQWrappers.h" #include "HDF5NXmx.h" +#include "../common/Logger.h" #include #include #include @@ -59,6 +60,9 @@ public: void WriteHDF5(const DataMessage& msg); void WriteHDF5(const CompressedImage& msg); void WriteHDF5(const EndMessage& msg); + // The merged result files the END message carries (WriteRugnuxResultFiles), beside the master + // file, by the writer that owns it. Call after WriteHDF5(EndMessage). + void WriteResultFiles(const EndMessage& msg, Logger &logger); std::vector Finalize(); void SetupFinalizedFileSocket(const std::string &addr); // Called for every data file once it is closed and renamed into place. diff --git a/writer/RugnuxResultBlocks.cpp b/writer/RugnuxResultBlocks.cpp new file mode 100644 index 000000000..c7ac1d621 --- /dev/null +++ b/writer/RugnuxResultBlocks.cpp @@ -0,0 +1,140 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "RugnuxResultBlocks.h" + +#include + +#include +#include + +namespace { + +UnitCell ToUnitCell(const gemmi::UnitCell &c) { + return UnitCell{static_cast(c.a), static_cast(c.b), static_cast(c.c), + static_cast(c.alpha), static_cast(c.beta), static_cast(c.gamma)}; +} + +// The column with this label, empty where the file has none. +std::vector Column(const gemmi::Mtz &mtz, const std::string &label) { + std::vector v; + if (const gemmi::Mtz::Column *col = mtz.column_with_label(label)) + for (int i = 0; i < col->size(); i++) + v.push_back((*col)[i]); + return v; +} + +std::vector IntColumn(const gemmi::Mtz &mtz, const std::string &label) { + std::vector v; + for (float x : Column(mtz, label)) + v.push_back(static_cast(x)); + return v; +} + +std::vector FlagColumn(const gemmi::Mtz &mtz, const std::string &label) { + std::vector v; + for (float x : Column(mtz, label)) + v.push_back(static_cast(x)); + return v; +} + +std::string SpaceGroupName(const gemmi::Mtz &mtz) { + return mtz.spacegroup != nullptr ? mtz.spacegroup->xhm() : std::string(); +} + +} // namespace + +MergedReflectionsMessage MergedReflectionsFromMtz(const std::string &path) { + const gemmi::Mtz mtz = gemmi::read_mtz_file(path); + MergedReflectionsMessage m; + m.unit_cell = ToUnitCell(mtz.cell); + m.space_group_name = SpaceGroupName(mtz); + m.wavelength_A = static_cast(mtz.datasets.back().wavelength); + m.crystal_name = mtz.datasets.back().crystal_name; + m.history = mtz.history; + m.h = IntColumn(mtz, "H"); + m.k = IntColumn(mtz, "K"); + m.l = IntColumn(mtz, "L"); + m.i_mean = Column(mtz, "IMEAN"); + m.sigma_i_mean = Column(mtz, "SIGIMEAN"); + m.i_plus = Column(mtz, "I(+)"); + m.sigma_i_plus = Column(mtz, "SIGI(+)"); + m.i_minus = Column(mtz, "I(-)"); + m.sigma_i_minus = Column(mtz, "SIGI(-)"); + m.f = Column(mtz, "F"); + m.sigma_f = Column(mtz, "SIGF"); + m.f_plus = Column(mtz, "F(+)"); + m.sigma_f_plus = Column(mtz, "SIGF(+)"); + m.f_minus = Column(mtz, "F(-)"); + m.sigma_f_minus = Column(mtz, "SIGF(-)"); + m.free_flag = FlagColumn(mtz, "FreeR_flag"); + return m; +} + +MapCoefficientsMessage MapCoefficientsFromMtz(const std::string &path) { + const gemmi::Mtz mtz = gemmi::read_mtz_file(path); + MapCoefficientsMessage c; + c.unit_cell = ToUnitCell(mtz.cell); + c.space_group_name = SpaceGroupName(mtz); + c.wavelength_A = static_cast(mtz.datasets.back().wavelength); + c.h = IntColumn(mtz, "H"); + c.k = IntColumn(mtz, "K"); + c.l = IntColumn(mtz, "L"); + c.fp = Column(mtz, "FP"); + c.fc = Column(mtz, "FC"); + c.phic = Column(mtz, "PHIC"); + c.fwt = Column(mtz, "FWT"); + c.phwt = Column(mtz, "PHWT"); + c.delfwt = Column(mtz, "DELFWT"); + c.phdelwt = Column(mtz, "PHDELWT"); + c.fom = Column(mtz, "FOM"); + c.free_flag = FlagColumn(mtz, "FREE"); + return c; +} + +PlacedModelMessage PlacedModelFromStructure(const gemmi::Structure &st, const std::string &data_space_group_name) { + PlacedModelMessage p; + p.name = st.name; + p.unit_cell = ToUnitCell(st.cell); + p.space_group_name = data_space_group_name; + p.model_space_group_name = st.spacegroup_hm; + bool has_aniso = false; + for (const gemmi::Model &m : st.models) + for (const gemmi::Chain &ch : m.chains) + for (const gemmi::Residue &r : ch.residues) + for (const gemmi::Atom &a : r.atoms) { + p.model_number.push_back(m.num); + p.chain.push_back(ch.name); + p.residue_name.push_back(r.name); + p.seq_num.push_back(*r.seqid.num); + p.icode.push_back(static_cast(r.seqid.icode)); + p.het_flag.push_back(static_cast(r.het_flag)); + p.atom_name.push_back(a.name); + p.element.push_back(a.element.name()); + p.altloc.push_back(static_cast(a.altloc)); + p.charge.push_back(a.charge); + p.x.push_back(a.pos.x); + p.y.push_back(a.pos.y); + p.z.push_back(a.pos.z); + p.b_iso.push_back(a.b_iso); + p.occupancy.push_back(a.occ); + p.aniso.insert(p.aniso.end(), {a.aniso.u11, a.aniso.u22, a.aniso.u33, + a.aniso.u12, a.aniso.u13, a.aniso.u23}); + has_aniso = has_aniso || a.aniso.nonzero(); + } + if (!has_aniso) + p.aniso.clear(); + return p; +} + +void FillRugnuxResultBlocks(const std::string &prefix, EndMessage &end) { + if (std::filesystem::exists(prefix + ".mtz")) + end.merged = MergedReflectionsFromMtz(prefix + ".mtz"); + if (std::filesystem::exists(prefix + "_maps.mtz")) + end.map_coefficients = MapCoefficientsFromMtz(prefix + "_maps.mtz"); + if (std::filesystem::exists(prefix + "_model.cif")) { + const gemmi::Structure st = gemmi::read_structure_gz(prefix + "_model.cif"); + end.placed_model = PlacedModelFromStructure(st, end.merged ? end.merged->space_group_name + : st.spacegroup_hm); + } +} diff --git a/writer/RugnuxResultBlocks.h b/writer/RugnuxResultBlocks.h new file mode 100644 index 000000000..f0198e46f --- /dev/null +++ b/writer/RugnuxResultBlocks.h @@ -0,0 +1,22 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include + +#include "gemmi/model.hpp" + +#include "../common/JFJochMessages.h" + +// The END-message blocks (common/JFJochMessages.h) read back from the files rugnux wrote at +// `prefix`: .mtz into `merged`, _maps.mtz into `map_coefficients` and +// _model.cif into `placed_model`, each only where its file exists. The writer makes the same +// files again from them (WriteRugnuxResultFiles, writer/WriteRugnuxFiles.h). +void FillRugnuxResultBlocks(const std::string &prefix, EndMessage &end); + +MergedReflectionsMessage MergedReflectionsFromMtz(const std::string &path); +MapCoefficientsMessage MapCoefficientsFromMtz(const std::string &path); +// data_space_group_name: the group of the reflection files beside the model, which is what +// WritePlacedModel is to be given; the model's own group is taken from `st`. +PlacedModelMessage PlacedModelFromStructure(const gemmi::Structure &st, const std::string &data_space_group_name); diff --git a/writer/StreamWriter.cpp b/writer/StreamWriter.cpp index efac1d632..616af4955 100644 --- a/writer/StreamWriter.cpp +++ b/writer/StreamWriter.cpp @@ -4,6 +4,7 @@ #include "../common/JFJochException.h" #include "StreamWriter.h" +#include #include #include "FileWriter.h" @@ -203,14 +204,16 @@ void StreamWriter::ProcessEndMessage() { if (state == StreamWriterState::Idle || state == StreamWriterState::Finalized) return; - if (verbose) - logger.Info("Received end message"); + logger.Info("Received end message at wall clock {:.3f} s", + std::chrono::duration(std::chrono::system_clock::now().time_since_epoch()).count()); if (state != StreamWriterState::Error) { try { if ((image_puller_output.cbor->end_message->max_image_number == 0) && (max_image_number > 0)) image_puller_output.cbor->end_message->max_image_number = max_image_number; file_writer->WriteHDF5(*image_puller_output.cbor->end_message); + // Before the END ACK below, so that the ACK says these files are in place too. + file_writer->WriteResultFiles(*image_puller_output.cbor->end_message, logger); } catch (const std::exception &e) { // std::exception for the same reason as in ProcessDataImage. Here the cost of a leak is the // highest: the END ACK and the notification below are never sent, the state never reaches diff --git a/writer/WriteRugnuxFiles.cpp b/writer/WriteRugnuxFiles.cpp new file mode 100644 index 000000000..2f9449485 --- /dev/null +++ b/writer/WriteRugnuxFiles.cpp @@ -0,0 +1,210 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "WriteRugnuxFiles.h" + +#include +#include + +#include + +#include "WriteModel.h" +#include "../common/Logger.h" + +void WriteMergedMtz(const MergedReflectionsMessage &merged, const std::string &filename) { + gemmi::Mtz mtz; + + // Optional but recommended metadata + mtz.spacegroup = gemmi::find_spacegroup_by_name(merged.space_group_name); + mtz.set_cell_for_all(merged.unit_cell); + + // Producing-software provenance in the MTZ header (title + HISTORY, the CCP4 convention). + mtz.title = "Rugnux merged reflections"; + mtz.history = merged.history; + + // Add dataset. HKL_base first, so the data dataset is id 1: a dataset written as id 0 is the + // reserved base dataset as far as CCP4's mtzlib is concerned, and the wavelength on it is + // dropped - mtzinfo then reports the Cu K-alpha default 1.54187 A, which is what a program that + // takes f'/f'' from the file would phase on. + mtz.add_base(); // the HKL_base dataset and the H K L columns + gemmi::Mtz::Dataset& ds = mtz.add_dataset("native"); + ds.crystal_name = merged.crystal_name; + ds.wavelength = merged.wavelength_A; + + const int dataset_id = ds.id; + + // One row per reflection in the CCP4 anomalous layout (IMEAN + I(+)/I(-), and the same split for + // the French-Wilson amplitude), which aimless / ctruncate / mtz2sca / ANODE read directly. + const bool has_anom = !merged.i_plus.empty(); + + mtz.add_column("IMEAN", 'J', dataset_id, -1, false); + mtz.add_column("SIGIMEAN", 'Q', dataset_id, -1, false); + if (has_anom) { + mtz.add_column("I(+)", 'K', dataset_id, -1, false); + mtz.add_column("SIGI(+)", 'M', dataset_id, -1, false); + mtz.add_column("I(-)", 'K', dataset_id, -1, false); + mtz.add_column("SIGI(-)", 'M', dataset_id, -1, false); + } + mtz.add_column("F", 'F', dataset_id, -1, false); // French-Wilson amplitude + mtz.add_column("SIGF", 'Q', dataset_id, -1, false); + if (has_anom) { + mtz.add_column("F(+)", 'G', dataset_id, -1, false); + mtz.add_column("SIGF(+)", 'L', dataset_id, -1, false); + mtz.add_column("F(-)", 'G', dataset_id, -1, false); + mtz.add_column("SIGF(-)", 'L', dataset_id, -1, false); + } + mtz.add_column("FreeR_flag", 'I', dataset_id, -1, false); + + const size_t n = merged.h.size(); + mtz.nreflections = static_cast(n); + mtz.data.reserve(n * 16); + for (size_t i = 0; i < n; i++) { + mtz.data.push_back(static_cast(merged.h[i])); + mtz.data.push_back(static_cast(merged.k[i])); + mtz.data.push_back(static_cast(merged.l[i])); + mtz.data.push_back(merged.i_mean[i]); + mtz.data.push_back(merged.sigma_i_mean[i]); + if (has_anom) { + mtz.data.push_back(merged.i_plus[i]); + mtz.data.push_back(merged.sigma_i_plus[i]); + mtz.data.push_back(merged.i_minus[i]); + mtz.data.push_back(merged.sigma_i_minus[i]); + } + mtz.data.push_back(merged.f[i]); + mtz.data.push_back(merged.sigma_f[i]); + if (has_anom) { + mtz.data.push_back(merged.f_plus[i]); + mtz.data.push_back(merged.sigma_f_plus[i]); + mtz.data.push_back(merged.f_minus[i]); + mtz.data.push_back(merged.sigma_f_minus[i]); + } + mtz.data.push_back(static_cast(merged.free_flag[i])); + } + mtz.write_to_file(filename); +} + +void WriteMapCoefficientsMtz(const MapCoefficientsMessage &coefficients, const std::string &filename) { + gemmi::Mtz mtz(true); + mtz.spacegroup = gemmi::find_spacegroup_by_name(coefficients.space_group_name); + mtz.set_cell_for_all(coefficients.unit_cell); + mtz.add_dataset("model_validation"); + mtz.datasets.back().wavelength = coefficients.wavelength_A; + mtz.add_column("FP", 'F', -1, -1, false); + mtz.add_column("FC", 'F', -1, -1, false); + mtz.add_column("PHIC", 'P', -1, -1, false); + mtz.add_column("FWT", 'F', -1, -1, false); + mtz.add_column("PHWT", 'P', -1, -1, false); + mtz.add_column("DELFWT", 'F', -1, -1, false); + mtz.add_column("PHDELWT", 'P', -1, -1, false); + // The figure of merit the coefficients carry, so the weighting can be read off - and undone - + // from the file rather than having to be taken on trust. + mtz.add_column("FOM", 'W', -1, -1, false); + mtz.add_column("FREE", 'I', -1, -1, false); + const size_t n = coefficients.h.size(); + mtz.data.reserve(n * 12); + for (size_t i = 0; i < n; i++) + mtz.data.insert(mtz.data.end(), {static_cast(coefficients.h[i]), + static_cast(coefficients.k[i]), + static_cast(coefficients.l[i]), + coefficients.fp[i], coefficients.fc[i], coefficients.phic[i], + coefficients.fwt[i], coefficients.phwt[i], + coefficients.delfwt[i], coefficients.phdelwt[i], + coefficients.fom[i], + static_cast(coefficients.free_flag[i])}); + mtz.nreflections = static_cast(n); + mtz.write_to_file(filename); +} + +gemmi::Structure PlacedModelStructure(const PlacedModelMessage &model) { + gemmi::Structure st; + st.name = model.name; + st.cell = model.unit_cell; + st.spacegroup_hm = model.model_space_group_name; + const bool has_aniso = !model.aniso.empty(); + gemmi::Model *m = nullptr; + gemmi::Chain *ch = nullptr; + gemmi::Residue *res = nullptr; + for (size_t i = 0; i < model.atom_name.size(); i++) { + if (m == nullptr || m->num != model.model_number[i]) { + m = &st.models.emplace_back(model.model_number[i]); + ch = nullptr; + } + if (ch == nullptr || ch->name != model.chain[i]) { + ch = &m->chains.emplace_back(model.chain[i]); + res = nullptr; + } + const gemmi::SeqId seqid(model.seq_num[i], static_cast(model.icode[i])); + if (res == nullptr || res->name != model.residue_name[i] || res->seqid != seqid + || res->het_flag != static_cast(model.het_flag[i])) { + res = &ch->residues.emplace_back(gemmi::ResidueId{seqid, {}, model.residue_name[i]}); + res->het_flag = static_cast(model.het_flag[i]); + } + gemmi::Atom &a = res->atoms.emplace_back(); + a.name = model.atom_name[i]; + a.element = gemmi::Element(model.element[i]); + a.altloc = static_cast(model.altloc[i]); + a.charge = static_cast(model.charge[i]); + a.pos = gemmi::Position(model.x[i], model.y[i], model.z[i]); + a.b_iso = model.b_iso[i]; + a.occ = model.occupancy[i]; + if (has_aniso) + a.aniso = {model.aniso[6 * i], model.aniso[6 * i + 1], model.aniso[6 * i + 2], + model.aniso[6 * i + 3], model.aniso[6 * i + 4], model.aniso[6 * i + 5]}; + } + st.setup_cell_images(); + return st; +} + +namespace { + +double WallClockSeconds() { + return std::chrono::duration(std::chrono::system_clock::now().time_since_epoch()).count(); +} + +// Rename tmp onto final, unless final is there already and may not be overwritten. +void RenameIntoPlace(const std::string &tmp, const std::string &final_name, bool overwrite, Logger &logger) { + if (!overwrite && std::filesystem::exists(final_name)) { + std::filesystem::remove(tmp); + logger.Error("{} already exists and overwrite is off - not written", final_name); + return; + } + std::filesystem::rename(tmp, final_name); + logger.Info("{} written, renamed into place at wall clock {:.3f} s", final_name, WallClockSeconds()); +} + +} // namespace + +void WriteRugnuxResultFiles(const EndMessage &end, const std::string &file_prefix, bool overwrite, + Logger &logger) { + // A file that cannot be written costs only itself: the master is already in place. + try { + if (end.merged) { + WriteMergedMtz(*end.merged, file_prefix + ".mtz.tmp"); + RenameIntoPlace(file_prefix + ".mtz.tmp", file_prefix + ".mtz", overwrite, logger); + } + } catch (const std::exception &e) { + logger.Error("Cannot write {}.mtz: {}", file_prefix, e.what()); + } + try { + if (end.map_coefficients) { + WriteMapCoefficientsMtz(*end.map_coefficients, file_prefix + "_maps.mtz.tmp"); + RenameIntoPlace(file_prefix + "_maps.mtz.tmp", file_prefix + "_maps.mtz", overwrite, logger); + } + } catch (const std::exception &e) { + logger.Error("Cannot write {}_maps.mtz: {}", file_prefix, e.what()); + } + try { + if (end.placed_model) { + const PlacedModelMessage &model = *end.placed_model; + // WritePlacedModel appends _model.cif and _model.pdb to the prefix it is given. + const std::string tmp_prefix = file_prefix + ".tmp"; + WritePlacedModel(PlacedModelStructure(model), model.unit_cell, + *gemmi::find_spacegroup_by_name(model.space_group_name), tmp_prefix, logger); + for (const std::string suffix : {"_model.cif", "_model.pdb"}) + if (std::filesystem::exists(tmp_prefix + suffix)) + RenameIntoPlace(tmp_prefix + suffix, file_prefix + suffix, overwrite, logger); + } + } catch (const std::exception &e) { + logger.Error("Cannot write {}_model.cif: {}", file_prefix, e.what()); + } +} diff --git a/writer/WriteRugnuxFiles.h b/writer/WriteRugnuxFiles.h new file mode 100644 index 000000000..f2fc6fe5f --- /dev/null +++ b/writer/WriteRugnuxFiles.h @@ -0,0 +1,33 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include + +#include "gemmi/model.hpp" + +#include "../common/JFJochMessages.h" + +class Logger; + +// The files rugnux writes beside its merged output, made from the structured END-message blocks +// (common/JFJochMessages.h), so that jfjoch_writer can write them with no analysis library. rugnux +// writes its own .mtz and _maps.mtz through the same two functions. + +// .mtz: H K L IMEAN SIGIMEAN [I(+) SIGI(+) I(-) SIGI(-)] F SIGF [F(+) SIGF(+) F(-) SIGF(-)] +// FreeR_flag, the bracketed columns only where the block has them. +void WriteMergedMtz(const MergedReflectionsMessage &merged, const std::string &filename); + +// _maps.mtz: H K L FP FC PHIC FWT PHWT DELFWT PHDELWT FOM FREE. +void WriteMapCoefficientsMtz(const MapCoefficientsMessage &coefficients, const std::string &filename); + +// The model the block describes, for WritePlacedModel (writer/WriteModel.h). +gemmi::Structure PlacedModelStructure(const PlacedModelMessage &model); + +// The three files above, from whichever blocks `end` carries, at .mtz, _maps.mtz and +// _model.cif (WritePlacedModel adds _model.pdb where a PDB can hold the cell). Each is written under a +// temporary name and renamed into place. An existing file is replaced only with `overwrite`; otherwise +// it is kept and the new one is not written. +void WriteRugnuxResultFiles(const EndMessage &end, const std::string &file_prefix, bool overwrite, + Logger &logger); -- 2.54.0 From 3a44779d798565895755b2c4e5da193821bbe4c2 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 12:20:38 +0200 Subject: [PATCH 22/81] broker: rugnux live - rugnux runs inside the broker while a DECTRIS rotation collection arrives (demo prototype) A DECTRIS rotation collection, with the mode switched on (PUT /config/rugnux), goes to JFJochReceiverRugnux instead of JFJochReceiverLite: the images are forwarded as before, without the per-image analysis, and one rugnux thread reads them back from the image buffer (JFJochImageBufferReader) as they arrive. END waits for rugnux and carries its lattice, refined geometry and per-image results. A small second run on the first 60 degrees reports early whether there is a lattice. The live state, steps and result are at GET /rugnux/status and on a new "Rugnux live" frontend page. rugnux: ProcessConfig::fast_live takes every decision where it is first made and does nothing again once the sweep is in (near-tie re-checks and the run made again, rotation-scale walk, metric-symmetry arms, geometry walk, the supercell and quality guards, the doubled cell), so the run ends a fixed time after the last image. A cut (/cancel, or deadline_s after the last image) hands over what is established. Off by default: the CLI and the battery are unchanged (--fast-live is hidden, with --simulate-live). With the mode off the broker is unchanged. Not built yet. Co-Authored-By: Claude Opus 5.5 --- broker/JFJochBrokerHttp.cpp | 57 ++- broker/JFJochBrokerHttp.h | 8 + broker/JFJochBrokerParser.cpp | 9 + broker/JFJochBrokerParser.h | 2 + broker/JFJochServices.cpp | 49 ++ broker/JFJochServices.h | 16 + broker/JFJochStateMachine.cpp | 29 ++ broker/JFJochStateMachine.h | 6 + broker/OpenAPIConvert.cpp | 54 ++ broker/OpenAPIConvert.h | 3 + broker/gen/model/Jfjoch_settings.cpp | 32 +- broker/gen/model/Jfjoch_settings.h | 10 + broker/gen/model/Rugnux_live_status.cpp | 484 ++++++++++++++++++ broker/gen/model/Rugnux_live_status.h | 204 ++++++++ broker/gen/model/Rugnux_live_step.cpp | 168 ++++++ broker/gen/model/Rugnux_live_step.h | 101 ++++ broker/gen/model/Rugnux_settings.cpp | 192 +++++++ broker/gen/model/Rugnux_settings.h | 96 ++++ broker/gen/model/Rugnux_status.cpp | 177 +++++++ broker/gen/model/Rugnux_status.h | 108 ++++ broker/gen/model/Rugnux_summary_row.cpp | 105 ++++ broker/gen/model/Rugnux_summary_row.h | 84 +++ broker/jfjoch_api.yaml | 293 +++++++++++ broker/jfjoch_broker.cpp | 1 + common/ParallelFor.h | 27 + docs/JFJOCH_BROKER.md | 21 + docs/python_client/README.md | 11 + docs/python_client/docs/DefaultApi.md | 483 +++++++++++++++++ docs/python_client/docs/JfjochSettings.md | 1 + docs/python_client/docs/RugnuxLiveStatus.md | 43 ++ docs/python_client/docs/RugnuxLiveStep.md | 32 ++ docs/python_client/docs/RugnuxSettings.md | 31 ++ docs/python_client/docs/RugnuxStatus.md | 32 ++ docs/python_client/docs/RugnuxSummaryRow.md | 30 ++ frontend/src/App.tsx | 11 +- .../src/client/@tanstack/react-query.gen.ts | 112 +++- frontend/src/client/index.ts | 4 +- frontend/src/client/sdk.gen.ts | 104 +++- frontend/src/client/types.gen.ts | 295 +++++++++++ frontend/src/client/zod.gen.ts | 83 ++- frontend/src/components/RugnuxPage.tsx | 166 ++++++ frontend/src/components/RugnuxParts.tsx | 88 ++++ frontend/src/components/RugnuxSettings.tsx | 94 ++++ frontend/src/components/RugnuxStatus.tsx | 62 +++ frontend/src/components/RugnuxTimeline.tsx | 174 +++++++ reader/CMakeLists.txt | 2 + reader/JFJochImageBufferReader.cpp | 69 +++ reader/JFJochImageBufferReader.h | 40 ++ reader/JFJochStartMessageReader.cpp | 131 +++-- reader/JFJochStartMessageReader.h | 5 + receiver/CMakeLists.txt | 4 +- receiver/JFJochReceiver.cpp | 1 + receiver/JFJochReceiver.h | 3 + receiver/JFJochReceiverRugnux.cpp | 482 +++++++++++++++++ receiver/JFJochReceiverRugnux.h | 87 ++++ receiver/JFJochReceiverService.cpp | 28 + receiver/JFJochReceiverService.h | 13 + receiver/RugnuxLiveStatus.cpp | 95 ++++ receiver/RugnuxLiveStatus.h | 71 +++ rugnux/CMakeLists.txt | 2 + rugnux/Rugnux.cpp | 17 +- rugnux/Rugnux.h | 15 + rugnux/RugnuxImagePass.cpp | 16 +- rugnux/RugnuxLive.cpp | 57 +++ rugnux/RugnuxLive.h | 21 + rugnux/RugnuxPasses.cpp | 23 +- rugnux/RugnuxScaleMerge.cpp | 12 +- rugnux/rugnux_cli.cpp | 9 + 68 files changed, 5295 insertions(+), 100 deletions(-) create mode 100644 broker/gen/model/Rugnux_live_status.cpp create mode 100644 broker/gen/model/Rugnux_live_status.h create mode 100644 broker/gen/model/Rugnux_live_step.cpp create mode 100644 broker/gen/model/Rugnux_live_step.h create mode 100644 broker/gen/model/Rugnux_settings.cpp create mode 100644 broker/gen/model/Rugnux_settings.h create mode 100644 broker/gen/model/Rugnux_status.cpp create mode 100644 broker/gen/model/Rugnux_status.h create mode 100644 broker/gen/model/Rugnux_summary_row.cpp create mode 100644 broker/gen/model/Rugnux_summary_row.h create mode 100644 docs/python_client/docs/RugnuxLiveStatus.md create mode 100644 docs/python_client/docs/RugnuxLiveStep.md create mode 100644 docs/python_client/docs/RugnuxSettings.md create mode 100644 docs/python_client/docs/RugnuxStatus.md create mode 100644 docs/python_client/docs/RugnuxSummaryRow.md create mode 100644 frontend/src/components/RugnuxPage.tsx create mode 100644 frontend/src/components/RugnuxParts.tsx create mode 100644 frontend/src/components/RugnuxSettings.tsx create mode 100644 frontend/src/components/RugnuxStatus.tsx create mode 100644 frontend/src/components/RugnuxTimeline.tsx create mode 100644 reader/JFJochImageBufferReader.cpp create mode 100644 reader/JFJochImageBufferReader.h create mode 100644 receiver/JFJochReceiverRugnux.cpp create mode 100644 receiver/JFJochReceiverRugnux.h create mode 100644 receiver/RugnuxLiveStatus.cpp create mode 100644 receiver/RugnuxLiveStatus.h create mode 100644 rugnux/RugnuxLive.cpp create mode 100644 rugnux/RugnuxLive.h diff --git a/broker/JFJochBrokerHttp.cpp b/broker/JFJochBrokerHttp.cpp index b722a6600..88cd13b6c 100644 --- a/broker/JFJochBrokerHttp.cpp +++ b/broker/JFJochBrokerHttp.cpp @@ -7,6 +7,7 @@ #include #include +#include #include #include #include @@ -152,7 +153,10 @@ static const std::set PROTECTED_PATHS{ "/image_buffer/image.tiff", "/preview/plot", "/preview/plot.bin", - "/live/events" + "/live/events", + "/config/rugnux", + "/config/rugnux/model", + "/rugnux/status" }; std::optional JFJochBrokerHttp::AuthorizationHeader(const httplib::Request &req) { @@ -251,6 +255,11 @@ void JFJochBrokerHttp::register_routes(httplib::Server &server) { server.Post("/config/image_format/raw", bind_noarg(&JFJochBrokerHttp::config_image_format_raw_post)); server.Get("/config/indexing", bind_noarg(&JFJochBrokerHttp::config_indexing_get)); server.Put("/config/indexing", bind_json(&JFJochBrokerHttp::config_indexing_put, Indexing_settings{})); + server.Get("/config/rugnux", bind_noarg(&JFJochBrokerHttp::config_rugnux_get)); + server.Put("/config/rugnux", bind_json(&JFJochBrokerHttp::config_rugnux_put, Rugnux_settings{})); + server.Put("/config/rugnux/model", bind_req(&JFJochBrokerHttp::config_rugnux_model_put)); + server.Delete("/config/rugnux/model", bind_noarg(&JFJochBrokerHttp::config_rugnux_model_delete)); + server.Get("/rugnux/status", bind_noarg(&JFJochBrokerHttp::rugnux_status_get)); server.Get("/config/bragg_integration", bind_noarg(&JFJochBrokerHttp::config_bragg_integration_get)); server.Put("/config/bragg_integration", bind_json(&JFJochBrokerHttp::config_bragg_integration_put, Bragg_integration_settings{})); server.Get("/config/instrument", bind_noarg(&JFJochBrokerHttp::config_instrument_get)); @@ -963,6 +972,52 @@ void JFJochBrokerHttp::config_indexing_put(const Indexing_settings &indexingSett response.status = 200; } +void JFJochBrokerHttp::config_rugnux_get(httplib::Response &response) { + const RugnuxLiveSettings s = state_machine.GetRugnuxLive(); + Rugnux_status ret; + ret.setEnable(s.enable); + ret.setReservedCpus(s.reserved_cpus); + ret.setDeadlineS(s.deadline_s); + ret.setModelLoaded(!s.model_path.empty()); + if (!s.model_path.empty()) + ret.setModelSizeBytes(static_cast(std::filesystem::file_size(s.model_path))); + ProcessOutput(ret, response); +} + +void JFJochBrokerHttp::config_rugnux_put(const Rugnux_settings &rugnuxSettings, + httplib::Response &response) { + state_machine.SetRugnuxLive(rugnuxSettings.isEnable(), rugnuxSettings.getReservedCpus(), + rugnuxSettings.getDeadlineS()); + response.status = 200; +} + +void JFJochBrokerHttp::config_rugnux_model_put(const httplib::Request &request, + httplib::Response &response) { + if (request.body.empty()) { + response.status = 400; + response.set_content("Request body cannot be empty", "text/plain"); + return; + } + if (request.body.size() > 64 * 1024 * 1024) { + response.status = 413; + response.set_content("Model cannot be larger than 64 MiB", "text/plain"); + return; + } + state_machine.SetRugnuxModel(request.body); + logger.Info("Rugnux model uploaded ({} bytes)", request.body.size()); + response.status = 200; +} + +void JFJochBrokerHttp::config_rugnux_model_delete(httplib::Response &response) { + state_machine.SetRugnuxModel(""); + logger.Info("Rugnux model removed"); + response.status = 200; +} + +void JFJochBrokerHttp::rugnux_status_get(httplib::Response &response) { + ProcessOutput(Convert(state_machine.GetRugnuxStatus()), response); +} + void JFJochBrokerHttp::config_bragg_integration_get(httplib::Response &response) { ProcessOutput(Convert(state_machine.GetBraggIntegrationSettings()), response); } diff --git a/broker/JFJochBrokerHttp.h b/broker/JFJochBrokerHttp.h index 8d42a4593..3528ab5d3 100644 --- a/broker/JFJochBrokerHttp.h +++ b/broker/JFJochBrokerHttp.h @@ -34,6 +34,8 @@ #include "gen/model/Jfjoch_statistics.h" #include "gen/model/Plots.h" #include "gen/model/Roi_definitions.h" +#include "gen/model/Rugnux_settings.h" +#include "gen/model/Rugnux_status.h" #include "gen/model/Scan_result.h" #include "gen/model/Spot_finding_settings.h" #include "gen/model/Zeromq_metadata_settings.h" @@ -198,6 +200,12 @@ class JFJochBrokerHttp { void config_indexing_get(httplib::Response &response); void config_indexing_put(const org::openapitools::server::model::Indexing_settings &indexingSettings, httplib::Response &response); + void config_rugnux_get(httplib::Response &response); + void config_rugnux_put(const org::openapitools::server::model::Rugnux_settings &rugnuxSettings, + httplib::Response &response); + void config_rugnux_model_put(const httplib::Request &request, httplib::Response &response); + void config_rugnux_model_delete(httplib::Response &response); + void rugnux_status_get(httplib::Response &response); void config_bragg_integration_get(httplib::Response &response); void config_bragg_integration_put(const org::openapitools::server::model::Bragg_integration_settings &braggIntegrationSettings, httplib::Response &response); diff --git a/broker/JFJochBrokerParser.cpp b/broker/JFJochBrokerParser.cpp index 7f4efcfbc..45409ca9c 100644 --- a/broker/JFJochBrokerParser.cpp +++ b/broker/JFJochBrokerParser.cpp @@ -276,6 +276,15 @@ void ParseReceiverSettings(const org::openapitools::server::model::Jfjoch_settin } } +void ParseRugnuxSettings(const org::openapitools::server::model::Jfjoch_settings &input, JFJochServices &services) { + if (input.rugnuxIsSet()) + services.SetRugnuxLive(RugnuxLiveSettings{ + .enable = input.getRugnux().isEnable(), + .reserved_cpus = input.getRugnux().getReservedCpus(), + .deadline_s = input.getRugnux().getDeadlineS() + }); +} + SpotFindingSettings ParseSpotFindingSettings(const org::openapitools::server::model::Jfjoch_settings &input) { if (input.spotFindingIsSet()) return Convert(input.getSpotFinding()); diff --git a/broker/JFJochBrokerParser.h b/broker/JFJochBrokerParser.h index f5f2f8399..aff60a211 100644 --- a/broker/JFJochBrokerParser.h +++ b/broker/JFJochBrokerParser.h @@ -7,6 +7,7 @@ #include "../acquisition_device/AcquisitionDeviceGroup.h" #include "../image_pusher/ImagePusher.h" #include "../receiver/JFJochReceiverService.h" +#include "JFJochServices.h" #include "gen/model/Jfjoch_settings.h" DetectorGeometryModular ParseStandardDetectorGeometry(const org::openapitools::server::model::Detector &j); @@ -20,4 +21,5 @@ std::unique_ptr ParseImagePusher(const org::openapitools::server::m void ParseAcquisitionDeviceGroup(const org::openapitools::server::model::Jfjoch_settings &input, AcquisitionDeviceGroup &aq_devices); void ParseReceiverSettings(const org::openapitools::server::model::Jfjoch_settings &input, JFJochReceiverService &service); +void ParseRugnuxSettings(const org::openapitools::server::model::Jfjoch_settings &input, JFJochServices &services); SpotFindingSettings ParseSpotFindingSettings(const org::openapitools::server::model::Jfjoch_settings &input); diff --git a/broker/JFJochServices.cpp b/broker/JFJochServices.cpp index 8eb9edb96..8bd4ff15c 100644 --- a/broker/JFJochServices.cpp +++ b/broker/JFJochServices.cpp @@ -2,6 +2,10 @@ // SPDX-License-Identifier: GPL-3.0-only #include "JFJochServices.h" + +#include +#include +#include #include "../common/JFJochException.h" #include "../detector_control/SLSDetectorWrapper.h" #include "../detector_control/DectrisDetectorWrapper.h" @@ -370,6 +374,51 @@ void JFJochServices::SetupIndexing(const IndexingSettings &input) { receiver->Indexing(input); } +void JFJochServices::SetRugnuxLive(const RugnuxLiveSettings &input) { + if (receiver) + receiver->RugnuxLive(input.enable, input.model_path, input.reserved_cpus, input.deadline_s); + rugnux = input; +} + +RugnuxLiveSettings JFJochServices::GetRugnuxLive() const { + return rugnux; +} + +RugnuxLiveSnapshot JFJochServices::GetRugnuxStatus() const { + if (receiver) + return receiver->GetRugnuxStatus(); + return {}; +} + +void JFJochServices::SetRugnuxModel(const std::string &model) { + RugnuxLiveSettings s = rugnux; + if (!s.model_path.empty()) + std::filesystem::remove(s.model_path); + s.model_path.clear(); + + if (!model.empty()) { + if (rugnux_model_dir.empty()) { + char dir[] = "/tmp/jfjoch_rugnux_XXXXXX"; // mkdtemp creates it 0700 + if (mkdtemp(dir) == nullptr) + throw JFJochException(JFJochExceptionCategory::FileWriteError, + "Cannot create directory for the rugnux model"); + rugnux_model_dir = dir; + } + // gemmi detects PDB/mmCIF from the content, but gzip only from the extension + const bool gzipped = model.size() >= 2 && model[0] == '\x1f' && model[1] == '\x8b'; + s.model_path = rugnux_model_dir + (gzipped ? "/model.gz" : "/model"); + { + std::ofstream f(s.model_path, std::ios::binary); + f.write(model.data(), static_cast(model.size())); + if (!f) + throw JFJochException(JFJochExceptionCategory::FileWriteError, "Cannot write the rugnux model"); + } + std::filesystem::permissions(s.model_path, + std::filesystem::perms::owner_read | std::filesystem::perms::owner_write); + } + SetRugnuxLive(s); +} + LiveCollection *JFJochServices::GetLiveCollection() { return receiver ? receiver->GetLiveCollection() : nullptr; } diff --git a/broker/JFJochServices.h b/broker/JFJochServices.h index 01f051cc0..3a732c20d 100644 --- a/broker/JFJochServices.h +++ b/broker/JFJochServices.h @@ -14,6 +14,13 @@ struct JFJochServicesOutput { JFJochReceiverOutput receiver_output; }; +struct RugnuxLiveSettings { + bool enable = false; + int64_t reserved_cpus = 4; + double deadline_s = 0; // the analysis is cut this long after the last image (0 = never) + std::string model_path; // empty = no model +}; + class JFJochServices { mutable std::shared_timed_mutex detector_mutex; @@ -22,6 +29,9 @@ class JFJochServices { std::shared_ptr image_puller; std::atomic cannot_stop_detector = false; + + RugnuxLiveSettings rugnux; + std::string rugnux_model_dir; // private directory, created at the first model upload Logger &logger; public: explicit JFJochServices(Logger &in_logger); @@ -76,6 +86,12 @@ public: void SetupIndexing(const IndexingSettings& input); + void SetRugnuxLive(const RugnuxLiveSettings &input); + RugnuxLiveSettings GetRugnuxLive() const; + // The model file is written 0600 into a private directory; an empty model removes it + void SetRugnuxModel(const std::string &model); + RugnuxLiveSnapshot GetRugnuxStatus() const; + ImagePusherStatus GetImagePusherStatus() const; LiveCollection *GetLiveCollection(); }; diff --git a/broker/JFJochStateMachine.cpp b/broker/JFJochStateMachine.cpp index 1b93ad2a7..47dacea7f 100644 --- a/broker/JFJochStateMachine.cpp +++ b/broker/JFJochStateMachine.cpp @@ -1209,6 +1209,35 @@ IndexingSettings JFJochStateMachine::GetIndexingSettings() const { return experiment.GetIndexingSettings(); } +void JFJochStateMachine::SetRugnuxLive(bool enable, int64_t reserved_cpus, double deadline_s) { + std::unique_lock ul(m); + if (IsRunning()) + throw WrongDAQStateException("Cannot change rugnux settings during data collection"); + std::unique_lock ul2(rugnux_mutex); + RugnuxLiveSettings s = services.GetRugnuxLive(); + s.enable = enable; + s.reserved_cpus = reserved_cpus; + s.deadline_s = deadline_s; + services.SetRugnuxLive(s); +} + +void JFJochStateMachine::SetRugnuxModel(const std::string &model) { + std::unique_lock ul(m); + if (IsRunning()) + throw WrongDAQStateException("Cannot change rugnux model during data collection"); + std::unique_lock ul2(rugnux_mutex); + services.SetRugnuxModel(model); +} + +RugnuxLiveSettings JFJochStateMachine::GetRugnuxLive() const { + std::unique_lock ul(rugnux_mutex); + return services.GetRugnuxLive(); +} + +RugnuxLiveSnapshot JFJochStateMachine::GetRugnuxStatus() const { + return services.GetRugnuxStatus(); +} + void JFJochStateMachine::SetIndexingSettings(const IndexingSettings &input) { std::unique_lock ul(m); if (IsRunning()) diff --git a/broker/JFJochStateMachine.h b/broker/JFJochStateMachine.h index a28d9cecc..ca053658a 100644 --- a/broker/JFJochStateMachine.h +++ b/broker/JFJochStateMachine.h @@ -90,6 +90,7 @@ class JFJochStateMachine { mutable std::mutex experiment_file_writer_settings_mutex; mutable std::mutex experiment_indexing_settings_mutex; mutable std::mutex experiment_dark_mask_settings_mutex; + mutable std::mutex rugnux_mutex; DiffractionExperiment experiment; // mutex m is protecting: @@ -247,6 +248,11 @@ public: void SetIndexingSettings(const IndexingSettings &input); IndexingSettings GetIndexingSettings() const; + void SetRugnuxLive(bool enable, int64_t reserved_cpus, double deadline_s); + void SetRugnuxModel(const std::string &model); // empty = remove the model + RugnuxLiveSettings GetRugnuxLive() const; + RugnuxLiveSnapshot GetRugnuxStatus() const; + void SetBraggIntegrationSettings(const BraggIntegrationSettings &input); BraggIntegrationSettings GetBraggIntegrationSettings() const; PixelMaskStatistics GetPixelMaskStatistics() const; diff --git a/broker/OpenAPIConvert.cpp b/broker/OpenAPIConvert.cpp index 8cf6f8e6d..5f8a85376 100644 --- a/broker/OpenAPIConvert.cpp +++ b/broker/OpenAPIConvert.cpp @@ -1221,6 +1221,60 @@ DarkMaskSettings Convert(const org::openapitools::server::model::Dark_mask_setti return ret; } +org::openapitools::server::model::Rugnux_live_status Convert(const RugnuxLiveSnapshot& input) { + org::openapitools::server::model::Rugnux_live_status ret; + switch (input.state) { + case RugnuxLiveState::Idle: ret.setState("Idle"); break; + case RugnuxLiveState::Running: ret.setState("Running"); break; + case RugnuxLiveState::Done: ret.setState("Done"); break; + case RugnuxLiveState::Failed: ret.setState("Failed"); break; + case RugnuxLiveState::Cancelled: ret.setState("Cancelled"); break; + case RugnuxLiveState::Skipped: ret.setState("Skipped"); break; + } + ret.setMessage(input.message); + ret.setImagesExpected(input.images_expected); + ret.setImagesReceived(input.images_received); + ret.setElapsedS(input.elapsed_s); + ret.setProbe(input.probe); + if (input.probe_s) + ret.setProbeS(input.probe_s.value()); + if (input.step_progress) + ret.setStepProgress(input.step_progress.value()); + + std::vector steps; + for (const auto &s: input.steps) { + org::openapitools::server::model::Rugnux_live_step step; + step.setTitle(s.title); + step.setStartedS(s.started_s); + if (s.duration_s) + step.setDurationS(s.duration_s.value()); + step.setNotes(s.notes); + steps.push_back(step); + } + ret.setSteps(steps); + + if (input.last_image_s) + ret.setLastImageS(input.last_image_s.value()); + ret.setCut(input.cut); + if (input.cut_s) + ret.setCutS(input.cut_s.value()); + if (input.last_image_to_written_s) + ret.setLastImageToWrittenS(input.last_image_to_written_s.value()); + ret.setVerdict(input.verdict); + ret.setVerdictText(input.verdict_text); + + std::vector summary; + for (const auto &[label, value]: input.summary) { + org::openapitools::server::model::Rugnux_summary_row row; + row.setLabel(label); + row.setValue(value); + summary.push_back(row); + } + ret.setSummary(summary); + ret.setWarnings(input.warnings); + return ret; +} + org::openapitools::server::model::Image_pusher_status Convert(const ImagePusherStatus& input) { org::openapitools::server::model::Image_pusher_status ret; ret.setAddr(input.address); diff --git a/broker/OpenAPIConvert.h b/broker/OpenAPIConvert.h index fd36ea1da..6556cc0bc 100644 --- a/broker/OpenAPIConvert.h +++ b/broker/OpenAPIConvert.h @@ -30,6 +30,7 @@ #include "gen/model/Indexing_settings.h" #include "gen/model/Bragg_integration_settings.h" #include "gen/model/Scan_result.h" +#include "gen/model/Rugnux_live_status.h" #include "../common/JFJochMessages.h" #include "../common/DatasetSettings.h" @@ -41,6 +42,7 @@ #include "../common/InstrumentMetadata.h" #include "../common/ScanResult.h" #include "../image_pusher/ImagePusher.h" +#include "../receiver/RugnuxLiveStatus.h" SpotFindingSettings Convert(const org::openapitools::server::model::Spot_finding_settings &input); org::openapitools::server::model::Spot_finding_settings Convert(const SpotFindingSettings &input); @@ -99,4 +101,5 @@ org::openapitools::server::model::Dark_mask_settings Convert(const DarkMaskSetti DarkMaskSettings Convert(const org::openapitools::server::model::Dark_mask_settings& input); org::openapitools::server::model::Image_pusher_status Convert(const ImagePusherStatus& input); +org::openapitools::server::model::Rugnux_live_status Convert(const RugnuxLiveSnapshot& input); diff --git a/broker/gen/model/Jfjoch_settings.cpp b/broker/gen/model/Jfjoch_settings.cpp index fb16b7494..9ea19e055 100644 --- a/broker/gen/model/Jfjoch_settings.cpp +++ b/broker/gen/model/Jfjoch_settings.cpp @@ -44,6 +44,7 @@ Jfjoch_settings::Jfjoch_settings() m_Zeromq_previewIsSet = false; m_Zeromq_metadataIsSet = false; m_Dark_maskIsSet = false; + m_RugnuxIsSet = false; } @@ -141,7 +142,7 @@ bool Jfjoch_settings::validate(std::stringstream& msg, const std::string& pathPr } } - + return success; } @@ -211,7 +212,10 @@ bool Jfjoch_settings::operator==(const Jfjoch_settings& rhs) const ((!zeromqMetadataIsSet() && !rhs.zeromqMetadataIsSet()) || (zeromqMetadataIsSet() && rhs.zeromqMetadataIsSet() && getZeromqMetadata() == rhs.getZeromqMetadata())) && - ((!darkMaskIsSet() && !rhs.darkMaskIsSet()) || (darkMaskIsSet() && rhs.darkMaskIsSet() && getDarkMask() == rhs.getDarkMask())) + ((!darkMaskIsSet() && !rhs.darkMaskIsSet()) || (darkMaskIsSet() && rhs.darkMaskIsSet() && getDarkMask() == rhs.getDarkMask())) && + + + ((!rugnuxIsSet() && !rhs.rugnuxIsSet()) || (rugnuxIsSet() && rhs.rugnuxIsSet() && getRugnux() == rhs.getRugnux())) ; } @@ -263,6 +267,8 @@ void to_json(nlohmann::json& j, const Jfjoch_settings& o) j["zeromq_metadata"] = o.m_Zeromq_metadata; if(o.darkMaskIsSet()) j["dark_mask"] = o.m_Dark_mask; + if(o.rugnuxIsSet()) + j["rugnux"] = o.m_Rugnux; } @@ -361,6 +367,11 @@ void from_json(const nlohmann::json& j, Jfjoch_settings& o) j.at("dark_mask").get_to(o.m_Dark_mask); o.m_Dark_maskIsSet = true; } + if(j.find("rugnux") != j.end()) + { + j.at("rugnux").get_to(o.m_Rugnux); + o.m_RugnuxIsSet = true; + } } @@ -694,6 +705,23 @@ void Jfjoch_settings::unsetDark_mask() { m_Dark_maskIsSet = false; } +org::openapitools::server::model::Rugnux_settings Jfjoch_settings::getRugnux() const +{ + return m_Rugnux; +} +void Jfjoch_settings::setRugnux(org::openapitools::server::model::Rugnux_settings const& value) +{ + m_Rugnux = value; + m_RugnuxIsSet = true; +} +bool Jfjoch_settings::rugnuxIsSet() const +{ + return m_RugnuxIsSet; +} +void Jfjoch_settings::unsetRugnux() +{ + m_RugnuxIsSet = false; +} } // namespace org::openapitools::server::model diff --git a/broker/gen/model/Jfjoch_settings.h b/broker/gen/model/Jfjoch_settings.h index 434ebd2c4..f9033a435 100644 --- a/broker/gen/model/Jfjoch_settings.h +++ b/broker/gen/model/Jfjoch_settings.h @@ -31,6 +31,7 @@ #include "Image_format_settings.h" #include "Zeromq_metadata_settings.h" #include "Detector_settings.h" +#include "Rugnux_settings.h" #include #include "Indexing_settings.h" #include "Detector.h" @@ -216,6 +217,13 @@ public: void setDarkMask(org::openapitools::server::model::Dark_mask_settings const& value); bool darkMaskIsSet() const; void unsetDark_mask(); + ///

+ /// + /// + org::openapitools::server::model::Rugnux_settings getRugnux() const; + void setRugnux(org::openapitools::server::model::Rugnux_settings const& value); + bool rugnuxIsSet() const; + void unsetRugnux(); friend void to_json(nlohmann::json& j, const Jfjoch_settings& o); friend void from_json(const nlohmann::json& j, Jfjoch_settings& o); @@ -262,6 +270,8 @@ protected: bool m_Zeromq_metadataIsSet; org::openapitools::server::model::Dark_mask_settings m_Dark_mask; bool m_Dark_maskIsSet; + org::openapitools::server::model::Rugnux_settings m_Rugnux; + bool m_RugnuxIsSet; }; diff --git a/broker/gen/model/Rugnux_live_status.cpp b/broker/gen/model/Rugnux_live_status.cpp new file mode 100644 index 000000000..765004d94 --- /dev/null +++ b/broker/gen/model/Rugnux_live_status.cpp @@ -0,0 +1,484 @@ +/** +* Jungfraujoch +* API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. +* +* The version of the OpenAPI document: 1.0.0-rc.175 +* Contact: filip.leonarski@psi.ch +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ + + +#include "Rugnux_live_status.h" +#include "Helpers.h" + +#include + +namespace org::openapitools::server::model +{ + +Rugnux_live_status::Rugnux_live_status() +{ + m_State = ""; + m_Probe = ""; + m_Probe_s = 0.0; + m_Probe_sIsSet = false; + m_Message = ""; + m_Images_expected = 0L; + m_Images_received = 0L; + m_Elapsed_s = 0.0; + m_Step_progress = 0.0f; + m_Step_progressIsSet = false; + m_Last_image_s = 0.0; + m_Last_image_sIsSet = false; + m_Cut = ""; + m_CutIsSet = false; + m_Cut_s = 0.0; + m_Cut_sIsSet = false; + m_Last_image_to_written_s = 0.0; + m_Last_image_to_written_sIsSet = false; + m_Verdict = ""; + m_Verdict_text = ""; + +} + +void Rugnux_live_status::validate() const +{ + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } +} + +bool Rugnux_live_status::validate(std::stringstream& msg) const +{ + return validate(msg, ""); +} + +bool Rugnux_live_status::validate(std::stringstream& msg, const std::string& pathPrefix) const +{ + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "Rugnux_live_status" : pathPrefix; + + + if (stepProgressIsSet()) + { + const float& value = m_Step_progress; + const std::string currentValuePath = _pathPrefix + ".stepProgress"; + + + if (value < static_cast(0.0)) + { + success = false; + msg << currentValuePath << ": must be greater than or equal to 0.0;"; + } + if (value > static_cast(1.0)) + { + success = false; + msg << currentValuePath << ": must be less than or equal to 1.0;"; + } + + } + + + /* Steps */ { + const std::vector& value = m_Steps; + const std::string currentValuePath = _pathPrefix + ".steps"; + + + { // Recursive validation of array elements + const std::string oldValuePath = currentValuePath; + int i = 0; + for (const org::openapitools::server::model::Rugnux_live_step& value : value) + { + const std::string currentValuePath = oldValuePath + "[" + std::to_string(i) + "]"; + + success = value.validate(msg, currentValuePath + ".steps") && success; + + i++; + } + } + + } + + + /* Summary */ { + const std::vector& value = m_Summary; + const std::string currentValuePath = _pathPrefix + ".summary"; + + + { // Recursive validation of array elements + const std::string oldValuePath = currentValuePath; + int i = 0; + for (const org::openapitools::server::model::Rugnux_summary_row& value : value) + { + const std::string currentValuePath = oldValuePath + "[" + std::to_string(i) + "]"; + + success = value.validate(msg, currentValuePath + ".summary") && success; + + i++; + } + } + + } + + + /* Warnings */ { + const std::vector& value = m_Warnings; + const std::string currentValuePath = _pathPrefix + ".warnings"; + + + { // Recursive validation of array elements + const std::string oldValuePath = currentValuePath; + int i = 0; + for (const std::string& value : value) + { + const std::string currentValuePath = oldValuePath + "[" + std::to_string(i) + "]"; + + + + i++; + } + } + + } + + return success; +} + +bool Rugnux_live_status::operator==(const Rugnux_live_status& rhs) const +{ + return + + + (getState() == rhs.getState()) + && + + (getProbe() == rhs.getProbe()) + && + + + ((!probeSIsSet() && !rhs.probeSIsSet()) || (probeSIsSet() && rhs.probeSIsSet() && getProbeS() == rhs.getProbeS())) && + + (getMessage() == rhs.getMessage()) + && + + (getImagesExpected() == rhs.getImagesExpected()) + && + + (getImagesReceived() == rhs.getImagesReceived()) + && + + (getElapsedS() == rhs.getElapsedS()) + && + + + ((!stepProgressIsSet() && !rhs.stepProgressIsSet()) || (stepProgressIsSet() && rhs.stepProgressIsSet() && getStepProgress() == rhs.getStepProgress())) && + + (getSteps() == rhs.getSteps()) + && + + + ((!lastImageSIsSet() && !rhs.lastImageSIsSet()) || (lastImageSIsSet() && rhs.lastImageSIsSet() && getLastImageS() == rhs.getLastImageS())) && + + + ((!cutIsSet() && !rhs.cutIsSet()) || (cutIsSet() && rhs.cutIsSet() && getCut() == rhs.getCut())) && + + + ((!cutSIsSet() && !rhs.cutSIsSet()) || (cutSIsSet() && rhs.cutSIsSet() && getCutS() == rhs.getCutS())) && + + + ((!lastImageToWrittenSIsSet() && !rhs.lastImageToWrittenSIsSet()) || (lastImageToWrittenSIsSet() && rhs.lastImageToWrittenSIsSet() && getLastImageToWrittenS() == rhs.getLastImageToWrittenS())) && + + (getVerdict() == rhs.getVerdict()) + && + + (getVerdictText() == rhs.getVerdictText()) + && + + (getSummary() == rhs.getSummary()) + && + + (getWarnings() == rhs.getWarnings()) + + + ; +} + +bool Rugnux_live_status::operator!=(const Rugnux_live_status& rhs) const +{ + return !(*this == rhs); +} + +void to_json(nlohmann::json& j, const Rugnux_live_status& o) +{ + j = nlohmann::json::object(); + j["state"] = o.m_State; + j["probe"] = o.m_Probe; + if(o.probeSIsSet()) + j["probe_s"] = o.m_Probe_s; + j["message"] = o.m_Message; + j["images_expected"] = o.m_Images_expected; + j["images_received"] = o.m_Images_received; + j["elapsed_s"] = o.m_Elapsed_s; + if(o.stepProgressIsSet()) + j["step_progress"] = o.m_Step_progress; + j["steps"] = o.m_Steps; + if(o.lastImageSIsSet()) + j["last_image_s"] = o.m_Last_image_s; + if(o.cutIsSet()) + j["cut"] = o.m_Cut; + if(o.cutSIsSet()) + j["cut_s"] = o.m_Cut_s; + if(o.lastImageToWrittenSIsSet()) + j["last_image_to_written_s"] = o.m_Last_image_to_written_s; + j["verdict"] = o.m_Verdict; + j["verdict_text"] = o.m_Verdict_text; + j["summary"] = o.m_Summary; + j["warnings"] = o.m_Warnings; + +} + +void from_json(const nlohmann::json& j, Rugnux_live_status& o) +{ + j.at("state").get_to(o.m_State); + j.at("probe").get_to(o.m_Probe); + if(j.find("probe_s") != j.end()) + { + j.at("probe_s").get_to(o.m_Probe_s); + o.m_Probe_sIsSet = true; + } + j.at("message").get_to(o.m_Message); + j.at("images_expected").get_to(o.m_Images_expected); + j.at("images_received").get_to(o.m_Images_received); + j.at("elapsed_s").get_to(o.m_Elapsed_s); + if(j.find("step_progress") != j.end()) + { + j.at("step_progress").get_to(o.m_Step_progress); + o.m_Step_progressIsSet = true; + } + j.at("steps").get_to(o.m_Steps); + if(j.find("last_image_s") != j.end()) + { + j.at("last_image_s").get_to(o.m_Last_image_s); + o.m_Last_image_sIsSet = true; + } + if(j.find("cut") != j.end()) + { + j.at("cut").get_to(o.m_Cut); + o.m_CutIsSet = true; + } + if(j.find("cut_s") != j.end()) + { + j.at("cut_s").get_to(o.m_Cut_s); + o.m_Cut_sIsSet = true; + } + if(j.find("last_image_to_written_s") != j.end()) + { + j.at("last_image_to_written_s").get_to(o.m_Last_image_to_written_s); + o.m_Last_image_to_written_sIsSet = true; + } + j.at("verdict").get_to(o.m_Verdict); + j.at("verdict_text").get_to(o.m_Verdict_text); + j.at("summary").get_to(o.m_Summary); + j.at("warnings").get_to(o.m_Warnings); + +} + +std::string Rugnux_live_status::getState() const +{ + return m_State; +} +void Rugnux_live_status::setState(std::string const& value) +{ + m_State = value; +} +std::string Rugnux_live_status::getProbe() const +{ + return m_Probe; +} +void Rugnux_live_status::setProbe(std::string const& value) +{ + m_Probe = value; +} +double Rugnux_live_status::getProbeS() const +{ + return m_Probe_s; +} +void Rugnux_live_status::setProbeS(double const value) +{ + m_Probe_s = value; + m_Probe_sIsSet = true; +} +bool Rugnux_live_status::probeSIsSet() const +{ + return m_Probe_sIsSet; +} +void Rugnux_live_status::unsetProbe_s() +{ + m_Probe_sIsSet = false; +} +std::string Rugnux_live_status::getMessage() const +{ + return m_Message; +} +void Rugnux_live_status::setMessage(std::string const& value) +{ + m_Message = value; +} +int64_t Rugnux_live_status::getImagesExpected() const +{ + return m_Images_expected; +} +void Rugnux_live_status::setImagesExpected(int64_t const value) +{ + m_Images_expected = value; +} +int64_t Rugnux_live_status::getImagesReceived() const +{ + return m_Images_received; +} +void Rugnux_live_status::setImagesReceived(int64_t const value) +{ + m_Images_received = value; +} +double Rugnux_live_status::getElapsedS() const +{ + return m_Elapsed_s; +} +void Rugnux_live_status::setElapsedS(double const value) +{ + m_Elapsed_s = value; +} +float Rugnux_live_status::getStepProgress() const +{ + return m_Step_progress; +} +void Rugnux_live_status::setStepProgress(float const value) +{ + m_Step_progress = value; + m_Step_progressIsSet = true; +} +bool Rugnux_live_status::stepProgressIsSet() const +{ + return m_Step_progressIsSet; +} +void Rugnux_live_status::unsetStep_progress() +{ + m_Step_progressIsSet = false; +} +std::vector Rugnux_live_status::getSteps() const +{ + return m_Steps; +} +void Rugnux_live_status::setSteps(std::vector const& value) +{ + m_Steps = value; +} +double Rugnux_live_status::getLastImageS() const +{ + return m_Last_image_s; +} +void Rugnux_live_status::setLastImageS(double const value) +{ + m_Last_image_s = value; + m_Last_image_sIsSet = true; +} +bool Rugnux_live_status::lastImageSIsSet() const +{ + return m_Last_image_sIsSet; +} +void Rugnux_live_status::unsetLast_image_s() +{ + m_Last_image_sIsSet = false; +} +std::string Rugnux_live_status::getCut() const +{ + return m_Cut; +} +void Rugnux_live_status::setCut(std::string const& value) +{ + m_Cut = value; + m_CutIsSet = true; +} +bool Rugnux_live_status::cutIsSet() const +{ + return m_CutIsSet; +} +void Rugnux_live_status::unsetCut() +{ + m_CutIsSet = false; +} +double Rugnux_live_status::getCutS() const +{ + return m_Cut_s; +} +void Rugnux_live_status::setCutS(double const value) +{ + m_Cut_s = value; + m_Cut_sIsSet = true; +} +bool Rugnux_live_status::cutSIsSet() const +{ + return m_Cut_sIsSet; +} +void Rugnux_live_status::unsetCut_s() +{ + m_Cut_sIsSet = false; +} +double Rugnux_live_status::getLastImageToWrittenS() const +{ + return m_Last_image_to_written_s; +} +void Rugnux_live_status::setLastImageToWrittenS(double const value) +{ + m_Last_image_to_written_s = value; + m_Last_image_to_written_sIsSet = true; +} +bool Rugnux_live_status::lastImageToWrittenSIsSet() const +{ + return m_Last_image_to_written_sIsSet; +} +void Rugnux_live_status::unsetLast_image_to_written_s() +{ + m_Last_image_to_written_sIsSet = false; +} +std::string Rugnux_live_status::getVerdict() const +{ + return m_Verdict; +} +void Rugnux_live_status::setVerdict(std::string const& value) +{ + m_Verdict = value; +} +std::string Rugnux_live_status::getVerdictText() const +{ + return m_Verdict_text; +} +void Rugnux_live_status::setVerdictText(std::string const& value) +{ + m_Verdict_text = value; +} +std::vector Rugnux_live_status::getSummary() const +{ + return m_Summary; +} +void Rugnux_live_status::setSummary(std::vector const& value) +{ + m_Summary = value; +} +std::vector Rugnux_live_status::getWarnings() const +{ + return m_Warnings; +} +void Rugnux_live_status::setWarnings(std::vector const& value) +{ + m_Warnings = value; +} + + +} // namespace org::openapitools::server::model + diff --git a/broker/gen/model/Rugnux_live_status.h b/broker/gen/model/Rugnux_live_status.h new file mode 100644 index 000000000..d2faceeed --- /dev/null +++ b/broker/gen/model/Rugnux_live_status.h @@ -0,0 +1,204 @@ +/** +* Jungfraujoch +* API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. +* +* The version of the OpenAPI document: 1.0.0-rc.175 +* Contact: filip.leonarski@psi.ch +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +/* + * Rugnux_live_status.h + * + * Live rugnux processing of the last collection; kept until the next collection starts + */ + +#ifndef Rugnux_live_status_H_ +#define Rugnux_live_status_H_ + + +#include "Rugnux_summary_row.h" +#include +#include "Rugnux_live_step.h" +#include +#include + +namespace org::openapitools::server::model +{ + +/// +/// Live rugnux processing of the last collection; kept until the next collection starts +/// +class Rugnux_live_status +{ +public: + Rugnux_live_status(); + virtual ~Rugnux_live_status() = default; + + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + /// + /// Helper overload for validate. Used when one model stores another model and calls it's validate. + /// Not meant to be called outside that case. + /// + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; + + bool operator==(const Rugnux_live_status& rhs) const; + bool operator!=(const Rugnux_live_status& rhs) const; + + ///////////////////////////////////////////// + /// Rugnux_live_status members + + /// + /// + /// + std::string getState() const; + void setState(std::string const& value); + /// + /// Answer of the early lattice probe on the first 60 degrees; empty until it answers + /// + std::string getProbe() const; + void setProbe(std::string const& value); + /// + /// When the probe answered, since the collection started + /// + double getProbeS() const; + void setProbeS(double const value); + bool probeSIsSet() const; + void unsetProbe_s(); + /// + /// Why the run failed or was skipped + /// + std::string getMessage() const; + void setMessage(std::string const& value); + /// + /// + /// + int64_t getImagesExpected() const; + void setImagesExpected(int64_t const value); + /// + /// + /// + int64_t getImagesReceived() const; + void setImagesReceived(int64_t const value); + /// + /// + /// + double getElapsedS() const; + void setElapsedS(double const value); + /// + /// Fraction of the current pass's images + /// + float getStepProgress() const; + void setStepProgress(float const value); + bool stepProgressIsSet() const; + void unsetStep_progress(); + /// + /// + /// + std::vector getSteps() const; + void setSteps(std::vector const& value); + /// + /// When the last image arrived (and the cutoff timer started), since the collection started + /// + double getLastImageS() const; + void setLastImageS(double const value); + bool lastImageSIsSet() const; + void unsetLast_image_s(); + /// + /// Empty, or why the analysis was cut: `deadline` (`deadline_s` after the last image) or `cancel` (`POST /cancel`). The end message then carried what was established at the cut. + /// + std::string getCut() const; + void setCut(std::string const& value); + bool cutIsSet() const; + void unsetCut(); + /// + /// When the analysis was cut, since the collection started + /// + double getCutS() const; + void setCutS(double const value); + bool cutSIsSet() const; + void unsetCut_s(); + /// + /// From the last image received to all results written + /// + double getLastImageToWrittenS() const; + void setLastImageToWrittenS(double const value); + bool lastImageToWrittenSIsSet() const; + void unsetLast_image_to_written_s(); + /// + /// OK, WARNINGS, UNUSABLE or FAILED; empty until the run is over + /// + std::string getVerdict() const; + void setVerdict(std::string const& value); + /// + /// + /// + std::string getVerdictText() const; + void setVerdictText(std::string const& value); + /// + /// + /// + std::vector getSummary() const; + void setSummary(std::vector const& value); + /// + /// + /// + std::vector getWarnings() const; + void setWarnings(std::vector const& value); + + friend void to_json(nlohmann::json& j, const Rugnux_live_status& o); + friend void from_json(const nlohmann::json& j, Rugnux_live_status& o); +protected: + std::string m_State; + + std::string m_Probe; + + double m_Probe_s; + bool m_Probe_sIsSet; + std::string m_Message; + + int64_t m_Images_expected; + + int64_t m_Images_received; + + double m_Elapsed_s; + + float m_Step_progress; + bool m_Step_progressIsSet; + std::vector m_Steps; + + double m_Last_image_s; + bool m_Last_image_sIsSet; + std::string m_Cut; + bool m_CutIsSet; + double m_Cut_s; + bool m_Cut_sIsSet; + double m_Last_image_to_written_s; + bool m_Last_image_to_written_sIsSet; + std::string m_Verdict; + + std::string m_Verdict_text; + + std::vector m_Summary; + + std::vector m_Warnings; + + +}; + +} // namespace org::openapitools::server::model + +#endif /* Rugnux_live_status_H_ */ diff --git a/broker/gen/model/Rugnux_live_step.cpp b/broker/gen/model/Rugnux_live_step.cpp new file mode 100644 index 000000000..4b05aabc2 --- /dev/null +++ b/broker/gen/model/Rugnux_live_step.cpp @@ -0,0 +1,168 @@ +/** +* Jungfraujoch +* API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. +* +* The version of the OpenAPI document: 1.0.0-rc.175 +* Contact: filip.leonarski@psi.ch +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ + + +#include "Rugnux_live_step.h" +#include "Helpers.h" + +#include + +namespace org::openapitools::server::model +{ + +Rugnux_live_step::Rugnux_live_step() +{ + m_Title = ""; + m_Started_s = 0.0; + m_Duration_s = 0.0; + m_Duration_sIsSet = false; + +} + +void Rugnux_live_step::validate() const +{ + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } +} + +bool Rugnux_live_step::validate(std::stringstream& msg) const +{ + return validate(msg, ""); +} + +bool Rugnux_live_step::validate(std::stringstream& msg, const std::string& pathPrefix) const +{ + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "Rugnux_live_step" : pathPrefix; + + + + /* Notes */ { + const std::vector& value = m_Notes; + const std::string currentValuePath = _pathPrefix + ".notes"; + + + { // Recursive validation of array elements + const std::string oldValuePath = currentValuePath; + int i = 0; + for (const std::string& value : value) + { + const std::string currentValuePath = oldValuePath + "[" + std::to_string(i) + "]"; + + + + i++; + } + } + + } + + return success; +} + +bool Rugnux_live_step::operator==(const Rugnux_live_step& rhs) const +{ + return + + + (getTitle() == rhs.getTitle()) + && + + (getStartedS() == rhs.getStartedS()) + && + + + ((!durationSIsSet() && !rhs.durationSIsSet()) || (durationSIsSet() && rhs.durationSIsSet() && getDurationS() == rhs.getDurationS())) && + + (getNotes() == rhs.getNotes()) + + + ; +} + +bool Rugnux_live_step::operator!=(const Rugnux_live_step& rhs) const +{ + return !(*this == rhs); +} + +void to_json(nlohmann::json& j, const Rugnux_live_step& o) +{ + j = nlohmann::json::object(); + j["title"] = o.m_Title; + j["started_s"] = o.m_Started_s; + if(o.durationSIsSet()) + j["duration_s"] = o.m_Duration_s; + j["notes"] = o.m_Notes; + +} + +void from_json(const nlohmann::json& j, Rugnux_live_step& o) +{ + j.at("title").get_to(o.m_Title); + j.at("started_s").get_to(o.m_Started_s); + if(j.find("duration_s") != j.end()) + { + j.at("duration_s").get_to(o.m_Duration_s); + o.m_Duration_sIsSet = true; + } + j.at("notes").get_to(o.m_Notes); + +} + +std::string Rugnux_live_step::getTitle() const +{ + return m_Title; +} +void Rugnux_live_step::setTitle(std::string const& value) +{ + m_Title = value; +} +double Rugnux_live_step::getStartedS() const +{ + return m_Started_s; +} +void Rugnux_live_step::setStartedS(double const value) +{ + m_Started_s = value; +} +double Rugnux_live_step::getDurationS() const +{ + return m_Duration_s; +} +void Rugnux_live_step::setDurationS(double const value) +{ + m_Duration_s = value; + m_Duration_sIsSet = true; +} +bool Rugnux_live_step::durationSIsSet() const +{ + return m_Duration_sIsSet; +} +void Rugnux_live_step::unsetDuration_s() +{ + m_Duration_sIsSet = false; +} +std::vector Rugnux_live_step::getNotes() const +{ + return m_Notes; +} +void Rugnux_live_step::setNotes(std::vector const& value) +{ + m_Notes = value; +} + + +} // namespace org::openapitools::server::model + diff --git a/broker/gen/model/Rugnux_live_step.h b/broker/gen/model/Rugnux_live_step.h new file mode 100644 index 000000000..ed908d260 --- /dev/null +++ b/broker/gen/model/Rugnux_live_step.h @@ -0,0 +1,101 @@ +/** +* Jungfraujoch +* API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. +* +* The version of the OpenAPI document: 1.0.0-rc.175 +* Contact: filip.leonarski@psi.ch +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +/* + * Rugnux_live_step.h + * + * + */ + +#ifndef Rugnux_live_step_H_ +#define Rugnux_live_step_H_ + + +#include +#include +#include + +namespace org::openapitools::server::model +{ + +/// +/// +/// +class Rugnux_live_step +{ +public: + Rugnux_live_step(); + virtual ~Rugnux_live_step() = default; + + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + /// + /// Helper overload for validate. Used when one model stores another model and calls it's validate. + /// Not meant to be called outside that case. + /// + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; + + bool operator==(const Rugnux_live_step& rhs) const; + bool operator!=(const Rugnux_live_step& rhs) const; + + ///////////////////////////////////////////// + /// Rugnux_live_step members + + /// + /// + /// + std::string getTitle() const; + void setTitle(std::string const& value); + /// + /// Start of the step, since the collection started + /// + double getStartedS() const; + void setStartedS(double const value); + /// + /// Set once the next step starts or the run ends + /// + double getDurationS() const; + void setDurationS(double const value); + bool durationSIsSet() const; + void unsetDuration_s(); + /// + /// What the step found (e.g. lattice, space group) + /// + std::vector getNotes() const; + void setNotes(std::vector const& value); + + friend void to_json(nlohmann::json& j, const Rugnux_live_step& o); + friend void from_json(const nlohmann::json& j, Rugnux_live_step& o); +protected: + std::string m_Title; + + double m_Started_s; + + double m_Duration_s; + bool m_Duration_sIsSet; + std::vector m_Notes; + + +}; + +} // namespace org::openapitools::server::model + +#endif /* Rugnux_live_step_H_ */ diff --git a/broker/gen/model/Rugnux_settings.cpp b/broker/gen/model/Rugnux_settings.cpp new file mode 100644 index 000000000..de476f436 --- /dev/null +++ b/broker/gen/model/Rugnux_settings.cpp @@ -0,0 +1,192 @@ +/** +* Jungfraujoch +* API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. +* +* The version of the OpenAPI document: 1.0.0-rc.175 +* Contact: filip.leonarski@psi.ch +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ + + +#include "Rugnux_settings.h" +#include "Helpers.h" + +#include + +namespace org::openapitools::server::model +{ + +Rugnux_settings::Rugnux_settings() +{ + m_Enable = false; + m_EnableIsSet = false; + m_Reserved_cpus = 4L; + m_Reserved_cpusIsSet = false; + m_Deadline_s = 0.0; + m_Deadline_sIsSet = false; + +} + +void Rugnux_settings::validate() const +{ + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } +} + +bool Rugnux_settings::validate(std::stringstream& msg) const +{ + return validate(msg, ""); +} + +bool Rugnux_settings::validate(std::stringstream& msg, const std::string& pathPrefix) const +{ + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "Rugnux_settings" : pathPrefix; + + + if (reservedCpusIsSet()) + { + const int64_t& value = m_Reserved_cpus; + const std::string currentValuePath = _pathPrefix + ".reservedCpus"; + + + if (value < 0ll) + { + success = false; + msg << currentValuePath << ": must be greater than or equal to 0;"; + } + + } + + if (deadlineSIsSet()) + { + const double& value = m_Deadline_s; + const std::string currentValuePath = _pathPrefix + ".deadlineS"; + + + if (value < 0.0) + { + success = false; + msg << currentValuePath << ": must be greater than or equal to 0.0;"; + } + + } + + return success; +} + +bool Rugnux_settings::operator==(const Rugnux_settings& rhs) const +{ + return + + + + ((!enableIsSet() && !rhs.enableIsSet()) || (enableIsSet() && rhs.enableIsSet() && isEnable() == rhs.isEnable())) && + + + ((!reservedCpusIsSet() && !rhs.reservedCpusIsSet()) || (reservedCpusIsSet() && rhs.reservedCpusIsSet() && getReservedCpus() == rhs.getReservedCpus())) && + + + ((!deadlineSIsSet() && !rhs.deadlineSIsSet()) || (deadlineSIsSet() && rhs.deadlineSIsSet() && getDeadlineS() == rhs.getDeadlineS())) + + ; +} + +bool Rugnux_settings::operator!=(const Rugnux_settings& rhs) const +{ + return !(*this == rhs); +} + +void to_json(nlohmann::json& j, const Rugnux_settings& o) +{ + j = nlohmann::json::object(); + if(o.enableIsSet()) + j["enable"] = o.m_Enable; + if(o.reservedCpusIsSet()) + j["reserved_cpus"] = o.m_Reserved_cpus; + if(o.deadlineSIsSet()) + j["deadline_s"] = o.m_Deadline_s; + +} + +void from_json(const nlohmann::json& j, Rugnux_settings& o) +{ + if(j.find("enable") != j.end()) + { + j.at("enable").get_to(o.m_Enable); + o.m_EnableIsSet = true; + } + if(j.find("reserved_cpus") != j.end()) + { + j.at("reserved_cpus").get_to(o.m_Reserved_cpus); + o.m_Reserved_cpusIsSet = true; + } + if(j.find("deadline_s") != j.end()) + { + j.at("deadline_s").get_to(o.m_Deadline_s); + o.m_Deadline_sIsSet = true; + } + +} + +bool Rugnux_settings::isEnable() const +{ + return m_Enable; +} +void Rugnux_settings::setEnable(bool const value) +{ + m_Enable = value; + m_EnableIsSet = true; +} +bool Rugnux_settings::enableIsSet() const +{ + return m_EnableIsSet; +} +void Rugnux_settings::unsetEnable() +{ + m_EnableIsSet = false; +} +int64_t Rugnux_settings::getReservedCpus() const +{ + return m_Reserved_cpus; +} +void Rugnux_settings::setReservedCpus(int64_t const value) +{ + m_Reserved_cpus = value; + m_Reserved_cpusIsSet = true; +} +bool Rugnux_settings::reservedCpusIsSet() const +{ + return m_Reserved_cpusIsSet; +} +void Rugnux_settings::unsetReserved_cpus() +{ + m_Reserved_cpusIsSet = false; +} +double Rugnux_settings::getDeadlineS() const +{ + return m_Deadline_s; +} +void Rugnux_settings::setDeadlineS(double const value) +{ + m_Deadline_s = value; + m_Deadline_sIsSet = true; +} +bool Rugnux_settings::deadlineSIsSet() const +{ + return m_Deadline_sIsSet; +} +void Rugnux_settings::unsetDeadline_s() +{ + m_Deadline_sIsSet = false; +} + + +} // namespace org::openapitools::server::model + diff --git a/broker/gen/model/Rugnux_settings.h b/broker/gen/model/Rugnux_settings.h new file mode 100644 index 000000000..8f4c60b5b --- /dev/null +++ b/broker/gen/model/Rugnux_settings.h @@ -0,0 +1,96 @@ +/** +* Jungfraujoch +* API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. +* +* The version of the OpenAPI document: 1.0.0-rc.175 +* Contact: filip.leonarski@psi.ch +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +/* + * Rugnux_settings.h + * + * Rugnux live mode: rotation collections from a DECTRIS detector are processed by rugnux inside the broker while they arrive, and the merged result is sent to the writer. + */ + +#ifndef Rugnux_settings_H_ +#define Rugnux_settings_H_ + + +#include + +namespace org::openapitools::server::model +{ + +/// +/// Rugnux live mode: rotation collections from a DECTRIS detector are processed by rugnux inside the broker while they arrive, and the merged result is sent to the writer. +/// +class Rugnux_settings +{ +public: + Rugnux_settings(); + virtual ~Rugnux_settings() = default; + + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + /// + /// Helper overload for validate. Used when one model stores another model and calls it's validate. + /// Not meant to be called outside that case. + /// + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; + + bool operator==(const Rugnux_settings& rhs) const; + bool operator!=(const Rugnux_settings& rhs) const; + + ///////////////////////////////////////////// + /// Rugnux_settings members + + /// + /// Process DECTRIS rotation collections with rugnux live + /// + bool isEnable() const; + void setEnable(bool const value); + bool enableIsSet() const; + void unsetEnable(); + /// + /// CPU threads left to the receiver and the image pusher while rugnux runs + /// + int64_t getReservedCpus() const; + void setReservedCpus(int64_t const value); + bool reservedCpusIsSet() const; + void unsetReserved_cpus(); + /// + /// Fixed cutoff: this long after the last image the analysis is cut, and the collection ends with what it has established (as `POST /cancel` after the last image does). 0 means no cutoff. + /// + double getDeadlineS() const; + void setDeadlineS(double const value); + bool deadlineSIsSet() const; + void unsetDeadline_s(); + + friend void to_json(nlohmann::json& j, const Rugnux_settings& o); + friend void from_json(const nlohmann::json& j, Rugnux_settings& o); +protected: + bool m_Enable; + bool m_EnableIsSet; + int64_t m_Reserved_cpus; + bool m_Reserved_cpusIsSet; + double m_Deadline_s; + bool m_Deadline_sIsSet; + +}; + +} // namespace org::openapitools::server::model + +#endif /* Rugnux_settings_H_ */ diff --git a/broker/gen/model/Rugnux_status.cpp b/broker/gen/model/Rugnux_status.cpp new file mode 100644 index 000000000..da879400f --- /dev/null +++ b/broker/gen/model/Rugnux_status.cpp @@ -0,0 +1,177 @@ +/** +* Jungfraujoch +* API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. +* +* The version of the OpenAPI document: 1.0.0-rc.175 +* Contact: filip.leonarski@psi.ch +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ + + +#include "Rugnux_status.h" +#include "Helpers.h" + +#include + +namespace org::openapitools::server::model +{ + +Rugnux_status::Rugnux_status() +{ + m_Enable = false; + m_Reserved_cpus = 0L; + m_Deadline_s = 0.0; + m_Deadline_sIsSet = false; + m_Model_loaded = false; + m_Model_size_bytes = 0L; + m_Model_size_bytesIsSet = false; + +} + +void Rugnux_status::validate() const +{ + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } +} + +bool Rugnux_status::validate(std::stringstream& msg) const +{ + return validate(msg, ""); +} + +bool Rugnux_status::validate(std::stringstream& msg, const std::string& pathPrefix) const +{ + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "Rugnux_status" : pathPrefix; + + + return success; +} + +bool Rugnux_status::operator==(const Rugnux_status& rhs) const +{ + return + + + (isEnable() == rhs.isEnable()) + && + + (getReservedCpus() == rhs.getReservedCpus()) + && + + + ((!deadlineSIsSet() && !rhs.deadlineSIsSet()) || (deadlineSIsSet() && rhs.deadlineSIsSet() && getDeadlineS() == rhs.getDeadlineS())) && + + (isModelLoaded() == rhs.isModelLoaded()) + && + + + ((!modelSizeBytesIsSet() && !rhs.modelSizeBytesIsSet()) || (modelSizeBytesIsSet() && rhs.modelSizeBytesIsSet() && getModelSizeBytes() == rhs.getModelSizeBytes())) + + ; +} + +bool Rugnux_status::operator!=(const Rugnux_status& rhs) const +{ + return !(*this == rhs); +} + +void to_json(nlohmann::json& j, const Rugnux_status& o) +{ + j = nlohmann::json::object(); + j["enable"] = o.m_Enable; + j["reserved_cpus"] = o.m_Reserved_cpus; + if(o.deadlineSIsSet()) + j["deadline_s"] = o.m_Deadline_s; + j["model_loaded"] = o.m_Model_loaded; + if(o.modelSizeBytesIsSet()) + j["model_size_bytes"] = o.m_Model_size_bytes; + +} + +void from_json(const nlohmann::json& j, Rugnux_status& o) +{ + j.at("enable").get_to(o.m_Enable); + j.at("reserved_cpus").get_to(o.m_Reserved_cpus); + if(j.find("deadline_s") != j.end()) + { + j.at("deadline_s").get_to(o.m_Deadline_s); + o.m_Deadline_sIsSet = true; + } + j.at("model_loaded").get_to(o.m_Model_loaded); + if(j.find("model_size_bytes") != j.end()) + { + j.at("model_size_bytes").get_to(o.m_Model_size_bytes); + o.m_Model_size_bytesIsSet = true; + } + +} + +bool Rugnux_status::isEnable() const +{ + return m_Enable; +} +void Rugnux_status::setEnable(bool const value) +{ + m_Enable = value; +} +int64_t Rugnux_status::getReservedCpus() const +{ + return m_Reserved_cpus; +} +void Rugnux_status::setReservedCpus(int64_t const value) +{ + m_Reserved_cpus = value; +} +double Rugnux_status::getDeadlineS() const +{ + return m_Deadline_s; +} +void Rugnux_status::setDeadlineS(double const value) +{ + m_Deadline_s = value; + m_Deadline_sIsSet = true; +} +bool Rugnux_status::deadlineSIsSet() const +{ + return m_Deadline_sIsSet; +} +void Rugnux_status::unsetDeadline_s() +{ + m_Deadline_sIsSet = false; +} +bool Rugnux_status::isModelLoaded() const +{ + return m_Model_loaded; +} +void Rugnux_status::setModelLoaded(bool const value) +{ + m_Model_loaded = value; +} +int64_t Rugnux_status::getModelSizeBytes() const +{ + return m_Model_size_bytes; +} +void Rugnux_status::setModelSizeBytes(int64_t const value) +{ + m_Model_size_bytes = value; + m_Model_size_bytesIsSet = true; +} +bool Rugnux_status::modelSizeBytesIsSet() const +{ + return m_Model_size_bytesIsSet; +} +void Rugnux_status::unsetModel_size_bytes() +{ + m_Model_size_bytesIsSet = false; +} + + +} // namespace org::openapitools::server::model + diff --git a/broker/gen/model/Rugnux_status.h b/broker/gen/model/Rugnux_status.h new file mode 100644 index 000000000..f5bf36405 --- /dev/null +++ b/broker/gen/model/Rugnux_status.h @@ -0,0 +1,108 @@ +/** +* Jungfraujoch +* API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. +* +* The version of the OpenAPI document: 1.0.0-rc.175 +* Contact: filip.leonarski@psi.ch +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +/* + * Rugnux_status.h + * + * + */ + +#ifndef Rugnux_status_H_ +#define Rugnux_status_H_ + + +#include + +namespace org::openapitools::server::model +{ + +/// +/// +/// +class Rugnux_status +{ +public: + Rugnux_status(); + virtual ~Rugnux_status() = default; + + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + /// + /// Helper overload for validate. Used when one model stores another model and calls it's validate. + /// Not meant to be called outside that case. + /// + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; + + bool operator==(const Rugnux_status& rhs) const; + bool operator!=(const Rugnux_status& rhs) const; + + ///////////////////////////////////////////// + /// Rugnux_status members + + /// + /// Rugnux live mode is enabled + /// + bool isEnable() const; + void setEnable(bool const value); + /// + /// CPU threads left to the receiver and the image pusher while rugnux runs + /// + int64_t getReservedCpus() const; + void setReservedCpus(int64_t const value); + /// + /// Seconds after the last image at which the analysis is cut; 0 means no cutoff + /// + double getDeadlineS() const; + void setDeadlineS(double const value); + bool deadlineSIsSet() const; + void unsetDeadline_s(); + /// + /// A model was uploaded with `PUT /config/rugnux/model` + /// + bool isModelLoaded() const; + void setModelLoaded(bool const value); + /// + /// Size of the uploaded model file + /// + int64_t getModelSizeBytes() const; + void setModelSizeBytes(int64_t const value); + bool modelSizeBytesIsSet() const; + void unsetModel_size_bytes(); + + friend void to_json(nlohmann::json& j, const Rugnux_status& o); + friend void from_json(const nlohmann::json& j, Rugnux_status& o); +protected: + bool m_Enable; + + int64_t m_Reserved_cpus; + + double m_Deadline_s; + bool m_Deadline_sIsSet; + bool m_Model_loaded; + + int64_t m_Model_size_bytes; + bool m_Model_size_bytesIsSet; + +}; + +} // namespace org::openapitools::server::model + +#endif /* Rugnux_status_H_ */ diff --git a/broker/gen/model/Rugnux_summary_row.cpp b/broker/gen/model/Rugnux_summary_row.cpp new file mode 100644 index 000000000..5aa9514b3 --- /dev/null +++ b/broker/gen/model/Rugnux_summary_row.cpp @@ -0,0 +1,105 @@ +/** +* Jungfraujoch +* API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. +* +* The version of the OpenAPI document: 1.0.0-rc.175 +* Contact: filip.leonarski@psi.ch +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ + + +#include "Rugnux_summary_row.h" +#include "Helpers.h" + +#include + +namespace org::openapitools::server::model +{ + +Rugnux_summary_row::Rugnux_summary_row() +{ + m_Label = ""; + m_Value = ""; + +} + +void Rugnux_summary_row::validate() const +{ + std::stringstream msg; + if (!validate(msg)) + { + throw org::openapitools::server::helpers::ValidationException(msg.str()); + } +} + +bool Rugnux_summary_row::validate(std::stringstream& msg) const +{ + return validate(msg, ""); +} + +bool Rugnux_summary_row::validate(std::stringstream& msg, const std::string& pathPrefix) const +{ + bool success = true; + const std::string _pathPrefix = pathPrefix.empty() ? "Rugnux_summary_row" : pathPrefix; + + + return success; +} + +bool Rugnux_summary_row::operator==(const Rugnux_summary_row& rhs) const +{ + return + + + (getLabel() == rhs.getLabel()) + && + + (getValue() == rhs.getValue()) + + + ; +} + +bool Rugnux_summary_row::operator!=(const Rugnux_summary_row& rhs) const +{ + return !(*this == rhs); +} + +void to_json(nlohmann::json& j, const Rugnux_summary_row& o) +{ + j = nlohmann::json::object(); + j["label"] = o.m_Label; + j["value"] = o.m_Value; + +} + +void from_json(const nlohmann::json& j, Rugnux_summary_row& o) +{ + j.at("label").get_to(o.m_Label); + j.at("value").get_to(o.m_Value); + +} + +std::string Rugnux_summary_row::getLabel() const +{ + return m_Label; +} +void Rugnux_summary_row::setLabel(std::string const& value) +{ + m_Label = value; +} +std::string Rugnux_summary_row::getValue() const +{ + return m_Value; +} +void Rugnux_summary_row::setValue(std::string const& value) +{ + m_Value = value; +} + + +} // namespace org::openapitools::server::model + diff --git a/broker/gen/model/Rugnux_summary_row.h b/broker/gen/model/Rugnux_summary_row.h new file mode 100644 index 000000000..c868fe387 --- /dev/null +++ b/broker/gen/model/Rugnux_summary_row.h @@ -0,0 +1,84 @@ +/** +* Jungfraujoch +* API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates. # License Clarification While this API definition is licensed under GPL-3.0, **the GPL copyleft provisions do not apply** when this file is used solely to generate OpenAPI clients or when implementing applications that interact with the API. Generated client code and applications using this API definition are not subject to the GPL license requirements and may be distributed under terms of your choosing. This exception is similar in spirit to the Linux Kernel's approach to userspace API headers and the GCC Runtime Library Exception. The Linux Kernel developers have explicitly stated that user programs that merely use the kernel interfaces (syscalls, ioctl definitions, etc.) are not derivative works of the kernel and are not subject to the terms of the GPL. This exception is intended to allow wider use of this API specification without imposing GPL requirements on applications that merely interact with the API, regardless of whether they communicate through network calls or other mechanisms. +* +* The version of the OpenAPI document: 1.0.0-rc.175 +* Contact: filip.leonarski@psi.ch +* +* NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech). +* https://openapi-generator.tech +* Do not edit the class manually. +*/ +/* + * Rugnux_summary_row.h + * + * + */ + +#ifndef Rugnux_summary_row_H_ +#define Rugnux_summary_row_H_ + + +#include +#include + +namespace org::openapitools::server::model +{ + +/// +/// +/// +class Rugnux_summary_row +{ +public: + Rugnux_summary_row(); + virtual ~Rugnux_summary_row() = default; + + + /// + /// Validate the current data in the model. Throws a ValidationException on failure. + /// + void validate() const; + + /// + /// Validate the current data in the model. Returns false on error and writes an error + /// message into the given stringstream. + /// + bool validate(std::stringstream& msg) const; + + /// + /// Helper overload for validate. Used when one model stores another model and calls it's validate. + /// Not meant to be called outside that case. + /// + bool validate(std::stringstream& msg, const std::string& pathPrefix) const; + + bool operator==(const Rugnux_summary_row& rhs) const; + bool operator!=(const Rugnux_summary_row& rhs) const; + + ///////////////////////////////////////////// + /// Rugnux_summary_row members + + /// + /// + /// + std::string getLabel() const; + void setLabel(std::string const& value); + /// + /// + /// + std::string getValue() const; + void setValue(std::string const& value); + + friend void to_json(nlohmann::json& j, const Rugnux_summary_row& o); + friend void from_json(const nlohmann::json& j, Rugnux_summary_row& o); +protected: + std::string m_Label; + + std::string m_Value; + + +}; + +} // namespace org::openapitools::server::model + +#endif /* Rugnux_summary_row_H_ */ diff --git a/broker/jfjoch_api.yaml b/broker/jfjoch_api.yaml index 0370f3029..1f3bef805 100644 --- a/broker/jfjoch_api.yaml +++ b/broker/jfjoch_api.yaml @@ -2684,6 +2684,167 @@ components: $ref: '#/components/schemas/zeromq_metadata_settings' dark_mask: $ref: '#/components/schemas/dark_mask_settings' + rugnux: + $ref: '#/components/schemas/rugnux_settings' + rugnux_settings: + type: object + description: | + Rugnux live mode: rotation collections from a DECTRIS detector are processed by rugnux + inside the broker while they arrive, and the merged result is sent to the writer. + properties: + enable: + type: boolean + default: false + description: Process DECTRIS rotation collections with rugnux live + reserved_cpus: + type: integer + format: int64 + minimum: 0 + default: 4 + description: CPU threads left to the receiver and the image pusher while rugnux runs + deadline_s: + type: number + format: double + minimum: 0.0 + default: 0.0 + description: | + Fixed cutoff: this long after the last image the analysis is cut, and the collection ends + with what it has established (as `POST /cancel` after the last image does). 0 means no cutoff. + rugnux_status: + type: object + required: + - enable + - reserved_cpus + - model_loaded + properties: + enable: + type: boolean + description: Rugnux live mode is enabled + reserved_cpus: + type: integer + format: int64 + description: CPU threads left to the receiver and the image pusher while rugnux runs + deadline_s: + type: number + format: double + description: Seconds after the last image at which the analysis is cut; 0 means no cutoff + model_loaded: + type: boolean + description: A model was uploaded with `PUT /config/rugnux/model` + model_size_bytes: + type: integer + format: int64 + description: Size of the uploaded model file + rugnux_live_step: + type: object + required: + - title + - started_s + - notes + properties: + title: + type: string + started_s: + type: number + format: double + description: Start of the step, since the collection started + duration_s: + type: number + format: double + description: Set once the next step starts or the run ends + notes: + type: array + description: What the step found (e.g. lattice, space group) + items: + type: string + rugnux_summary_row: + type: object + required: + - label + - value + properties: + label: + type: string + value: + type: string + rugnux_live_status: + type: object + description: Live rugnux processing of the last collection; kept until the next collection starts + required: + - state + - message + - images_expected + - images_received + - elapsed_s + - steps + - verdict + - verdict_text + - summary + - warnings + - probe + properties: + state: + type: string + enum: [Idle, Running, Done, Failed, Cancelled, Skipped] + probe: + type: string + description: Answer of the early lattice probe on the first 60 degrees; empty until it answers + probe_s: + type: number + format: double + description: When the probe answered, since the collection started + message: + type: string + description: Why the run failed or was skipped + images_expected: + type: integer + format: int64 + images_received: + type: integer + format: int64 + elapsed_s: + type: number + format: double + step_progress: + type: number + format: float + minimum: 0.0 + maximum: 1.0 + description: Fraction of the current pass's images + steps: + type: array + items: + $ref: '#/components/schemas/rugnux_live_step' + last_image_s: + type: number + format: double + description: When the last image arrived (and the cutoff timer started), since the collection started + cut: + type: string + description: | + Empty, or why the analysis was cut: `deadline` (`deadline_s` after the last image) or `cancel` + (`POST /cancel`). The end message then carried what was established at the cut. + cut_s: + type: number + format: double + description: When the analysis was cut, since the collection started + last_image_to_written_s: + type: number + format: double + description: From the last image received to all results written + verdict: + type: string + description: OK, WARNINGS, UNUSABLE or FAILED; empty until the run is over + verdict_text: + type: string + summary: + type: array + items: + $ref: '#/components/schemas/rugnux_summary_row' + warnings: + type: array + items: + type: string zeromq_metadata_settings: type: object required: @@ -2895,6 +3056,11 @@ paths: Any frame that is currently being processed by CPU will be finished and sent to writer. Given the command is making sure to gracefully stop data acquisition and detector, it might take some time to switch back after command finished to `Idle` state. + With rugnux live mode (`/config/rugnux`) the command also cuts the rugnux analysis, during the collection + or after its last image alike: the collection ends with what the analysis has established + (see `cut` in `/rugnux/status`). After the last image the collection itself is complete and is not + marked as cancelled. + If data collection is not running, the command has no effect. responses: "200": @@ -3331,6 +3497,133 @@ paths: application/json: schema: $ref: '#/components/schemas/detector_list' + /config/rugnux: + put: + summary: Change rugnux live mode settings + description: | + This can only be done when detector is `Idle`, `Error` or `Inactive` states. + security: + - bearerAuth: [] + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/rugnux_settings' + responses: + "401": + description: The current dataset is protected and no valid bearer token was presented. + content: + text/plain: + schema: + type: string + "200": + description: Everything OK + "400": + description: Input parsing or validation error + content: + text/plain: + schema: + type: string + description: Exception error + "500": + description: Error within Jungfraujoch code - see output message. + content: + application/json: + schema: + $ref: '#/components/schemas/error_message' + get: + summary: Get rugnux live mode settings and model status + description: Can be done anytime + security: + - bearerAuth: [] + responses: + "401": + description: The current dataset is protected and no valid bearer token was presented. + content: + text/plain: + schema: + type: string + "200": + description: Everything OK + content: + application/json: + schema: + $ref: '#/components/schemas/rugnux_status' + /config/rugnux/model: + put: + summary: Upload the model used by rugnux live mode + description: | + This can only be done when detector is `Idle`, `Error` or `Inactive` states. + The model (PDB or mmCIF, optionally gzipped; at most 64 MiB) is used for molecular replacement + and validation of every following rugnux live collection, until it is removed with + `DELETE /config/rugnux/model` or replaced by another upload. + security: + - bearerAuth: [] + requestBody: + content: + application/octet-stream: + schema: + type: string + format: binary + responses: + "401": + description: The current dataset is protected and no valid bearer token was presented. + content: + text/plain: + schema: + type: string + "200": + description: All good + "400": + description: Empty body + "413": + description: Model larger than 64 MiB + "500": + description: Error within Jungfraujoch code - see output message. + content: + application/json: + schema: + $ref: '#/components/schemas/error_message' + delete: + summary: Remove the model used by rugnux live mode + description: | + This can only be done when detector is `Idle`, `Error` or `Inactive` states. + security: + - bearerAuth: [] + responses: + "401": + description: The current dataset is protected and no valid bearer token was presented. + content: + text/plain: + schema: + type: string + "200": + description: All good + "500": + description: Error within Jungfraujoch code - see output message. + content: + application/json: + schema: + $ref: '#/components/schemas/error_message' + /rugnux/status: + get: + summary: Get live rugnux processing status of the last collection + description: Can be done anytime + security: + - bearerAuth: [] + responses: + "401": + description: The current dataset is protected and no valid bearer token was presented. + content: + text/plain: + schema: + type: string + "200": + description: Everything OK + content: + application/json: + schema: + $ref: '#/components/schemas/rugnux_live_status' /config/zeromq_preview: put: summary: Set ZeroMQ preview settings diff --git a/broker/jfjoch_broker.cpp b/broker/jfjoch_broker.cpp index 7457e5a3f..d26812935 100644 --- a/broker/jfjoch_broker.cpp +++ b/broker/jfjoch_broker.cpp @@ -116,6 +116,7 @@ int main(int argc, char **argv) { if (receiver) broker.Services().Receiver(receiver.get()); + ParseRugnuxSettings(settings, broker.Services()); httplib::Server server; httpServer = &server; diff --git a/common/ParallelFor.h b/common/ParallelFor.h index 65b9e262c..e8dbb4e4d 100644 --- a/common/ParallelFor.h +++ b/common/ParallelFor.h @@ -16,6 +16,12 @@ #include "ThreadAffinity.h" +#ifdef __linux__ +#include +#include +#include +#endif + // Two shapes of "run this over a range on several threads", used by the analysis code. Both take the // worker count from the caller rather than asking the hardware, so a run that was told how many // threads to use keeps to it. @@ -48,6 +54,20 @@ namespace parallel_detail { size_t WorkerCount() const { return workers.size(); } + // The scheduling priority of every pool thread (Linux; elsewhere nothing). The pool is made once + // per process, so a thread that lowers its own priority does not lower the work it hands to the + // pool: the broker running rugnux beside its receiving threads sets it here as well. Raising + // it back needs the privilege to do so; returns false where that was refused. + bool SetNice(int nice) { + bool ok = true; +#ifdef __linux__ + std::lock_guard lock(m); + for (const int tid: tids) + ok = (setpriority(PRIO_PROCESS, static_cast(tid), nice) == 0) && ok; +#endif + return ok; + } + void Submit(std::function job) { { std::lock_guard lock(m); @@ -66,6 +86,12 @@ namespace parallel_detail { // It inherited whatever CPUs the thread that first used the pool was kept to. RestoreThreadAffinity(); InWorkerFlag() = true; +#ifdef __linux__ + { + std::lock_guard lock(m); + tids.push_back(static_cast(syscall(SYS_gettid))); + } +#endif Loop(); }); } catch (...) { @@ -106,6 +132,7 @@ namespace parallel_detail { std::condition_variable cv; std::deque > queue; std::vector workers; + std::vector tids; // the workers' kernel thread ids, for SetNice bool stop = false; // A function-local thread_local rather than an inline static member: Apple's linker rejects the diff --git a/docs/JFJOCH_BROKER.md b/docs/JFJOCH_BROKER.md index 739df1d68..4293a5147 100644 --- a/docs/JFJOCH_BROKER.md +++ b/docs/JFJOCH_BROKER.md @@ -170,6 +170,27 @@ The writers report each closed data file to the broker (TCP protocol version 5, for `FILE_CLOSED`); the in-process HDF5 writer reports to it directly. The ZeroMQ writer has no way back to the broker, so with it the route answers 409. +## Rugnux live mode + +With rugnux live mode on, rotation collections from a DECTRIS detector are processed by rugnux inside +the broker while they arrive. It is off by default; the configuration file switches it on with +`"rugnux": {"enable": true, "reserved_cpus": 4}`, where `reserved_cpus` is the number of CPU threads +left to the receiver and the image pusher. + +The same settings are read with `GET /config/rugnux` and changed with `PUT /config/rugnux`. A model +for molecular replacement and validation (PDB or mmCIF, optionally gzipped, at most 64 MiB) is +uploaded as the raw file with `PUT /config/rugnux/model` (`application/octet-stream`; a larger body +gets `413`). The broker keeps it, readable only by its own user, for every following collection until +`DELETE /config/rugnux/model` removes it or another upload replaces it. `GET /config/rugnux` reports +whether a model is loaded and its size, never its contents. Changes are refused during a collection, +and while the current dataset was started with tokens, all of these routes need its bearer token. + +`GET /rugnux/status` reports the live run of the last collection, kept until the next one starts: its +state, the images received, the step it is on and how far into it, the steps so far with what each +found, and once it is over the verdict, the summary, warnings and the time from the last image to +every result written. The web frontend shows it on the dashboard. It needs the dataset's bearer token +like the routes above. + ## Setting up a local test for Jungfraujoch For development, it is possible to set up a local installation of Jungfraujoch. This will work without FPGA installed in the computer and allows testing the Jungfraujoch software layer, including diff --git a/docs/python_client/README.md b/docs/python_client/README.md index 8ca6a35c5..f4ec077d9 100644 --- a/docs/python_client/README.md +++ b/docs/python_client/README.md @@ -126,6 +126,10 @@ Class | Method | HTTP request | Description *DefaultApi* | [**config_mask_tiff_get**](docs/DefaultApi.md#config_mask_tiff_get) | **GET** /config/mask.tiff | Get mask of the detector (TIFF) *DefaultApi* | [**config_roi_get**](docs/DefaultApi.md#config_roi_get) | **GET** /config/roi | Get ROI definitions *DefaultApi* | [**config_roi_put**](docs/DefaultApi.md#config_roi_put) | **PUT** /config/roi | Upload ROI definitions +*DefaultApi* | [**config_rugnux_get**](docs/DefaultApi.md#config_rugnux_get) | **GET** /config/rugnux | Get rugnux live mode settings and model status +*DefaultApi* | [**config_rugnux_model_delete**](docs/DefaultApi.md#config_rugnux_model_delete) | **DELETE** /config/rugnux/model | Remove the model used by rugnux live mode +*DefaultApi* | [**config_rugnux_model_put**](docs/DefaultApi.md#config_rugnux_model_put) | **PUT** /config/rugnux/model | Upload the model used by rugnux live mode +*DefaultApi* | [**config_rugnux_put**](docs/DefaultApi.md#config_rugnux_put) | **PUT** /config/rugnux | Change rugnux live mode settings *DefaultApi* | [**config_select_detector_get**](docs/DefaultApi.md#config_select_detector_get) | **GET** /config/select_detector | List available detectors *DefaultApi* | [**config_select_detector_put**](docs/DefaultApi.md#config_select_detector_put) | **PUT** /config/select_detector | Select detector *DefaultApi* | [**config_spot_finding_get**](docs/DefaultApi.md#config_spot_finding_get) | **GET** /config/spot_finding | Get data processing configuration @@ -149,11 +153,13 @@ Class | Method | HTTP request | Description *DefaultApi* | [**image_buffer_status_get**](docs/DefaultApi.md#image_buffer_status_get) | **GET** /image_buffer/status | Get status of the image buffers *DefaultApi* | [**image_pusher_status_get**](docs/DefaultApi.md#image_pusher_status_get) | **GET** /image_pusher/status | Get status of image pusher *DefaultApi* | [**initialize_post**](docs/DefaultApi.md#initialize_post) | **POST** /initialize | Initialize detector and data acquisition +*DefaultApi* | [**live_events_get**](docs/DefaultApi.md#live_events_get) | **GET** /live/events | Event stream of the collection, for a reader following it *DefaultApi* | [**pedestal_post**](docs/DefaultApi.md#pedestal_post) | **POST** /pedestal | Collect dark current for the detector *DefaultApi* | [**preview_pedestal_tiff_get**](docs/DefaultApi.md#preview_pedestal_tiff_get) | **GET** /preview/pedestal.tiff | Get pedestal in TIFF format *DefaultApi* | [**preview_plot_bin_get**](docs/DefaultApi.md#preview_plot_bin_get) | **GET** /preview/plot.bin | Generate 1D plot from Jungfraujoch and send in raw binary format. Data are provided as (32-bit) float binary array. This format doesn't transmit information about X-axis, only values, so it is of limited use for azimuthal integration. *DefaultApi* | [**preview_plot_get**](docs/DefaultApi.md#preview_plot_get) | **GET** /preview/plot | Generate 1D plot from Jungfraujoch *DefaultApi* | [**result_scan_get**](docs/DefaultApi.md#result_scan_get) | **GET** /result/scan | Get full scan result +*DefaultApi* | [**rugnux_status_get**](docs/DefaultApi.md#rugnux_status_get) | **GET** /rugnux/status | Get live rugnux processing status of the last collection *DefaultApi* | [**start_post**](docs/DefaultApi.md#start_post) | **POST** /start | Start detector *DefaultApi* | [**statistics_calibration_get**](docs/DefaultApi.md#statistics_calibration_get) | **GET** /statistics/calibration | Get calibration statistics *DefaultApi* | [**statistics_data_collection_get**](docs/DefaultApi.md#statistics_data_collection_get) | **GET** /statistics/data_collection | Get data collection statistics @@ -223,6 +229,11 @@ Class | Method | HTTP request | Description - [RoiCircleList](docs/RoiCircleList.md) - [RoiDefinitions](docs/RoiDefinitions.md) - [RotationAxis](docs/RotationAxis.md) + - [RugnuxLiveStatus](docs/RugnuxLiveStatus.md) + - [RugnuxLiveStep](docs/RugnuxLiveStep.md) + - [RugnuxSettings](docs/RugnuxSettings.md) + - [RugnuxStatus](docs/RugnuxStatus.md) + - [RugnuxSummaryRow](docs/RugnuxSummaryRow.md) - [ScanResult](docs/ScanResult.md) - [ScanResultImagesInner](docs/ScanResultImagesInner.md) - [SpotFindingSettings](docs/SpotFindingSettings.md) diff --git a/docs/python_client/docs/DefaultApi.md b/docs/python_client/docs/DefaultApi.md index beb8542ed..67c3b3a53 100644 --- a/docs/python_client/docs/DefaultApi.md +++ b/docs/python_client/docs/DefaultApi.md @@ -29,6 +29,10 @@ Method | HTTP request | Description [**config_mask_tiff_get**](DefaultApi.md#config_mask_tiff_get) | **GET** /config/mask.tiff | Get mask of the detector (TIFF) [**config_roi_get**](DefaultApi.md#config_roi_get) | **GET** /config/roi | Get ROI definitions [**config_roi_put**](DefaultApi.md#config_roi_put) | **PUT** /config/roi | Upload ROI definitions +[**config_rugnux_get**](DefaultApi.md#config_rugnux_get) | **GET** /config/rugnux | Get rugnux live mode settings and model status +[**config_rugnux_model_delete**](DefaultApi.md#config_rugnux_model_delete) | **DELETE** /config/rugnux/model | Remove the model used by rugnux live mode +[**config_rugnux_model_put**](DefaultApi.md#config_rugnux_model_put) | **PUT** /config/rugnux/model | Upload the model used by rugnux live mode +[**config_rugnux_put**](DefaultApi.md#config_rugnux_put) | **PUT** /config/rugnux | Change rugnux live mode settings [**config_select_detector_get**](DefaultApi.md#config_select_detector_get) | **GET** /config/select_detector | List available detectors [**config_select_detector_put**](DefaultApi.md#config_select_detector_put) | **PUT** /config/select_detector | Select detector [**config_spot_finding_get**](DefaultApi.md#config_spot_finding_get) | **GET** /config/spot_finding | Get data processing configuration @@ -52,11 +56,13 @@ Method | HTTP request | Description [**image_buffer_status_get**](DefaultApi.md#image_buffer_status_get) | **GET** /image_buffer/status | Get status of the image buffers [**image_pusher_status_get**](DefaultApi.md#image_pusher_status_get) | **GET** /image_pusher/status | Get status of image pusher [**initialize_post**](DefaultApi.md#initialize_post) | **POST** /initialize | Initialize detector and data acquisition +[**live_events_get**](DefaultApi.md#live_events_get) | **GET** /live/events | Event stream of the collection, for a reader following it [**pedestal_post**](DefaultApi.md#pedestal_post) | **POST** /pedestal | Collect dark current for the detector [**preview_pedestal_tiff_get**](DefaultApi.md#preview_pedestal_tiff_get) | **GET** /preview/pedestal.tiff | Get pedestal in TIFF format [**preview_plot_bin_get**](DefaultApi.md#preview_plot_bin_get) | **GET** /preview/plot.bin | Generate 1D plot from Jungfraujoch and send in raw binary format. Data are provided as (32-bit) float binary array. This format doesn't transmit information about X-axis, only values, so it is of limited use for azimuthal integration. [**preview_plot_get**](DefaultApi.md#preview_plot_get) | **GET** /preview/plot | Generate 1D plot from Jungfraujoch [**result_scan_get**](DefaultApi.md#result_scan_get) | **GET** /result/scan | Get full scan result +[**rugnux_status_get**](DefaultApi.md#rugnux_status_get) | **GET** /rugnux/status | Get live rugnux processing status of the last collection [**start_post**](DefaultApi.md#start_post) | **POST** /start | Start detector [**statistics_calibration_get**](DefaultApi.md#statistics_calibration_get) | **GET** /statistics/calibration | Get calibration statistics [**statistics_data_collection_get**](DefaultApi.md#statistics_data_collection_get) | **GET** /statistics/data_collection | Get data collection statistics @@ -1729,6 +1735,318 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **config_rugnux_get** +> RugnuxStatus config_rugnux_get() + +Get rugnux live mode settings and model status + +Can be done anytime + +### Example + +* Bearer Authentication (bearerAuth): + +```python +import jfjoch_client +from jfjoch_client.models.rugnux_status import RugnuxStatus +from jfjoch_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost:5232 +# See configuration.py for a list of all supported configuration parameters. +configuration = jfjoch_client.Configuration( + host = "http://localhost:5232" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure Bearer authorization: bearerAuth +configuration = jfjoch_client.Configuration( + access_token = os.environ["BEARER_TOKEN"] +) + +# Enter a context with an instance of the API client +with jfjoch_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = jfjoch_client.DefaultApi(api_client) + + try: + # Get rugnux live mode settings and model status + api_response = api_instance.config_rugnux_get() + print("The response of DefaultApi->config_rugnux_get:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DefaultApi->config_rugnux_get: %s\n" % e) +``` + + + +### Parameters + +This endpoint does not need any parameter. + +### Return type + +[**RugnuxStatus**](RugnuxStatus.md) + +### Authorization + +[bearerAuth](../README.md#bearerAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: text/plain, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**401** | The current dataset is protected and no valid bearer token was presented. | - | +**200** | Everything OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **config_rugnux_model_delete** +> config_rugnux_model_delete() + +Remove the model used by rugnux live mode + +This can only be done when detector is `Idle`, `Error` or `Inactive` states. + + +### Example + +* Bearer Authentication (bearerAuth): + +```python +import jfjoch_client +from jfjoch_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost:5232 +# See configuration.py for a list of all supported configuration parameters. +configuration = jfjoch_client.Configuration( + host = "http://localhost:5232" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure Bearer authorization: bearerAuth +configuration = jfjoch_client.Configuration( + access_token = os.environ["BEARER_TOKEN"] +) + +# Enter a context with an instance of the API client +with jfjoch_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = jfjoch_client.DefaultApi(api_client) + + try: + # Remove the model used by rugnux live mode + api_instance.config_rugnux_model_delete() + except Exception as e: + print("Exception when calling DefaultApi->config_rugnux_model_delete: %s\n" % e) +``` + + + +### Parameters + +This endpoint does not need any parameter. + +### Return type + +void (empty response body) + +### Authorization + +[bearerAuth](../README.md#bearerAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: text/plain, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**401** | The current dataset is protected and no valid bearer token was presented. | - | +**200** | All good | - | +**500** | Error within Jungfraujoch code - see output message. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **config_rugnux_model_put** +> config_rugnux_model_put(body=body) + +Upload the model used by rugnux live mode + +This can only be done when detector is `Idle`, `Error` or `Inactive` states. +The model (PDB or mmCIF, optionally gzipped; at most 64 MiB) is used for molecular replacement +and validation of every following rugnux live collection, until it is removed with +`DELETE /config/rugnux/model` or replaced by another upload. + + +### Example + +* Bearer Authentication (bearerAuth): + +```python +import jfjoch_client +from jfjoch_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost:5232 +# See configuration.py for a list of all supported configuration parameters. +configuration = jfjoch_client.Configuration( + host = "http://localhost:5232" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure Bearer authorization: bearerAuth +configuration = jfjoch_client.Configuration( + access_token = os.environ["BEARER_TOKEN"] +) + +# Enter a context with an instance of the API client +with jfjoch_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = jfjoch_client.DefaultApi(api_client) + body = None # bytearray | (optional) + + try: + # Upload the model used by rugnux live mode + api_instance.config_rugnux_model_put(body=body) + except Exception as e: + print("Exception when calling DefaultApi->config_rugnux_model_put: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **body** | **bytearray**| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[bearerAuth](../README.md#bearerAuth) + +### HTTP request headers + + - **Content-Type**: application/octet-stream + - **Accept**: text/plain, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**401** | The current dataset is protected and no valid bearer token was presented. | - | +**200** | All good | - | +**400** | Empty body | - | +**413** | Model larger than 64 MiB | - | +**500** | Error within Jungfraujoch code - see output message. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + +# **config_rugnux_put** +> config_rugnux_put(rugnux_settings=rugnux_settings) + +Change rugnux live mode settings + +This can only be done when detector is `Idle`, `Error` or `Inactive` states. + + +### Example + +* Bearer Authentication (bearerAuth): + +```python +import jfjoch_client +from jfjoch_client.models.rugnux_settings import RugnuxSettings +from jfjoch_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost:5232 +# See configuration.py for a list of all supported configuration parameters. +configuration = jfjoch_client.Configuration( + host = "http://localhost:5232" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure Bearer authorization: bearerAuth +configuration = jfjoch_client.Configuration( + access_token = os.environ["BEARER_TOKEN"] +) + +# Enter a context with an instance of the API client +with jfjoch_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = jfjoch_client.DefaultApi(api_client) + rugnux_settings = jfjoch_client.RugnuxSettings() # RugnuxSettings | (optional) + + try: + # Change rugnux live mode settings + api_instance.config_rugnux_put(rugnux_settings=rugnux_settings) + except Exception as e: + print("Exception when calling DefaultApi->config_rugnux_put: %s\n" % e) +``` + + + +### Parameters + + +Name | Type | Description | Notes +------------- | ------------- | ------------- | ------------- + **rugnux_settings** | [**RugnuxSettings**](RugnuxSettings.md)| | [optional] + +### Return type + +void (empty response body) + +### Authorization + +[bearerAuth](../README.md#bearerAuth) + +### HTTP request headers + + - **Content-Type**: application/json + - **Accept**: text/plain, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**401** | The current dataset is protected and no valid bearer token was presented. | - | +**200** | Everything OK | - | +**400** | Input parsing or validation error | - | +**500** | Error within Jungfraujoch code - see output message. | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **config_select_detector_get** > DetectorList config_select_detector_get() @@ -3326,6 +3644,96 @@ No authorization required [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **live_events_get** +> str live_events_get() + +Event stream of the collection, for a reader following it + +Server-sent events (text/event-stream) for the current collection, from the moment /start has +accepted it: first its whole history, then every change, until it ends or a new collection +begins. Only one reader at a time. Events, each with a JSON `data` line: +- `start` {run_number, run_name, file_prefix, number_of_images, images_per_file, cbor} - first, + once the start message is known: at once for a JUNGFRAU, when the detector sends its own for + a DECTRIS. `cbor` is the start message the writer of the master file received, CBOR in base64; + a reader builds the dataset from it; +- `file` {file_number, file, first_image, image_count} - a data file closed and renamed into + place; `file` is relative to the collection's root, as the writer named it; +- `end` {images, error?} - every writer acknowledged the end: the data files and the master + file are in place; `images` is the number of images collected. Also sent, with `error`, when + the measurement ends any other way - before the start message, for one. The stream then closes; +- `superseded` {run_number} - a new collection began. The stream then closes. +A comment line (`: keepalive`) every 10 s when nothing happens. + + +### Example + +* Bearer Authentication (bearerAuth): + +```python +import jfjoch_client +from jfjoch_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost:5232 +# See configuration.py for a list of all supported configuration parameters. +configuration = jfjoch_client.Configuration( + host = "http://localhost:5232" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure Bearer authorization: bearerAuth +configuration = jfjoch_client.Configuration( + access_token = os.environ["BEARER_TOKEN"] +) + +# Enter a context with an instance of the API client +with jfjoch_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = jfjoch_client.DefaultApi(api_client) + + try: + # Event stream of the collection, for a reader following it + api_response = api_instance.live_events_get() + print("The response of DefaultApi->live_events_get:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DefaultApi->live_events_get: %s\n" % e) +``` + + + +### Parameters + +This endpoint does not need any parameter. + +### Return type + +**str** + +### Authorization + +[bearerAuth](../README.md#bearerAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: text/event-stream, text/plain + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**200** | Event stream | - | +**401** | The current dataset is protected and no valid bearer token was presented. | - | +**404** | No collection has started | - | +**409** | Another reader is following the collection, or the image pusher does not report closed data files | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **pedestal_post** > pedestal_post() @@ -3702,6 +4110,81 @@ This endpoint does not need any parameter. [[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) +# **rugnux_status_get** +> RugnuxLiveStatus rugnux_status_get() + +Get live rugnux processing status of the last collection + +Can be done anytime + +### Example + +* Bearer Authentication (bearerAuth): + +```python +import jfjoch_client +from jfjoch_client.models.rugnux_live_status import RugnuxLiveStatus +from jfjoch_client.rest import ApiException +from pprint import pprint + +# Defining the host is optional and defaults to http://localhost:5232 +# See configuration.py for a list of all supported configuration parameters. +configuration = jfjoch_client.Configuration( + host = "http://localhost:5232" +) + +# The client must configure the authentication and authorization parameters +# in accordance with the API server security policy. +# Examples for each auth method are provided below, use the example that +# satisfies your auth use case. + +# Configure Bearer authorization: bearerAuth +configuration = jfjoch_client.Configuration( + access_token = os.environ["BEARER_TOKEN"] +) + +# Enter a context with an instance of the API client +with jfjoch_client.ApiClient(configuration) as api_client: + # Create an instance of the API class + api_instance = jfjoch_client.DefaultApi(api_client) + + try: + # Get live rugnux processing status of the last collection + api_response = api_instance.rugnux_status_get() + print("The response of DefaultApi->rugnux_status_get:\n") + pprint(api_response) + except Exception as e: + print("Exception when calling DefaultApi->rugnux_status_get: %s\n" % e) +``` + + + +### Parameters + +This endpoint does not need any parameter. + +### Return type + +[**RugnuxLiveStatus**](RugnuxLiveStatus.md) + +### Authorization + +[bearerAuth](../README.md#bearerAuth) + +### HTTP request headers + + - **Content-Type**: Not defined + - **Accept**: text/plain, application/json + +### HTTP response details + +| Status code | Description | Response headers | +|-------------|-------------|------------------| +**401** | The current dataset is protected and no valid bearer token was presented. | - | +**200** | Everything OK | - | + +[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md) + # **start_post** > start_post(dataset_settings=dataset_settings) diff --git a/docs/python_client/docs/JfjochSettings.md b/docs/python_client/docs/JfjochSettings.md index b783f858d..f2ebba9f6 100644 --- a/docs/python_client/docs/JfjochSettings.md +++ b/docs/python_client/docs/JfjochSettings.md @@ -27,6 +27,7 @@ Name | Type | Description | Notes **zeromq_preview** | [**ZeromqPreviewSettings**](ZeromqPreviewSettings.md) | | [optional] **zeromq_metadata** | [**ZeromqMetadataSettings**](ZeromqMetadataSettings.md) | | [optional] **dark_mask** | [**DarkMaskSettings**](DarkMaskSettings.md) | | [optional] +**rugnux** | [**RugnuxSettings**](RugnuxSettings.md) | | [optional] ## Example diff --git a/docs/python_client/docs/RugnuxLiveStatus.md b/docs/python_client/docs/RugnuxLiveStatus.md new file mode 100644 index 000000000..631dae4d0 --- /dev/null +++ b/docs/python_client/docs/RugnuxLiveStatus.md @@ -0,0 +1,43 @@ +# RugnuxLiveStatus + +Live rugnux processing of the last collection; kept until the next collection starts + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**state** | **str** | | +**probe** | **str** | Answer of the early lattice probe on the first 60 degrees; empty until it answers | +**probe_s** | **float** | When the probe answered, since the collection started | [optional] +**message** | **str** | Why the run failed or was skipped | +**images_expected** | **int** | | +**images_received** | **int** | | +**elapsed_s** | **float** | | +**step_progress** | **float** | Fraction of the current pass's images | [optional] +**steps** | [**List[RugnuxLiveStep]**](RugnuxLiveStep.md) | | +**last_image_to_written_s** | **float** | From the last image received to all results written | [optional] +**verdict** | **str** | OK, WARNINGS, UNUSABLE or FAILED; empty until the run is over | +**verdict_text** | **str** | | +**summary** | [**List[RugnuxSummaryRow]**](RugnuxSummaryRow.md) | | +**warnings** | **List[str]** | | + +## Example + +```python +from jfjoch_client.models.rugnux_live_status import RugnuxLiveStatus + +# TODO update the JSON string below +json = "{}" +# create an instance of RugnuxLiveStatus from a JSON string +rugnux_live_status_instance = RugnuxLiveStatus.from_json(json) +# print the JSON string representation of the object +print(RugnuxLiveStatus.to_json()) + +# convert the object into a dict +rugnux_live_status_dict = rugnux_live_status_instance.to_dict() +# create an instance of RugnuxLiveStatus from a dict +rugnux_live_status_from_dict = RugnuxLiveStatus.from_dict(rugnux_live_status_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/python_client/docs/RugnuxLiveStep.md b/docs/python_client/docs/RugnuxLiveStep.md new file mode 100644 index 000000000..546a6c19c --- /dev/null +++ b/docs/python_client/docs/RugnuxLiveStep.md @@ -0,0 +1,32 @@ +# RugnuxLiveStep + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**title** | **str** | | +**started_s** | **float** | Start of the step, since the collection started | +**duration_s** | **float** | Set once the next step starts or the run ends | [optional] +**notes** | **List[str]** | What the step found (e.g. lattice, space group) | + +## Example + +```python +from jfjoch_client.models.rugnux_live_step import RugnuxLiveStep + +# TODO update the JSON string below +json = "{}" +# create an instance of RugnuxLiveStep from a JSON string +rugnux_live_step_instance = RugnuxLiveStep.from_json(json) +# print the JSON string representation of the object +print(RugnuxLiveStep.to_json()) + +# convert the object into a dict +rugnux_live_step_dict = rugnux_live_step_instance.to_dict() +# create an instance of RugnuxLiveStep from a dict +rugnux_live_step_from_dict = RugnuxLiveStep.from_dict(rugnux_live_step_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/python_client/docs/RugnuxSettings.md b/docs/python_client/docs/RugnuxSettings.md new file mode 100644 index 000000000..830ba02ff --- /dev/null +++ b/docs/python_client/docs/RugnuxSettings.md @@ -0,0 +1,31 @@ +# RugnuxSettings + +Rugnux live mode: rotation collections from a DECTRIS detector are processed by rugnux inside the broker while they arrive, and the merged result is sent to the writer. + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**enable** | **bool** | Process DECTRIS rotation collections with rugnux live | [optional] [default to False] +**reserved_cpus** | **int** | CPU threads left to the receiver and the image pusher while rugnux runs | [optional] [default to 4] + +## Example + +```python +from jfjoch_client.models.rugnux_settings import RugnuxSettings + +# TODO update the JSON string below +json = "{}" +# create an instance of RugnuxSettings from a JSON string +rugnux_settings_instance = RugnuxSettings.from_json(json) +# print the JSON string representation of the object +print(RugnuxSettings.to_json()) + +# convert the object into a dict +rugnux_settings_dict = rugnux_settings_instance.to_dict() +# create an instance of RugnuxSettings from a dict +rugnux_settings_from_dict = RugnuxSettings.from_dict(rugnux_settings_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/python_client/docs/RugnuxStatus.md b/docs/python_client/docs/RugnuxStatus.md new file mode 100644 index 000000000..8859133d0 --- /dev/null +++ b/docs/python_client/docs/RugnuxStatus.md @@ -0,0 +1,32 @@ +# RugnuxStatus + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**enable** | **bool** | Rugnux live mode is enabled | +**reserved_cpus** | **int** | CPU threads left to the receiver and the image pusher while rugnux runs | +**model_loaded** | **bool** | A model was uploaded with `PUT /config/rugnux/model` | +**model_size_bytes** | **int** | Size of the uploaded model file | [optional] + +## Example + +```python +from jfjoch_client.models.rugnux_status import RugnuxStatus + +# TODO update the JSON string below +json = "{}" +# create an instance of RugnuxStatus from a JSON string +rugnux_status_instance = RugnuxStatus.from_json(json) +# print the JSON string representation of the object +print(RugnuxStatus.to_json()) + +# convert the object into a dict +rugnux_status_dict = rugnux_status_instance.to_dict() +# create an instance of RugnuxStatus from a dict +rugnux_status_from_dict = RugnuxStatus.from_dict(rugnux_status_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/docs/python_client/docs/RugnuxSummaryRow.md b/docs/python_client/docs/RugnuxSummaryRow.md new file mode 100644 index 000000000..abee1e439 --- /dev/null +++ b/docs/python_client/docs/RugnuxSummaryRow.md @@ -0,0 +1,30 @@ +# RugnuxSummaryRow + + +## Properties + +Name | Type | Description | Notes +------------ | ------------- | ------------- | ------------- +**label** | **str** | | +**value** | **str** | | + +## Example + +```python +from jfjoch_client.models.rugnux_summary_row import RugnuxSummaryRow + +# TODO update the JSON string below +json = "{}" +# create an instance of RugnuxSummaryRow from a JSON string +rugnux_summary_row_instance = RugnuxSummaryRow.from_json(json) +# print the JSON string representation of the object +print(RugnuxSummaryRow.to_json()) + +# convert the object into a dict +rugnux_summary_row_dict = rugnux_summary_row_instance.to_dict() +# create an instance of RugnuxSummaryRow from a dict +rugnux_summary_row_from_dict = RugnuxSummaryRow.from_dict(rugnux_summary_row_dict) +``` +[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) + + diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index c3f749f13..23c657b5d 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -24,6 +24,7 @@ import MenuBookIcon from "@mui/icons-material/MenuBook"; import HistoryIcon from "@mui/icons-material/History"; import CodeIcon from "@mui/icons-material/Code"; import GavelIcon from "@mui/icons-material/Gavel"; +import AutoGraphIcon from "@mui/icons-material/AutoGraph"; import _ from "lodash"; import Markdown from "react-markdown"; import remarkGfm from "remark-gfm"; @@ -32,6 +33,8 @@ import StatusBar from "./components/StatusBar"; import ErrorMessage from "./components/ErrorMessage"; import DataProcessingPlots from "./components/DataProcessingPlots"; import MeasurementStatistics from "./components/MeasurementStatistics"; +import RugnuxStatus from "./components/RugnuxStatus"; +import RugnuxPage from "./components/RugnuxPage"; import DataProcessingSettings from "./components/DataProcessingSettings"; import PreviewImage from "./components/PreviewImage"; import DataCollection from "./components/DataCollection"; @@ -168,7 +171,10 @@ function App() { - + + + + @@ -188,6 +194,9 @@ function App() { { id: 'data-collection', label: 'Data collection', icon: , render: () => ( )}, + { id: 'rugnux', label: 'Rugnux live', icon: , render: () => ( + + )}, ]}, { subheader: 'Expert', items: [ { id: 'detector', label: 'Detector', icon: , render: () => ( diff --git a/frontend/src/client/@tanstack/react-query.gen.ts b/frontend/src/client/@tanstack/react-query.gen.ts index c75023d1d..db804e38d 100644 --- a/frontend/src/client/@tanstack/react-query.gen.ts +++ b/frontend/src/client/@tanstack/react-query.gen.ts @@ -3,8 +3,8 @@ import { type DefaultError, queryOptions, type UseMutationOptions } from '@tanstack/react-query'; import { client } from '../client.gen'; -import { getConfigAzimInt, getConfigBraggIntegration, getConfigDarkMask, getConfigDetector, getConfigFileWriter, getConfigImageFormat, getConfigIndexing, getConfigInstrument, getConfigMask, getConfigMaskTiff, getConfigRoi, getConfigSelectDetector, getConfigSpotFinding, getConfigUserMask, getConfigUserMaskTiff, getConfigZeromqMetadata, getConfigZeromqPreview, getDetectorStatus, getFpgaStatus, getImageBufferImageCbor, getImageBufferImageJpeg, getImageBufferImageTiff, getImageBufferStartCbor, getImageBufferStatus, getImagePusherStatus, getPreviewPedestalTiff, getPreviewPlot, getPreviewPlotBin, getResultScan, getStatistics, getStatisticsCalibration, getStatisticsDataCollection, getStatus, getVersion, getXfelEventCode, getXfelPulseId, type Options, postCancel, postConfigImageFormatConversion, postConfigImageFormatRaw, postDeactivate, postImageBufferClear, postInitialize, postPedestal, postStart, postTrigger, postWaitTillDone, postWaitUntilRunning, putConfigAzimInt, putConfigBraggIntegration, putConfigDarkMask, putConfigDetector, putConfigFileWriter, putConfigImageFormat, putConfigIndexing, putConfigInstrument, putConfigInternalGeneratorImage, putConfigInternalGeneratorImageTiff, putConfigRoi, putConfigSelectDetector, putConfigSpotFinding, putConfigUserMask, putConfigUserMaskTiff, putConfigZeromqMetadata, putConfigZeromqPreview } from '../sdk.gen'; -import type { getConfigAzimIntData, getConfigAzimIntResponse, getConfigBraggIntegrationData, getConfigBraggIntegrationResponse, getConfigDarkMaskData, getConfigDarkMaskResponse, getConfigDetectorData, getConfigDetectorResponse, getConfigFileWriterData, getConfigFileWriterResponse, getConfigImageFormatData, getConfigImageFormatResponse, getConfigIndexingData, getConfigIndexingResponse, getConfigInstrumentData, getConfigInstrumentResponse, getConfigMaskData, getConfigMaskResponse, getConfigMaskTiffData, getConfigMaskTiffResponse, getConfigRoiData, getConfigRoiResponse, getConfigSelectDetectorData, getConfigSelectDetectorResponse, getConfigSpotFindingData, getConfigSpotFindingResponse, getConfigUserMaskData, getConfigUserMaskResponse, getConfigUserMaskTiffData, getConfigUserMaskTiffResponse, getConfigZeromqMetadataData, getConfigZeromqMetadataResponse, getConfigZeromqPreviewData, getConfigZeromqPreviewResponse, getDetectorStatusData, getDetectorStatusError, getDetectorStatusResponse, getFpgaStatusData, getFpgaStatusResponse, getImageBufferImageCborData, getImageBufferImageCborError, getImageBufferImageCborResponse, getImageBufferImageJpegData, getImageBufferImageJpegError, getImageBufferImageJpegResponse, getImageBufferImageTiffData, getImageBufferImageTiffError, getImageBufferImageTiffResponse, getImageBufferStartCborData, getImageBufferStartCborError, getImageBufferStartCborResponse, getImageBufferStatusData, getImageBufferStatusError, getImageBufferStatusResponse, getImagePusherStatusData, getImagePusherStatusError, getImagePusherStatusResponse, getPreviewPedestalTiffData, getPreviewPedestalTiffResponse, getPreviewPlotBinData, getPreviewPlotBinError, getPreviewPlotBinResponse, getPreviewPlotData, getPreviewPlotError, getPreviewPlotResponse, getResultScanData, getResultScanError, getResultScanResponse, getStatisticsCalibrationData, getStatisticsCalibrationResponse, getStatisticsData, getStatisticsDataCollectionData, getStatisticsDataCollectionError, getStatisticsDataCollectionResponse, getStatisticsResponse, getStatusData, getStatusResponse, getVersionData, getVersionResponse, getXfelEventCodeData, getXfelEventCodeResponse, getXfelPulseIdData, getXfelPulseIdResponse, postCancelData, postConfigImageFormatConversionData, postConfigImageFormatConversionError, postConfigImageFormatRawData, postConfigImageFormatRawError, postDeactivateData, postDeactivateError, postImageBufferClearData, postImageBufferClearError, postInitializeData, postInitializeError, postPedestalData, postPedestalError, postStartData, postStartError, postTriggerData, postWaitTillDoneData, postWaitTillDoneError, postWaitUntilRunningData, postWaitUntilRunningError, putConfigAzimIntData, putConfigAzimIntError, putConfigBraggIntegrationData, putConfigBraggIntegrationError, putConfigDarkMaskData, putConfigDarkMaskError, putConfigDetectorData, putConfigDetectorError, putConfigFileWriterData, putConfigFileWriterError, putConfigImageFormatData, putConfigImageFormatError, putConfigIndexingData, putConfigIndexingError, putConfigInstrumentData, putConfigInstrumentError, putConfigInternalGeneratorImageData, putConfigInternalGeneratorImageError, putConfigInternalGeneratorImageTiffData, putConfigInternalGeneratorImageTiffError, putConfigRoiData, putConfigRoiError, putConfigSelectDetectorData, putConfigSelectDetectorError, putConfigSpotFindingData, putConfigSpotFindingError, putConfigUserMaskData, putConfigUserMaskError, putConfigUserMaskTiffData, putConfigUserMaskTiffError, putConfigZeromqMetadataData, putConfigZeromqMetadataError, putConfigZeromqPreviewData, putConfigZeromqPreviewError } from '../types.gen'; +import { deleteConfigRugnuxModel, getConfigAzimInt, getConfigBraggIntegration, getConfigDarkMask, getConfigDetector, getConfigFileWriter, getConfigImageFormat, getConfigIndexing, getConfigInstrument, getConfigMask, getConfigMaskTiff, getConfigRoi, getConfigRugnux, getConfigSelectDetector, getConfigSpotFinding, getConfigUserMask, getConfigUserMaskTiff, getConfigZeromqMetadata, getConfigZeromqPreview, getDetectorStatus, getFpgaStatus, getImageBufferImageCbor, getImageBufferImageJpeg, getImageBufferImageTiff, getImageBufferStartCbor, getImageBufferStatus, getImagePusherStatus, getPreviewPedestalTiff, getPreviewPlot, getPreviewPlotBin, getResultScan, getRugnuxStatus, getStatistics, getStatisticsCalibration, getStatisticsDataCollection, getStatus, getVersion, getXfelEventCode, getXfelPulseId, type Options, postCancel, postConfigImageFormatConversion, postConfigImageFormatRaw, postDeactivate, postImageBufferClear, postInitialize, postPedestal, postStart, postTrigger, postWaitTillDone, postWaitUntilRunning, putConfigAzimInt, putConfigBraggIntegration, putConfigDarkMask, putConfigDetector, putConfigFileWriter, putConfigImageFormat, putConfigIndexing, putConfigInstrument, putConfigInternalGeneratorImage, putConfigInternalGeneratorImageTiff, putConfigRoi, putConfigRugnux, putConfigRugnuxModel, putConfigSelectDetector, putConfigSpotFinding, putConfigUserMask, putConfigUserMaskTiff, putConfigZeromqMetadata, putConfigZeromqPreview } from '../sdk.gen'; +import type { deleteConfigRugnuxModelData, deleteConfigRugnuxModelError, getConfigAzimIntData, getConfigAzimIntResponse, getConfigBraggIntegrationData, getConfigBraggIntegrationResponse, getConfigDarkMaskData, getConfigDarkMaskResponse, getConfigDetectorData, getConfigDetectorResponse, getConfigFileWriterData, getConfigFileWriterResponse, getConfigImageFormatData, getConfigImageFormatResponse, getConfigIndexingData, getConfigIndexingResponse, getConfigInstrumentData, getConfigInstrumentResponse, getConfigMaskData, getConfigMaskResponse, getConfigMaskTiffData, getConfigMaskTiffResponse, getConfigRoiData, getConfigRoiResponse, getConfigRugnuxData, getConfigRugnuxError, getConfigRugnuxResponse, getConfigSelectDetectorData, getConfigSelectDetectorResponse, getConfigSpotFindingData, getConfigSpotFindingResponse, getConfigUserMaskData, getConfigUserMaskResponse, getConfigUserMaskTiffData, getConfigUserMaskTiffResponse, getConfigZeromqMetadataData, getConfigZeromqMetadataResponse, getConfigZeromqPreviewData, getConfigZeromqPreviewResponse, getDetectorStatusData, getDetectorStatusError, getDetectorStatusResponse, getFpgaStatusData, getFpgaStatusResponse, getImageBufferImageCborData, getImageBufferImageCborError, getImageBufferImageCborResponse, getImageBufferImageJpegData, getImageBufferImageJpegError, getImageBufferImageJpegResponse, getImageBufferImageTiffData, getImageBufferImageTiffError, getImageBufferImageTiffResponse, getImageBufferStartCborData, getImageBufferStartCborError, getImageBufferStartCborResponse, getImageBufferStatusData, getImageBufferStatusError, getImageBufferStatusResponse, getImagePusherStatusData, getImagePusherStatusError, getImagePusherStatusResponse, getPreviewPedestalTiffData, getPreviewPedestalTiffResponse, getPreviewPlotBinData, getPreviewPlotBinError, getPreviewPlotBinResponse, getPreviewPlotData, getPreviewPlotError, getPreviewPlotResponse, getResultScanData, getResultScanError, getResultScanResponse, getRugnuxStatusData, getRugnuxStatusError, getRugnuxStatusResponse, getStatisticsCalibrationData, getStatisticsCalibrationResponse, getStatisticsData, getStatisticsDataCollectionData, getStatisticsDataCollectionError, getStatisticsDataCollectionResponse, getStatisticsResponse, getStatusData, getStatusResponse, getVersionData, getVersionResponse, getXfelEventCodeData, getXfelEventCodeResponse, getXfelPulseIdData, getXfelPulseIdResponse, postCancelData, postConfigImageFormatConversionData, postConfigImageFormatConversionError, postConfigImageFormatRawData, postConfigImageFormatRawError, postDeactivateData, postDeactivateError, postImageBufferClearData, postImageBufferClearError, postInitializeData, postInitializeError, postPedestalData, postPedestalError, postStartData, postStartError, postTriggerData, postWaitTillDoneData, postWaitTillDoneError, postWaitUntilRunningData, postWaitUntilRunningError, putConfigAzimIntData, putConfigAzimIntError, putConfigBraggIntegrationData, putConfigBraggIntegrationError, putConfigDarkMaskData, putConfigDarkMaskError, putConfigDetectorData, putConfigDetectorError, putConfigFileWriterData, putConfigFileWriterError, putConfigImageFormatData, putConfigImageFormatError, putConfigIndexingData, putConfigIndexingError, putConfigInstrumentData, putConfigInstrumentError, putConfigInternalGeneratorImageData, putConfigInternalGeneratorImageError, putConfigInternalGeneratorImageTiffData, putConfigInternalGeneratorImageTiffError, putConfigRoiData, putConfigRoiError, putConfigRugnuxData, putConfigRugnuxError, putConfigRugnuxModelData, putConfigRugnuxModelError, putConfigSelectDetectorData, putConfigSelectDetectorError, putConfigSpotFindingData, putConfigSpotFindingError, putConfigUserMaskData, putConfigUserMaskError, putConfigUserMaskTiffData, putConfigUserMaskTiffError, putConfigZeromqMetadataData, putConfigZeromqMetadataError, putConfigZeromqPreviewData, putConfigZeromqPreviewError } from '../types.gen'; /** * Initialize detector and data acquisition @@ -156,6 +156,11 @@ export const postTriggerMutation = (options?: Partial>) * Any frame that is currently being processed by CPU will be finished and sent to writer. * Given the command is making sure to gracefully stop data acquisition and detector, it might take some time to switch back after command finished to `Idle` state. * + * With rugnux live mode (`/config/rugnux`) the command also cuts the rugnux analysis, during the collection + * or after its last image alike: the collection ends with what the analysis has established + * (see `cut` in `/rugnux/status`). After the last image the collection itself is complete and is not + * marked as cancelled. + * * If data collection is not running, the command has no effect. * */ @@ -675,6 +680,109 @@ export const putConfigSelectDetectorMutation = (options?: Partial) => createQueryKey('getConfigRugnux', options); + +/** + * Get rugnux live mode settings and model status + * + * Can be done anytime + */ +export const getConfigRugnuxOptions = (options?: Options) => queryOptions>({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getConfigRugnux({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getConfigRugnuxQueryKey(options) +}); + +/** + * Change rugnux live mode settings + * + * This can only be done when detector is `Idle`, `Error` or `Inactive` states. + * + */ +export const putConfigRugnuxMutation = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (fnOptions) => { + const { data } = await putConfigRugnux({ + ...options, + ...fnOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +/** + * Remove the model used by rugnux live mode + * + * This can only be done when detector is `Idle`, `Error` or `Inactive` states. + * + */ +export const deleteConfigRugnuxModelMutation = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (fnOptions) => { + const { data } = await deleteConfigRugnuxModel({ + ...options, + ...fnOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +/** + * Upload the model used by rugnux live mode + * + * This can only be done when detector is `Idle`, `Error` or `Inactive` states. + * The model (PDB or mmCIF, optionally gzipped; at most 64 MiB) is used for molecular replacement + * and validation of every following rugnux live collection, until it is removed with + * `DELETE /config/rugnux/model` or replaced by another upload. + * + */ +export const putConfigRugnuxModelMutation = (options?: Partial>): UseMutationOptions> => { + const mutationOptions: UseMutationOptions> = { + mutationFn: async (fnOptions) => { + const { data } = await putConfigRugnuxModel({ + ...options, + ...fnOptions, + throwOnError: true + }); + return data; + } + }; + return mutationOptions; +}; + +export const getRugnuxStatusQueryKey = (options?: Options) => createQueryKey('getRugnuxStatus', options); + +/** + * Get live rugnux processing status of the last collection + * + * Can be done anytime + */ +export const getRugnuxStatusOptions = (options?: Options) => queryOptions>({ + queryFn: async ({ queryKey, signal }) => { + const { data } = await getRugnuxStatus({ + ...options, + ...queryKey[0], + signal, + throwOnError: true + }); + return data; + }, + queryKey: getRugnuxStatusQueryKey(options) +}); + export const getConfigZeromqPreviewQueryKey = (options?: Options) => createQueryKey('getConfigZeromqPreview', options); /** diff --git a/frontend/src/client/index.ts b/frontend/src/client/index.ts index 12298acb4..a99adbd54 100644 --- a/frontend/src/client/index.ts +++ b/frontend/src/client/index.ts @@ -1,4 +1,4 @@ // This file is auto-generated by @hey-api/openapi-ts -export { getConfigAzimInt, getConfigBraggIntegration, getConfigDarkMask, getConfigDetector, getConfigFileWriter, getConfigImageFormat, getConfigIndexing, getConfigInstrument, getConfigMask, getConfigMaskTiff, getConfigRoi, getConfigSelectDetector, getConfigSpotFinding, getConfigUserMask, getConfigUserMaskTiff, getConfigZeromqMetadata, getConfigZeromqPreview, getDetectorStatus, getFpgaStatus, getImageBufferImageCbor, getImageBufferImageJpeg, getImageBufferImageTiff, getImageBufferStartCbor, getImageBufferStatus, getImagePusherStatus, getPreviewPedestalTiff, getPreviewPlot, getPreviewPlotBin, getResultScan, getStatistics, getStatisticsCalibration, getStatisticsDataCollection, getStatus, getVersion, getXfelEventCode, getXfelPulseId, type Options, postCancel, postConfigImageFormatConversion, postConfigImageFormatRaw, postDeactivate, postImageBufferClear, postInitialize, postPedestal, postStart, postTrigger, postWaitTillDone, postWaitUntilRunning, putConfigAzimInt, putConfigBraggIntegration, putConfigDarkMask, putConfigDetector, putConfigFileWriter, putConfigImageFormat, putConfigIndexing, putConfigInstrument, putConfigInternalGeneratorImage, putConfigInternalGeneratorImageTiff, putConfigRoi, putConfigSelectDetector, putConfigSpotFinding, putConfigUserMask, putConfigUserMaskTiff, putConfigZeromqMetadata, putConfigZeromqPreview } from './sdk.gen'; -export { type azim_int_settings, azint_unit, type background, type binning, type bragg_integration_settings, type broker_status, type calibration_statistics, type ClientOptions, color_scale, type crystal_lattice, type dark_mask_settings, type dataset_settings, type dataset_settingsWritable, type detector, type detector_list, type detector_list_element, type detector_module, detector_module_direction, detector_power_state, type detector_selection, type detector_settings, detector_state, type detector_status, detector_timing, detector_type, type error_message, type experimental_coord, file_writer_format, type file_writer_settings, type fill_value, type fpga_status, geom_refinement_algorithm, type getConfigAzimIntData, type getConfigAzimIntResponse, type getConfigAzimIntResponses, type getConfigBraggIntegrationData, type getConfigBraggIntegrationResponse, type getConfigBraggIntegrationResponses, type getConfigDarkMaskData, type getConfigDarkMaskResponse, type getConfigDarkMaskResponses, type getConfigDetectorData, type getConfigDetectorResponse, type getConfigDetectorResponses, type getConfigFileWriterData, type getConfigFileWriterResponse, type getConfigFileWriterResponses, type getConfigImageFormatData, type getConfigImageFormatResponse, type getConfigImageFormatResponses, type getConfigIndexingData, type getConfigIndexingResponse, type getConfigIndexingResponses, type getConfigInstrumentData, type getConfigInstrumentResponse, type getConfigInstrumentResponses, type getConfigMaskData, type getConfigMaskResponse, type getConfigMaskResponses, type getConfigMaskTiffData, type getConfigMaskTiffResponse, type getConfigMaskTiffResponses, type getConfigRoiData, type getConfigRoiResponse, type getConfigRoiResponses, type getConfigSelectDetectorData, type getConfigSelectDetectorResponse, type getConfigSelectDetectorResponses, type getConfigSpotFindingData, type getConfigSpotFindingResponse, type getConfigSpotFindingResponses, type getConfigUserMaskData, type getConfigUserMaskResponse, type getConfigUserMaskResponses, type getConfigUserMaskTiffData, type getConfigUserMaskTiffResponse, type getConfigUserMaskTiffResponses, type getConfigZeromqMetadataData, type getConfigZeromqMetadataResponse, type getConfigZeromqMetadataResponses, type getConfigZeromqPreviewData, type getConfigZeromqPreviewResponse, type getConfigZeromqPreviewResponses, type getDetectorStatusData, type getDetectorStatusError, type getDetectorStatusErrors, type getDetectorStatusResponse, type getDetectorStatusResponses, type getFpgaStatusData, type getFpgaStatusResponse, type getFpgaStatusResponses, type getImageBufferImageCborData, type getImageBufferImageCborError, type getImageBufferImageCborErrors, type getImageBufferImageCborResponse, type getImageBufferImageCborResponses, type getImageBufferImageJpegData, type getImageBufferImageJpegError, type getImageBufferImageJpegErrors, type getImageBufferImageJpegResponse, type getImageBufferImageJpegResponses, type getImageBufferImageTiffData, type getImageBufferImageTiffError, type getImageBufferImageTiffErrors, type getImageBufferImageTiffResponse, type getImageBufferImageTiffResponses, type getImageBufferStartCborData, type getImageBufferStartCborError, type getImageBufferStartCborErrors, type getImageBufferStartCborResponse, type getImageBufferStartCborResponses, type getImageBufferStatusData, type getImageBufferStatusError, type getImageBufferStatusErrors, type getImageBufferStatusResponse, type getImageBufferStatusResponses, type getImagePusherStatusData, type getImagePusherStatusError, type getImagePusherStatusErrors, type getImagePusherStatusResponse, type getImagePusherStatusResponses, type getPreviewPedestalTiffData, type getPreviewPedestalTiffErrors, type getPreviewPedestalTiffResponse, type getPreviewPedestalTiffResponses, type getPreviewPlotBinData, type getPreviewPlotBinError, type getPreviewPlotBinErrors, type getPreviewPlotBinResponse, type getPreviewPlotBinResponses, type getPreviewPlotData, type getPreviewPlotError, type getPreviewPlotErrors, type getPreviewPlotResponse, type getPreviewPlotResponses, type getResultScanData, type getResultScanError, type getResultScanErrors, type getResultScanResponse, type getResultScanResponses, type getStatisticsCalibrationData, type getStatisticsCalibrationResponse, type getStatisticsCalibrationResponses, type getStatisticsData, type getStatisticsDataCollectionData, type getStatisticsDataCollectionError, type getStatisticsDataCollectionErrors, type getStatisticsDataCollectionResponse, type getStatisticsDataCollectionResponses, type getStatisticsResponse, type getStatisticsResponses, type getStatusData, type getStatusResponse, type getStatusResponses, type getVersionData, type getVersionResponse, type getVersionResponses, type getXfelEventCodeData, type getXfelEventCodeErrors, type getXfelEventCodeResponse, type getXfelEventCodeResponses, type getXfelPulseIdData, type getXfelPulseIdErrors, type getXfelPulseIdResponse, type getXfelPulseIdResponses, type grid_scan, type image_buffer_status, type image_format_settings, type image_id, type image_pusher_status, image_pusher_type, indexing_algorithm, type indexing_settings, type instrument_metadata, integration_model, type jfjoch_settings, type jfjoch_statistics, type jpeg_quality, type measurement_statistics, type pcie_devices, type pixel_mask_statistics, type plot, plot_type, plot_unit_x, type plots, type postCancelData, type postCancelResponses, type postConfigImageFormatConversionData, type postConfigImageFormatConversionError, type postConfigImageFormatConversionErrors, type postConfigImageFormatConversionResponses, type postConfigImageFormatRawData, type postConfigImageFormatRawError, type postConfigImageFormatRawErrors, type postConfigImageFormatRawResponses, type postDeactivateData, type postDeactivateError, type postDeactivateErrors, type postDeactivateResponses, type postImageBufferClearData, type postImageBufferClearError, type postImageBufferClearErrors, type postImageBufferClearResponses, type postInitializeData, type postInitializeError, type postInitializeErrors, type postInitializeResponses, type postPedestalData, type postPedestalError, type postPedestalErrors, type postPedestalResponses, type postStartData, type postStartError, type postStartErrors, type postStartResponses, type postTriggerData, type postTriggerResponses, type postWaitTillDoneData, type postWaitTillDoneError, type postWaitTillDoneErrors, type postWaitTillDoneResponses, type postWaitUntilRunningData, type postWaitUntilRunningError, type postWaitUntilRunningErrors, type postWaitUntilRunningResponses, type powder_calibration_fit_sigma, type powder_calibration_output, type powder_calibration_outputWritable, type powder_calibration_quality, type powder_calibration_spot_check, type putConfigAzimIntData, type putConfigAzimIntError, type putConfigAzimIntErrors, type putConfigAzimIntResponses, type putConfigBraggIntegrationData, type putConfigBraggIntegrationError, type putConfigBraggIntegrationErrors, type putConfigBraggIntegrationResponses, type putConfigDarkMaskData, type putConfigDarkMaskError, type putConfigDarkMaskErrors, type putConfigDarkMaskResponses, type putConfigDetectorData, type putConfigDetectorError, type putConfigDetectorErrors, type putConfigDetectorResponses, type putConfigFileWriterData, type putConfigFileWriterError, type putConfigFileWriterErrors, type putConfigFileWriterResponses, type putConfigImageFormatData, type putConfigImageFormatError, type putConfigImageFormatErrors, type putConfigImageFormatResponses, type putConfigIndexingData, type putConfigIndexingError, type putConfigIndexingErrors, type putConfigIndexingResponses, type putConfigInstrumentData, type putConfigInstrumentError, type putConfigInstrumentErrors, type putConfigInstrumentResponses, type putConfigInternalGeneratorImageData, type putConfigInternalGeneratorImageError, type putConfigInternalGeneratorImageErrors, type putConfigInternalGeneratorImageResponses, type putConfigInternalGeneratorImageTiffData, type putConfigInternalGeneratorImageTiffError, type putConfigInternalGeneratorImageTiffErrors, type putConfigInternalGeneratorImageTiffResponses, type putConfigRoiData, type putConfigRoiError, type putConfigRoiErrors, type putConfigRoiResponses, type putConfigSelectDetectorData, type putConfigSelectDetectorError, type putConfigSelectDetectorErrors, type putConfigSelectDetectorResponses, type putConfigSpotFindingData, type putConfigSpotFindingError, type putConfigSpotFindingErrors, type putConfigSpotFindingResponses, type putConfigUserMaskData, type putConfigUserMaskError, type putConfigUserMaskErrors, type putConfigUserMaskResponses, type putConfigUserMaskTiffData, type putConfigUserMaskTiffError, type putConfigUserMaskTiffErrors, type putConfigUserMaskTiffResponses, type putConfigZeromqMetadataData, type putConfigZeromqMetadataError, type putConfigZeromqMetadataErrors, type putConfigZeromqMetadataResponses, type putConfigZeromqPreviewData, type putConfigZeromqPreviewError, type putConfigZeromqPreviewErrors, type putConfigZeromqPreviewResponses, type resolution_estimate, type resolution_ring, type roi, type roi_azim_list, type roi_azimuthal, type roi_box, type roi_box_list, type roi_circle, type roi_circle_list, type roi_definitions, type rotation_axis, type saturation, type scan_result, type show_beam_center, type show_predictions, type show_roi, type show_spots, type show_user_mask, type spot_finding_settings, type standard_detector_geometry, type tcp_settings, type unit_cell, type zeromq_metadata_settings, type zeromq_preview_settings, type zeromq_settings } from './types.gen'; +export { deleteConfigRugnuxModel, getConfigAzimInt, getConfigBraggIntegration, getConfigDarkMask, getConfigDetector, getConfigFileWriter, getConfigImageFormat, getConfigIndexing, getConfigInstrument, getConfigMask, getConfigMaskTiff, getConfigRoi, getConfigRugnux, getConfigSelectDetector, getConfigSpotFinding, getConfigUserMask, getConfigUserMaskTiff, getConfigZeromqMetadata, getConfigZeromqPreview, getDetectorStatus, getFpgaStatus, getImageBufferImageCbor, getImageBufferImageJpeg, getImageBufferImageTiff, getImageBufferStartCbor, getImageBufferStatus, getImagePusherStatus, getLiveEvents, getPreviewPedestalTiff, getPreviewPlot, getPreviewPlotBin, getResultScan, getRugnuxStatus, getStatistics, getStatisticsCalibration, getStatisticsDataCollection, getStatus, getVersion, getXfelEventCode, getXfelPulseId, type Options, postCancel, postConfigImageFormatConversion, postConfigImageFormatRaw, postDeactivate, postImageBufferClear, postInitialize, postPedestal, postStart, postTrigger, postWaitTillDone, postWaitUntilRunning, putConfigAzimInt, putConfigBraggIntegration, putConfigDarkMask, putConfigDetector, putConfigFileWriter, putConfigImageFormat, putConfigIndexing, putConfigInstrument, putConfigInternalGeneratorImage, putConfigInternalGeneratorImageTiff, putConfigRoi, putConfigRugnux, putConfigRugnuxModel, putConfigSelectDetector, putConfigSpotFinding, putConfigUserMask, putConfigUserMaskTiff, putConfigZeromqMetadata, putConfigZeromqPreview } from './sdk.gen'; +export { type azim_int_settings, azint_unit, type background, type binning, type bragg_integration_settings, type broker_status, type calibration_statistics, type ClientOptions, color_scale, type crystal_lattice, type dark_mask_settings, type dataset_settings, type dataset_settingsWritable, type deleteConfigRugnuxModelData, type deleteConfigRugnuxModelError, type deleteConfigRugnuxModelErrors, type deleteConfigRugnuxModelResponses, type detector, type detector_list, type detector_list_element, type detector_module, detector_module_direction, detector_power_state, type detector_selection, type detector_settings, detector_state, type detector_status, detector_timing, detector_type, type error_message, type experimental_coord, file_writer_format, type file_writer_settings, type fill_value, type fpga_status, geom_refinement_algorithm, type getConfigAzimIntData, type getConfigAzimIntResponse, type getConfigAzimIntResponses, type getConfigBraggIntegrationData, type getConfigBraggIntegrationResponse, type getConfigBraggIntegrationResponses, type getConfigDarkMaskData, type getConfigDarkMaskResponse, type getConfigDarkMaskResponses, type getConfigDetectorData, type getConfigDetectorResponse, type getConfigDetectorResponses, type getConfigFileWriterData, type getConfigFileWriterResponse, type getConfigFileWriterResponses, type getConfigImageFormatData, type getConfigImageFormatResponse, type getConfigImageFormatResponses, type getConfigIndexingData, type getConfigIndexingResponse, type getConfigIndexingResponses, type getConfigInstrumentData, type getConfigInstrumentResponse, type getConfigInstrumentResponses, type getConfigMaskData, type getConfigMaskResponse, type getConfigMaskResponses, type getConfigMaskTiffData, type getConfigMaskTiffResponse, type getConfigMaskTiffResponses, type getConfigRoiData, type getConfigRoiResponse, type getConfigRoiResponses, type getConfigRugnuxData, type getConfigRugnuxError, type getConfigRugnuxErrors, type getConfigRugnuxResponse, type getConfigRugnuxResponses, type getConfigSelectDetectorData, type getConfigSelectDetectorResponse, type getConfigSelectDetectorResponses, type getConfigSpotFindingData, type getConfigSpotFindingResponse, type getConfigSpotFindingResponses, type getConfigUserMaskData, type getConfigUserMaskResponse, type getConfigUserMaskResponses, type getConfigUserMaskTiffData, type getConfigUserMaskTiffResponse, type getConfigUserMaskTiffResponses, type getConfigZeromqMetadataData, type getConfigZeromqMetadataResponse, type getConfigZeromqMetadataResponses, type getConfigZeromqPreviewData, type getConfigZeromqPreviewResponse, type getConfigZeromqPreviewResponses, type getDetectorStatusData, type getDetectorStatusError, type getDetectorStatusErrors, type getDetectorStatusResponse, type getDetectorStatusResponses, type getFpgaStatusData, type getFpgaStatusResponse, type getFpgaStatusResponses, type getImageBufferImageCborData, type getImageBufferImageCborError, type getImageBufferImageCborErrors, type getImageBufferImageCborResponse, type getImageBufferImageCborResponses, type getImageBufferImageJpegData, type getImageBufferImageJpegError, type getImageBufferImageJpegErrors, type getImageBufferImageJpegResponse, type getImageBufferImageJpegResponses, type getImageBufferImageTiffData, type getImageBufferImageTiffError, type getImageBufferImageTiffErrors, type getImageBufferImageTiffResponse, type getImageBufferImageTiffResponses, type getImageBufferStartCborData, type getImageBufferStartCborError, type getImageBufferStartCborErrors, type getImageBufferStartCborResponse, type getImageBufferStartCborResponses, type getImageBufferStatusData, type getImageBufferStatusError, type getImageBufferStatusErrors, type getImageBufferStatusResponse, type getImageBufferStatusResponses, type getImagePusherStatusData, type getImagePusherStatusError, type getImagePusherStatusErrors, type getImagePusherStatusResponse, type getImagePusherStatusResponses, type getLiveEventsData, type getLiveEventsError, type getLiveEventsErrors, type getLiveEventsResponse, type getLiveEventsResponses, type getPreviewPedestalTiffData, type getPreviewPedestalTiffErrors, type getPreviewPedestalTiffResponse, type getPreviewPedestalTiffResponses, type getPreviewPlotBinData, type getPreviewPlotBinError, type getPreviewPlotBinErrors, type getPreviewPlotBinResponse, type getPreviewPlotBinResponses, type getPreviewPlotData, type getPreviewPlotError, type getPreviewPlotErrors, type getPreviewPlotResponse, type getPreviewPlotResponses, type getResultScanData, type getResultScanError, type getResultScanErrors, type getResultScanResponse, type getResultScanResponses, type getRugnuxStatusData, type getRugnuxStatusError, type getRugnuxStatusErrors, type getRugnuxStatusResponse, type getRugnuxStatusResponses, type getStatisticsCalibrationData, type getStatisticsCalibrationResponse, type getStatisticsCalibrationResponses, type getStatisticsData, type getStatisticsDataCollectionData, type getStatisticsDataCollectionError, type getStatisticsDataCollectionErrors, type getStatisticsDataCollectionResponse, type getStatisticsDataCollectionResponses, type getStatisticsResponse, type getStatisticsResponses, type getStatusData, type getStatusResponse, type getStatusResponses, type getVersionData, type getVersionResponse, type getVersionResponses, type getXfelEventCodeData, type getXfelEventCodeErrors, type getXfelEventCodeResponse, type getXfelEventCodeResponses, type getXfelPulseIdData, type getXfelPulseIdErrors, type getXfelPulseIdResponse, type getXfelPulseIdResponses, type grid_scan, type image_buffer_status, type image_format_settings, type image_id, type image_pusher_status, image_pusher_type, indexing_algorithm, type indexing_settings, type instrument_metadata, integration_model, type jfjoch_settings, type jfjoch_statistics, type jpeg_quality, type measurement_statistics, type pcie_devices, type pixel_mask_statistics, type plot, plot_type, plot_unit_x, type plots, type postCancelData, type postCancelResponses, type postConfigImageFormatConversionData, type postConfigImageFormatConversionError, type postConfigImageFormatConversionErrors, type postConfigImageFormatConversionResponses, type postConfigImageFormatRawData, type postConfigImageFormatRawError, type postConfigImageFormatRawErrors, type postConfigImageFormatRawResponses, type postDeactivateData, type postDeactivateError, type postDeactivateErrors, type postDeactivateResponses, type postImageBufferClearData, type postImageBufferClearError, type postImageBufferClearErrors, type postImageBufferClearResponses, type postInitializeData, type postInitializeError, type postInitializeErrors, type postInitializeResponses, type postPedestalData, type postPedestalError, type postPedestalErrors, type postPedestalResponses, type postStartData, type postStartError, type postStartErrors, type postStartResponses, type postTriggerData, type postTriggerResponses, type postWaitTillDoneData, type postWaitTillDoneError, type postWaitTillDoneErrors, type postWaitTillDoneResponses, type postWaitUntilRunningData, type postWaitUntilRunningError, type postWaitUntilRunningErrors, type postWaitUntilRunningResponses, type powder_calibration_fit_sigma, type powder_calibration_output, type powder_calibration_outputWritable, type powder_calibration_quality, type powder_calibration_spot_check, type putConfigAzimIntData, type putConfigAzimIntError, type putConfigAzimIntErrors, type putConfigAzimIntResponses, type putConfigBraggIntegrationData, type putConfigBraggIntegrationError, type putConfigBraggIntegrationErrors, type putConfigBraggIntegrationResponses, type putConfigDarkMaskData, type putConfigDarkMaskError, type putConfigDarkMaskErrors, type putConfigDarkMaskResponses, type putConfigDetectorData, type putConfigDetectorError, type putConfigDetectorErrors, type putConfigDetectorResponses, type putConfigFileWriterData, type putConfigFileWriterError, type putConfigFileWriterErrors, type putConfigFileWriterResponses, type putConfigImageFormatData, type putConfigImageFormatError, type putConfigImageFormatErrors, type putConfigImageFormatResponses, type putConfigIndexingData, type putConfigIndexingError, type putConfigIndexingErrors, type putConfigIndexingResponses, type putConfigInstrumentData, type putConfigInstrumentError, type putConfigInstrumentErrors, type putConfigInstrumentResponses, type putConfigInternalGeneratorImageData, type putConfigInternalGeneratorImageError, type putConfigInternalGeneratorImageErrors, type putConfigInternalGeneratorImageResponses, type putConfigInternalGeneratorImageTiffData, type putConfigInternalGeneratorImageTiffError, type putConfigInternalGeneratorImageTiffErrors, type putConfigInternalGeneratorImageTiffResponses, type putConfigRoiData, type putConfigRoiError, type putConfigRoiErrors, type putConfigRoiResponses, type putConfigRugnuxData, type putConfigRugnuxError, type putConfigRugnuxErrors, type putConfigRugnuxModelData, type putConfigRugnuxModelError, type putConfigRugnuxModelErrors, type putConfigRugnuxModelResponses, type putConfigRugnuxResponses, type putConfigSelectDetectorData, type putConfigSelectDetectorError, type putConfigSelectDetectorErrors, type putConfigSelectDetectorResponses, type putConfigSpotFindingData, type putConfigSpotFindingError, type putConfigSpotFindingErrors, type putConfigSpotFindingResponses, type putConfigUserMaskData, type putConfigUserMaskError, type putConfigUserMaskErrors, type putConfigUserMaskResponses, type putConfigUserMaskTiffData, type putConfigUserMaskTiffError, type putConfigUserMaskTiffErrors, type putConfigUserMaskTiffResponses, type putConfigZeromqMetadataData, type putConfigZeromqMetadataError, type putConfigZeromqMetadataErrors, type putConfigZeromqMetadataResponses, type putConfigZeromqPreviewData, type putConfigZeromqPreviewError, type putConfigZeromqPreviewErrors, type putConfigZeromqPreviewResponses, type resolution_estimate, type resolution_ring, type roi, type roi_azim_list, type roi_azimuthal, type roi_box, type roi_box_list, type roi_circle, type roi_circle_list, type roi_definitions, type rotation_axis, type rugnux_live_status, type rugnux_live_step, type rugnux_settings, type rugnux_status, type rugnux_summary_row, type saturation, type scan_result, type show_beam_center, type show_predictions, type show_roi, type show_spots, type show_user_mask, type spot_finding_settings, type standard_detector_geometry, type tcp_settings, type unit_cell, type zeromq_metadata_settings, type zeromq_preview_settings, type zeromq_settings } from './types.gen'; diff --git a/frontend/src/client/sdk.gen.ts b/frontend/src/client/sdk.gen.ts index 56ad7f27d..9e0922bea 100644 --- a/frontend/src/client/sdk.gen.ts +++ b/frontend/src/client/sdk.gen.ts @@ -1,8 +1,8 @@ // This file is auto-generated by @hey-api/openapi-ts -import type { Client, ClientMeta, Options as Options2, RequestResult, TDataShape } from './client'; +import type { Client, ClientMeta, Options as Options2, RequestResult, ServerSentEventsResult, TDataShape } from './client'; import { client } from './client.gen'; -import type { getConfigAzimIntData, getConfigAzimIntResponses, getConfigBraggIntegrationData, getConfigBraggIntegrationResponses, getConfigDarkMaskData, getConfigDarkMaskResponses, getConfigDetectorData, getConfigDetectorResponses, getConfigFileWriterData, getConfigFileWriterResponses, getConfigImageFormatData, getConfigImageFormatResponses, getConfigIndexingData, getConfigIndexingResponses, getConfigInstrumentData, getConfigInstrumentResponses, getConfigMaskData, getConfigMaskResponses, getConfigMaskTiffData, getConfigMaskTiffResponses, getConfigRoiData, getConfigRoiResponses, getConfigSelectDetectorData, getConfigSelectDetectorResponses, getConfigSpotFindingData, getConfigSpotFindingResponses, getConfigUserMaskData, getConfigUserMaskResponses, getConfigUserMaskTiffData, getConfigUserMaskTiffResponses, getConfigZeromqMetadataData, getConfigZeromqMetadataResponses, getConfigZeromqPreviewData, getConfigZeromqPreviewResponses, getDetectorStatusData, getDetectorStatusErrors, getDetectorStatusResponses, getFpgaStatusData, getFpgaStatusResponses, getImageBufferImageCborData, getImageBufferImageCborErrors, getImageBufferImageCborResponses, getImageBufferImageJpegData, getImageBufferImageJpegErrors, getImageBufferImageJpegResponses, getImageBufferImageTiffData, getImageBufferImageTiffErrors, getImageBufferImageTiffResponses, getImageBufferStartCborData, getImageBufferStartCborErrors, getImageBufferStartCborResponses, getImageBufferStatusData, getImageBufferStatusErrors, getImageBufferStatusResponses, getImagePusherStatusData, getImagePusherStatusErrors, getImagePusherStatusResponses, getPreviewPedestalTiffData, getPreviewPedestalTiffErrors, getPreviewPedestalTiffResponses, getPreviewPlotBinData, getPreviewPlotBinErrors, getPreviewPlotBinResponses, getPreviewPlotData, getPreviewPlotErrors, getPreviewPlotResponses, getResultScanData, getResultScanErrors, getResultScanResponses, getStatisticsCalibrationData, getStatisticsCalibrationResponses, getStatisticsData, getStatisticsDataCollectionData, getStatisticsDataCollectionErrors, getStatisticsDataCollectionResponses, getStatisticsResponses, getStatusData, getStatusResponses, getVersionData, getVersionResponses, getXfelEventCodeData, getXfelEventCodeErrors, getXfelEventCodeResponses, getXfelPulseIdData, getXfelPulseIdErrors, getXfelPulseIdResponses, postCancelData, postCancelResponses, postConfigImageFormatConversionData, postConfigImageFormatConversionErrors, postConfigImageFormatConversionResponses, postConfigImageFormatRawData, postConfigImageFormatRawErrors, postConfigImageFormatRawResponses, postDeactivateData, postDeactivateErrors, postDeactivateResponses, postImageBufferClearData, postImageBufferClearErrors, postImageBufferClearResponses, postInitializeData, postInitializeErrors, postInitializeResponses, postPedestalData, postPedestalErrors, postPedestalResponses, postStartData, postStartErrors, postStartResponses, postTriggerData, postTriggerResponses, postWaitTillDoneData, postWaitTillDoneErrors, postWaitTillDoneResponses, postWaitUntilRunningData, postWaitUntilRunningErrors, postWaitUntilRunningResponses, putConfigAzimIntData, putConfigAzimIntErrors, putConfigAzimIntResponses, putConfigBraggIntegrationData, putConfigBraggIntegrationErrors, putConfigBraggIntegrationResponses, putConfigDarkMaskData, putConfigDarkMaskErrors, putConfigDarkMaskResponses, putConfigDetectorData, putConfigDetectorErrors, putConfigDetectorResponses, putConfigFileWriterData, putConfigFileWriterErrors, putConfigFileWriterResponses, putConfigImageFormatData, putConfigImageFormatErrors, putConfigImageFormatResponses, putConfigIndexingData, putConfigIndexingErrors, putConfigIndexingResponses, putConfigInstrumentData, putConfigInstrumentErrors, putConfigInstrumentResponses, putConfigInternalGeneratorImageData, putConfigInternalGeneratorImageErrors, putConfigInternalGeneratorImageResponses, putConfigInternalGeneratorImageTiffData, putConfigInternalGeneratorImageTiffErrors, putConfigInternalGeneratorImageTiffResponses, putConfigRoiData, putConfigRoiErrors, putConfigRoiResponses, putConfigSelectDetectorData, putConfigSelectDetectorErrors, putConfigSelectDetectorResponses, putConfigSpotFindingData, putConfigSpotFindingErrors, putConfigSpotFindingResponses, putConfigUserMaskData, putConfigUserMaskErrors, putConfigUserMaskResponses, putConfigUserMaskTiffData, putConfigUserMaskTiffErrors, putConfigUserMaskTiffResponses, putConfigZeromqMetadataData, putConfigZeromqMetadataErrors, putConfigZeromqMetadataResponses, putConfigZeromqPreviewData, putConfigZeromqPreviewErrors, putConfigZeromqPreviewResponses } from './types.gen'; +import type { deleteConfigRugnuxModelData, deleteConfigRugnuxModelErrors, deleteConfigRugnuxModelResponses, getConfigAzimIntData, getConfigAzimIntResponses, getConfigBraggIntegrationData, getConfigBraggIntegrationResponses, getConfigDarkMaskData, getConfigDarkMaskResponses, getConfigDetectorData, getConfigDetectorResponses, getConfigFileWriterData, getConfigFileWriterResponses, getConfigImageFormatData, getConfigImageFormatResponses, getConfigIndexingData, getConfigIndexingResponses, getConfigInstrumentData, getConfigInstrumentResponses, getConfigMaskData, getConfigMaskResponses, getConfigMaskTiffData, getConfigMaskTiffResponses, getConfigRoiData, getConfigRoiResponses, getConfigRugnuxData, getConfigRugnuxErrors, getConfigRugnuxResponses, getConfigSelectDetectorData, getConfigSelectDetectorResponses, getConfigSpotFindingData, getConfigSpotFindingResponses, getConfigUserMaskData, getConfigUserMaskResponses, getConfigUserMaskTiffData, getConfigUserMaskTiffResponses, getConfigZeromqMetadataData, getConfigZeromqMetadataResponses, getConfigZeromqPreviewData, getConfigZeromqPreviewResponses, getDetectorStatusData, getDetectorStatusErrors, getDetectorStatusResponses, getFpgaStatusData, getFpgaStatusResponses, getImageBufferImageCborData, getImageBufferImageCborErrors, getImageBufferImageCborResponses, getImageBufferImageJpegData, getImageBufferImageJpegErrors, getImageBufferImageJpegResponses, getImageBufferImageTiffData, getImageBufferImageTiffErrors, getImageBufferImageTiffResponses, getImageBufferStartCborData, getImageBufferStartCborErrors, getImageBufferStartCborResponses, getImageBufferStatusData, getImageBufferStatusErrors, getImageBufferStatusResponses, getImagePusherStatusData, getImagePusherStatusErrors, getImagePusherStatusResponses, getLiveEventsData, getLiveEventsErrors, getLiveEventsResponse, getLiveEventsResponses, getPreviewPedestalTiffData, getPreviewPedestalTiffErrors, getPreviewPedestalTiffResponses, getPreviewPlotBinData, getPreviewPlotBinErrors, getPreviewPlotBinResponses, getPreviewPlotData, getPreviewPlotErrors, getPreviewPlotResponses, getResultScanData, getResultScanErrors, getResultScanResponses, getRugnuxStatusData, getRugnuxStatusErrors, getRugnuxStatusResponses, getStatisticsCalibrationData, getStatisticsCalibrationResponses, getStatisticsData, getStatisticsDataCollectionData, getStatisticsDataCollectionErrors, getStatisticsDataCollectionResponses, getStatisticsResponses, getStatusData, getStatusResponses, getVersionData, getVersionResponses, getXfelEventCodeData, getXfelEventCodeErrors, getXfelEventCodeResponses, getXfelPulseIdData, getXfelPulseIdErrors, getXfelPulseIdResponses, postCancelData, postCancelResponses, postConfigImageFormatConversionData, postConfigImageFormatConversionErrors, postConfigImageFormatConversionResponses, postConfigImageFormatRawData, postConfigImageFormatRawErrors, postConfigImageFormatRawResponses, postDeactivateData, postDeactivateErrors, postDeactivateResponses, postImageBufferClearData, postImageBufferClearErrors, postImageBufferClearResponses, postInitializeData, postInitializeErrors, postInitializeResponses, postPedestalData, postPedestalErrors, postPedestalResponses, postStartData, postStartErrors, postStartResponses, postTriggerData, postTriggerResponses, postWaitTillDoneData, postWaitTillDoneErrors, postWaitTillDoneResponses, postWaitUntilRunningData, postWaitUntilRunningErrors, postWaitUntilRunningResponses, putConfigAzimIntData, putConfigAzimIntErrors, putConfigAzimIntResponses, putConfigBraggIntegrationData, putConfigBraggIntegrationErrors, putConfigBraggIntegrationResponses, putConfigDarkMaskData, putConfigDarkMaskErrors, putConfigDarkMaskResponses, putConfigDetectorData, putConfigDetectorErrors, putConfigDetectorResponses, putConfigFileWriterData, putConfigFileWriterErrors, putConfigFileWriterResponses, putConfigImageFormatData, putConfigImageFormatErrors, putConfigImageFormatResponses, putConfigIndexingData, putConfigIndexingErrors, putConfigIndexingResponses, putConfigInstrumentData, putConfigInstrumentErrors, putConfigInstrumentResponses, putConfigInternalGeneratorImageData, putConfigInternalGeneratorImageErrors, putConfigInternalGeneratorImageResponses, putConfigInternalGeneratorImageTiffData, putConfigInternalGeneratorImageTiffErrors, putConfigInternalGeneratorImageTiffResponses, putConfigRoiData, putConfigRoiErrors, putConfigRoiResponses, putConfigRugnuxData, putConfigRugnuxErrors, putConfigRugnuxModelData, putConfigRugnuxModelErrors, putConfigRugnuxModelResponses, putConfigRugnuxResponses, putConfigSelectDetectorData, putConfigSelectDetectorErrors, putConfigSelectDetectorResponses, putConfigSpotFindingData, putConfigSpotFindingErrors, putConfigSpotFindingResponses, putConfigUserMaskData, putConfigUserMaskErrors, putConfigUserMaskResponses, putConfigUserMaskTiffData, putConfigUserMaskTiffErrors, putConfigUserMaskTiffResponses, putConfigZeromqMetadataData, putConfigZeromqMetadataErrors, putConfigZeromqMetadataResponses, putConfigZeromqPreviewData, putConfigZeromqPreviewErrors, putConfigZeromqPreviewResponses } from './types.gen'; export type Options = Options2 & { /** @@ -103,6 +103,11 @@ export const postTrigger = (options?: Opti * Any frame that is currently being processed by CPU will be finished and sent to writer. * Given the command is making sure to gracefully stop data acquisition and detector, it might take some time to switch back after command finished to `Idle` state. * + * With rugnux live mode (`/config/rugnux`) the command also cuts the rugnux analysis, during the collection + * or after its last image alike: the collection ends with what the analysis has established + * (see `cut` in `/rugnux/status`). After the last image the collection itself is complete and is not + * marked as cancelled. + * * If data collection is not running, the command has no effect. * */ @@ -371,6 +376,76 @@ export const putConfigSelectDetector = (op } }); +/** + * Get rugnux live mode settings and model status + * + * Can be done anytime + */ +export const getConfigRugnux = (options?: Options): RequestResult => (options?.client ?? client).get({ + security: [{ scheme: 'bearer', type: 'http' }], + url: '/config/rugnux', + ...options +}); + +/** + * Change rugnux live mode settings + * + * This can only be done when detector is `Idle`, `Error` or `Inactive` states. + * + */ +export const putConfigRugnux = (options?: Options): RequestResult => (options?.client ?? client).put({ + security: [{ scheme: 'bearer', type: 'http' }], + url: '/config/rugnux', + ...options, + headers: { + 'Content-Type': 'application/json', + ...options?.headers + } +}); + +/** + * Remove the model used by rugnux live mode + * + * This can only be done when detector is `Idle`, `Error` or `Inactive` states. + * + */ +export const deleteConfigRugnuxModel = (options?: Options): RequestResult => (options?.client ?? client).delete({ + security: [{ scheme: 'bearer', type: 'http' }], + url: '/config/rugnux/model', + ...options +}); + +/** + * Upload the model used by rugnux live mode + * + * This can only be done when detector is `Idle`, `Error` or `Inactive` states. + * The model (PDB or mmCIF, optionally gzipped; at most 64 MiB) is used for molecular replacement + * and validation of every following rugnux live collection, until it is removed with + * `DELETE /config/rugnux/model` or replaced by another upload. + * + */ +export const putConfigRugnuxModel = (options?: Options): RequestResult => (options?.client ?? client).put({ + bodySerializer: null, + security: [{ scheme: 'bearer', type: 'http' }], + url: '/config/rugnux/model', + ...options, + headers: { + 'Content-Type': 'application/octet-stream', + ...options?.headers + } +}); + +/** + * Get live rugnux processing status of the last collection + * + * Can be done anytime + */ +export const getRugnuxStatus = (options?: Options): RequestResult => (options?.client ?? client).get({ + security: [{ scheme: 'bearer', type: 'http' }], + url: '/rugnux/status', + ...options +}); + /** * Get ZeroMQ preview settings */ @@ -648,6 +723,31 @@ export const getImageBufferStartCbor = (op ...options }); +/** + * Event stream of the collection, for a reader following it + * + * Server-sent events (text/event-stream) for the current collection, from the moment /start has + * accepted it: first its whole history, then every change, until it ends or a new collection + * begins. Only one reader at a time. Events, each with a JSON `data` line: + * - `start` {run_number, run_name, file_prefix, number_of_images, images_per_file, cbor} - first, + * once the start message is known: at once for a JUNGFRAU, when the detector sends its own for + * a DECTRIS. `cbor` is the start message the writer of the master file received, CBOR in base64; + * a reader builds the dataset from it; + * - `file` {file_number, file, first_image, image_count} - a data file closed and renamed into + * place; `file` is relative to the collection's root, as the writer named it; + * - `end` {images, error?} - every writer acknowledged the end: the data files and the master + * file are in place; `images` is the number of images collected. Also sent, with `error`, when + * the measurement ends any other way - before the start message, for one. The stream then closes; + * - `superseded` {run_number} - a new collection began. The stream then closes. + * A comment line (`: keepalive`) every 10 s when nothing happens. + * + */ +export const getLiveEvents = (options?: Options): Promise> => (options?.client ?? client).sse.get({ + security: [{ scheme: 'bearer', type: 'http' }], + url: '/live/events', + ...options +}); + /** * Get image message in CBOR format * diff --git a/frontend/src/client/types.gen.ts b/frontend/src/client/types.gen.ts index 8338b2b5e..8b17d4515 100644 --- a/frontend/src/client/types.gen.ts +++ b/frontend/src/client/types.gen.ts @@ -1873,6 +1873,125 @@ export type jfjoch_settings = { zeromq_preview?: zeromq_preview_settings; zeromq_metadata?: zeromq_metadata_settings; dark_mask?: dark_mask_settings; + rugnux?: rugnux_settings; +}; + +/** + * Rugnux live mode: rotation collections from a DECTRIS detector are processed by rugnux + * inside the broker while they arrive, and the merged result is sent to the writer. + * + */ +export type rugnux_settings = { + /** + * Process DECTRIS rotation collections with rugnux live + */ + enable?: boolean; + /** + * CPU threads left to the receiver and the image pusher while rugnux runs + */ + reserved_cpus?: number; + /** + * Fixed cutoff: this long after the last image the analysis is cut, and the collection ends + * with what it has established (as `POST /cancel` after the last image does). 0 means no cutoff. + * + */ + deadline_s?: number; +}; + +export type rugnux_status = { + /** + * Rugnux live mode is enabled + */ + enable: boolean; + /** + * CPU threads left to the receiver and the image pusher while rugnux runs + */ + reserved_cpus: number; + /** + * Seconds after the last image at which the analysis is cut; 0 means no cutoff + */ + deadline_s?: number; + /** + * A model was uploaded with `PUT /config/rugnux/model` + */ + model_loaded: boolean; + /** + * Size of the uploaded model file + */ + model_size_bytes?: number; +}; + +export type rugnux_live_step = { + title: string; + /** + * Start of the step, since the collection started + */ + started_s: number; + /** + * Set once the next step starts or the run ends + */ + duration_s?: number; + /** + * What the step found (e.g. lattice, space group) + */ + notes: Array; +}; + +export type rugnux_summary_row = { + label: string; + value: string; +}; + +/** + * Live rugnux processing of the last collection; kept until the next collection starts + */ +export type rugnux_live_status = { + state: 'Idle' | 'Running' | 'Done' | 'Failed' | 'Cancelled' | 'Skipped'; + /** + * Answer of the early lattice probe on the first 60 degrees; empty until it answers + */ + probe: string; + /** + * When the probe answered, since the collection started + */ + probe_s?: number; + /** + * Why the run failed or was skipped + */ + message: string; + images_expected: number; + images_received: number; + elapsed_s: number; + /** + * Fraction of the current pass's images + */ + step_progress?: number; + steps: Array; + /** + * When the last image arrived (and the cutoff timer started), since the collection started + */ + last_image_s?: number; + /** + * Empty, or why the analysis was cut: `deadline` (`deadline_s` after the last image) or `cancel` + * (`POST /cancel`). The end message then carried what was established at the cut. + * + */ + cut?: string; + /** + * When the analysis was cut, since the collection started + */ + cut_s?: number; + /** + * From the last image received to all results written + */ + last_image_to_written_s?: number; + /** + * OK, WARNINGS, UNUSABLE or FAILED; empty until the run is over + */ + verdict: string; + verdict_text: string; + summary: Array; + warnings: Array; }; export type zeromq_metadata_settings = { @@ -3060,6 +3179,149 @@ export type putConfigSelectDetectorResponses = { 200: unknown; }; +export type getConfigRugnuxData = { + body?: never; + path?: never; + query?: never; + url: '/config/rugnux'; +}; + +export type getConfigRugnuxErrors = { + /** + * The current dataset is protected and no valid bearer token was presented. + */ + 401: string; +}; + +export type getConfigRugnuxError = getConfigRugnuxErrors[keyof getConfigRugnuxErrors]; + +export type getConfigRugnuxResponses = { + /** + * Everything OK + */ + 200: rugnux_status; +}; + +export type getConfigRugnuxResponse = getConfigRugnuxResponses[keyof getConfigRugnuxResponses]; + +export type putConfigRugnuxData = { + body?: rugnux_settings; + path?: never; + query?: never; + url: '/config/rugnux'; +}; + +export type putConfigRugnuxErrors = { + /** + * Exception error + */ + 400: string; + /** + * The current dataset is protected and no valid bearer token was presented. + */ + 401: string; + /** + * Error within Jungfraujoch code - see output message. + */ + 500: error_message; +}; + +export type putConfigRugnuxError = putConfigRugnuxErrors[keyof putConfigRugnuxErrors]; + +export type putConfigRugnuxResponses = { + /** + * Everything OK + */ + 200: unknown; +}; + +export type deleteConfigRugnuxModelData = { + body?: never; + path?: never; + query?: never; + url: '/config/rugnux/model'; +}; + +export type deleteConfigRugnuxModelErrors = { + /** + * The current dataset is protected and no valid bearer token was presented. + */ + 401: string; + /** + * Error within Jungfraujoch code - see output message. + */ + 500: error_message; +}; + +export type deleteConfigRugnuxModelError = deleteConfigRugnuxModelErrors[keyof deleteConfigRugnuxModelErrors]; + +export type deleteConfigRugnuxModelResponses = { + /** + * All good + */ + 200: unknown; +}; + +export type putConfigRugnuxModelData = { + body?: Blob | File; + path?: never; + query?: never; + url: '/config/rugnux/model'; +}; + +export type putConfigRugnuxModelErrors = { + /** + * Empty body + */ + 400: unknown; + /** + * The current dataset is protected and no valid bearer token was presented. + */ + 401: string; + /** + * Model larger than 64 MiB + */ + 413: unknown; + /** + * Error within Jungfraujoch code - see output message. + */ + 500: error_message; +}; + +export type putConfigRugnuxModelError = putConfigRugnuxModelErrors[keyof putConfigRugnuxModelErrors]; + +export type putConfigRugnuxModelResponses = { + /** + * All good + */ + 200: unknown; +}; + +export type getRugnuxStatusData = { + body?: never; + path?: never; + query?: never; + url: '/rugnux/status'; +}; + +export type getRugnuxStatusErrors = { + /** + * The current dataset is protected and no valid bearer token was presented. + */ + 401: string; +}; + +export type getRugnuxStatusError = getRugnuxStatusErrors[keyof getRugnuxStatusErrors]; + +export type getRugnuxStatusResponses = { + /** + * Everything OK + */ + 200: rugnux_live_status; +}; + +export type getRugnuxStatusResponse = getRugnuxStatusResponses[keyof getRugnuxStatusResponses]; + export type getConfigZeromqPreviewData = { body?: never; path?: never; @@ -3738,6 +4000,39 @@ export type getImageBufferStartCborResponses = { export type getImageBufferStartCborResponse = getImageBufferStartCborResponses[keyof getImageBufferStartCborResponses]; +export type getLiveEventsData = { + body?: never; + path?: never; + query?: never; + url: '/live/events'; +}; + +export type getLiveEventsErrors = { + /** + * The current dataset is protected and no valid bearer token was presented. + */ + 401: string; + /** + * No collection has started + */ + 404: unknown; + /** + * Another reader is following the collection, or the image pusher does not report closed data files + */ + 409: unknown; +}; + +export type getLiveEventsError = getLiveEventsErrors[keyof getLiveEventsErrors]; + +export type getLiveEventsResponses = { + /** + * Event stream + */ + 200: string; +}; + +export type getLiveEventsResponse = getLiveEventsResponses[keyof getLiveEventsResponses]; + export type getImageBufferImageCborData = { body?: never; path?: never; diff --git a/frontend/src/client/zod.gen.ts b/frontend/src/client/zod.gen.ts index 2b962afbf..0b49a5242 100644 --- a/frontend/src/client/zod.gen.ts +++ b/frontend/src/client/zod.gen.ts @@ -792,6 +792,67 @@ export const zBraggIntegrationSettings = z.object({ max_hkl: z.int().gte(1).lte(511).optional().default(100) }); +/** + * Rugnux live mode: rotation collections from a DECTRIS detector are processed by rugnux + * inside the broker while they arrive, and the merged result is sent to the writer. + * + */ +export const zRugnuxSettings = z.object({ + enable: z.boolean().optional().default(false), + reserved_cpus: z.coerce.bigint().gte(BigInt(0)).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional().default(BigInt(4)), + deadline_s: z.number().gte(0).optional().default(0) +}); + +export const zRugnuxStatus = z.object({ + enable: z.boolean(), + reserved_cpus: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + deadline_s: z.number().optional(), + model_loaded: z.boolean(), + model_size_bytes: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional() +}); + +export const zRugnuxLiveStep = z.object({ + title: z.string(), + started_s: z.number(), + duration_s: z.number().optional(), + notes: z.array(z.string()) +}); + +export const zRugnuxSummaryRow = z.object({ + label: z.string(), + value: z.string() +}); + +/** + * Live rugnux processing of the last collection; kept until the next collection starts + */ +export const zRugnuxLiveStatus = z.object({ + state: z.enum([ + 'Idle', + 'Running', + 'Done', + 'Failed', + 'Cancelled', + 'Skipped' + ]), + probe: z.string(), + probe_s: z.number().optional(), + message: z.string(), + images_expected: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + images_received: z.coerce.bigint().min(BigInt('-9223372036854775808'), { error: 'Invalid value: Expected int64 to be >= -9223372036854775808' }).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }), + elapsed_s: z.number(), + step_progress: z.number().gte(0).lte(1).optional(), + steps: z.array(zRugnuxLiveStep), + last_image_s: z.number().optional(), + cut: z.string().optional(), + cut_s: z.number().optional(), + last_image_to_written_s: z.number().optional(), + verdict: z.string(), + verdict_text: z.string(), + summary: z.array(zRugnuxSummaryRow), + warnings: z.array(z.string()) +}); + export const zZeromqMetadataSettings = z.object({ enabled: z.boolean().default(true), period_ms: z.coerce.bigint().gte(BigInt(1)).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).default(BigInt(1000)), @@ -857,7 +918,8 @@ export const zJfjochSettings = z.object({ image_pusher: zImagePusherType, zeromq_preview: zZeromqPreviewSettings.optional(), zeromq_metadata: zZeromqMetadataSettings.optional(), - dark_mask: zDarkMaskSettings.optional() + dark_mask: zDarkMaskSettings.optional(), + rugnux: zRugnuxSettings.optional() }); export const zDatasetSettingsWritable = z.object({ @@ -1186,6 +1248,20 @@ export const zGetConfigSelectDetectorResponse = zDetectorList; export const zPutConfigSelectDetectorBody = zDetectorSelection; +/** + * Everything OK + */ +export const zGetConfigRugnuxResponse = zRugnuxStatus; + +export const zPutConfigRugnuxBody = zRugnuxSettings; + +export const zPutConfigRugnuxModelBody = z.string(); + +/** + * Everything OK + */ +export const zGetRugnuxStatusResponse = zRugnuxLiveStatus; + /** * Everything OK */ @@ -1410,6 +1486,11 @@ export const zGetResultScanResponse = zScanResult; */ export const zGetImageBufferStartCborResponse = z.string(); +/** + * Event stream + */ +export const zGetLiveEventsResponse = z.string(); + export const zGetImageBufferImageCborQuery = z.object({ id: z.coerce.bigint().gte(BigInt(-2)).max(BigInt('9223372036854775807'), { error: 'Invalid value: Expected int64 to be <= 9223372036854775807' }).optional().default(BigInt(-1)) }); diff --git a/frontend/src/components/RugnuxPage.tsx b/frontend/src/components/RugnuxPage.tsx new file mode 100644 index 000000000..6dc22e4ac --- /dev/null +++ b/frontend/src/components/RugnuxPage.tsx @@ -0,0 +1,166 @@ +import {Alert, Box, Chip, LinearProgress, Paper, Stack, Typography} from "@mui/material"; +import {indigo, lime, deepOrange, grey} from "@mui/material/colors"; +import {useQuery} from "@tanstack/react-query"; +import {getConfigRugnuxOptions, getRugnuxStatusOptions} from "../client/@tanstack/react-query.gen"; +import {rugnux_live_status} from "../client"; +import {useTokenRequired} from "../auth"; +import EmptyState from "./EmptyState"; +import RugnuxTimeline from "./RugnuxTimeline"; +import RugnuxSettings from "./RugnuxSettings"; +import {CutAlert, lastImageTime, ProbeAlert, StepTable, VerdictAlert} from "./RugnuxParts"; +import BoltIcon from "@mui/icons-material/Bolt"; + +const STATE_COLOUR: Record = { + Running: {bg: indigo[500], fg: "#fff"}, + Done: {bg: lime[600], fg: "rgba(0,0,0,.87)"}, + Failed: {bg: deepOrange[700], fg: "#fff"}, + Cancelled: {bg: grey[500], fg: "#fff"}, + Skipped: {bg: grey[400], fg: "rgba(0,0,0,.87)"}, +}; + +// The summary rows rugnux writes; the ones a crystallographer looks at first get a stronger tile. +const KEY_ROW = /cell|space group|resolution|cc1\/2|r-?free|model/i; + +function Section({title, children}: { title: string, children: React.ReactNode }) { + return ( + + + {title} + + {children} + + ); +} + +function Header({s}: { s: rugnux_live_status }) { + const colour = STATE_COLOUR[s.state] ?? STATE_COLOUR.Skipped; + const latency = s.last_image_to_written_s; + const lastImage = lastImageTime(s); + return ( + + + + Rugnux live + + + + {s.images_received} / {s.images_expected} images + {lastImage !== undefined && ` · collected in ${lastImage.toFixed(1)} s`} + {` · ${s.elapsed_s.toFixed(1)} s since the first image`} + + {s.message && {s.message}} + + + + {latency !== undefined ? "Last image → all results written" : "Processing for"} + + + {(latency ?? s.elapsed_s).toFixed(1)} s + + + + ); +} + +function CurrentStep({s}: { s: rugnux_live_status }) { + const current = s.state === 'Running' && s.steps.length > 0 ? s.steps[s.steps.length - 1] : undefined; + if (!current) + return null; + return ( + + + {current.title} + {s.step_progress !== undefined && + {(s.step_progress * 100).toFixed(0)} %} + + + + ); +} + +function SummaryTiles({s}: { s: rugnux_live_status }) { + if (s.summary.length === 0) + return null; + return ( + + {s.summary.map((row, i) => { + const key = KEY_ROW.test(row.label) || KEY_ROW.test(row.value); + const short = row.value.length <= 24; + return ( + + + {row.label} + + + {row.value} + + + ); + })} + + ); +} + +function RugnuxPage({measuring}: { measuring: boolean }) { + const {data: s, isError} = useQuery({ + ...getRugnuxStatusOptions(), + refetchInterval: 1000, + }); + const {data: settings} = useQuery({...getConfigRugnuxOptions(), refetchInterval: 2000}); + const tokenRequired = useTokenRequired(); + + let live; + if (isError && tokenRequired) + live = } + text="Dataset token required (key button in the top bar)"/>; + else if (isError || s === undefined || s.state === 'Idle') + live = } + text="No rugnux run yet - start a rotation collection with live processing enabled"/>; + else + live = ( + +
+ + +
+ +
+ +
+ + +
+
+ {s.verdict + ? + : + {s.state === 'Running' ? "Results appear when the run is over." : "No result."} + } + + 0 ? 2 : 0}}> + {s.warnings.map((w, i) => {w})} + +
+
+ + ); + + return ( + + {live} + + + ); +} + +export default RugnuxPage; diff --git a/frontend/src/components/RugnuxParts.tsx b/frontend/src/components/RugnuxParts.tsx new file mode 100644 index 000000000..45d37a6a7 --- /dev/null +++ b/frontend/src/components/RugnuxParts.tsx @@ -0,0 +1,88 @@ +import {Alert, AlertTitle, Box, Paper, Table, TableBody, TableCell, TableContainer, TableRow, Typography} from "@mui/material"; +import {rugnux_live_status, rugnux_live_step} from "../client"; + +// Pieces of the rugnux live status shared by the dashboard card and the Rugnux page. + +export const verdictSeverity = (verdict: string) => { + switch (verdict) { + case "OK": + return "success"; + case "WARNINGS": + return "warning"; + default: + return "error"; + } +}; + +// When the last image arrived, in seconds since the collection started. Older brokers do not report +// it; there it follows from the latency (every result written `latency` after the last image). +export const lastImageTime = (s: rugnux_live_status) => + s.last_image_s ?? (s.last_image_to_written_s !== undefined ? s.elapsed_s - s.last_image_to_written_s : undefined); + +export function CutAlert({s}: { s: rugnux_live_status }) { + if (!s.cut) + return null; + return ( + + Analysis cut ({s.cut}){s.cut_s !== undefined && ` at ${s.cut_s.toFixed(1)} s`} - results as established + + ); +} + +export function ProbeAlert({s, large}: { s: rugnux_live_status, large?: boolean }) { + if (!s.probe) + return null; + const noLattice = s.probe.startsWith("no lattice"); + return ( + + {large && + Lattice probe{s.probe_s !== undefined && ` · ${s.probe_s.toFixed(1)} s after the first image`} + } + {s.probe}{!large && s.probe_s !== undefined && ` (at ${s.probe_s.toFixed(1)} s)`} + + ); +} + +export function VerdictAlert({s}: { s: rugnux_live_status }) { + if (!s.verdict) + return null; + return ( + + {s.verdict} + {s.verdict_text} + + ); +} + +const stepDuration = (step: rugnux_live_step) => + step.duration_s !== undefined ? step.duration_s.toFixed(1) + " s" : "running"; + +export function StepTable({steps}: { steps: rugnux_live_step[] }) { + if (steps.length === 0) + return null; + return ( + + + + {steps.map((step, i) => ( + + + {step.started_s.toFixed(1)} s + + + {step.title} + {step.notes.map((note, j) => + {note})} + + + {stepDuration(step)} + + + ))} + +
+
+ ); +} diff --git a/frontend/src/components/RugnuxSettings.tsx b/frontend/src/components/RugnuxSettings.tsx new file mode 100644 index 000000000..8fd76bbca --- /dev/null +++ b/frontend/src/components/RugnuxSettings.tsx @@ -0,0 +1,94 @@ +import {ChangeEvent, useEffect, useState} from 'react'; + +import {Button, FormControlLabel, Stack, Switch, Typography} from "@mui/material"; +import UploadFileIcon from "@mui/icons-material/UploadFile"; +import DeleteIcon from "@mui/icons-material/Delete"; +import {useQuery, useQueryClient} from "@tanstack/react-query"; +import { + deleteConfigRugnuxModelMutation, getConfigRugnuxOptions, getConfigRugnuxQueryKey, + putConfigRugnuxModelMutation, putConfigRugnuxMutation +} from "../client/@tanstack/react-query.gen"; +import NumberTextField from "./NumberTextField"; +import SettingsPanel, {UploadSnackbarView} from "./SettingsPanel"; +import {useUpload} from "./useUpload"; + +const sizeText = (bytes?: number) => + bytes === undefined ? "" : bytes >= 1024 * 1024 ? `${(bytes / 1024 / 1024).toFixed(1)} MiB` : `${(bytes / 1024).toFixed(0)} KiB`; + +// Rugnux live mode (enable, reserved CPUs) and the model used for MR, as two panels side by side. +function RugnuxSettings({measuring}: { measuring: boolean }) { + const queryClient = useQueryClient(); + const {data: s} = useQuery({...getConfigRugnuxOptions(), refetchInterval: 2000}); + const refresh = {onSuccess: () => queryClient.invalidateQueries({queryKey: getConfigRugnuxQueryKey()})}; + + const settings = useUpload({...putConfigRugnuxMutation(), ...refresh}); + const upload = useUpload({...putConfigRugnuxModelMutation(), ...refresh}); + const remove = useUpload({...deleteConfigRugnuxModelMutation(), ...refresh}); + + const [enable, setEnable] = useState(false); + const [cpus, setCpus] = useState(4); + const [cpusError, setCpusError] = useState(false); + const [deadline, setDeadline] = useState(0); + const [deadlineError, setDeadlineError] = useState(false); + const [counter, setCounter] = useState(0); + const [file, setFile] = useState(); + + useEffect(() => { + if (s !== undefined) { + setEnable(s.enable); + setCpus(s.reserved_cpus); + setDeadline(s.deadline_s ?? 0); + setCounter(c => c + 1); + } + }, [s?.enable, s?.reserved_cpus, s?.deadline_s]); + + const dirty = s !== undefined && (enable !== s.enable || cpus !== s.reserved_cpus || deadline !== (s.deadline_s ?? 0)); + + return ( + + settings.submit({enable, reserved_cpus: cpus, deadline_s: deadline})} + uploadDisabled={measuring || cpusError || deadlineError || settings.pending} + snackbar={settings.snackbar}> + setEnable(e.target.checked)}/>}/> + { setCpus(v); setCpusError(err); }}/> + { setDeadline(v); setDeadlineError(err); }}/> + + + + + {s?.model_loaded ? `Model loaded · ${sizeText(s.model_size_bytes)}` : "No model loaded"} + + + PDB or mmCIF, optionally gzipped, up to 64 MiB. Kept until removed. + + + + + + + + + + + ); +} + +export default RugnuxSettings; diff --git a/frontend/src/components/RugnuxStatus.tsx b/frontend/src/components/RugnuxStatus.tsx new file mode 100644 index 000000000..e54a3f4ab --- /dev/null +++ b/frontend/src/components/RugnuxStatus.tsx @@ -0,0 +1,62 @@ +import {memo} from 'react'; + +import {Alert, Box, LinearProgress, Typography} from "@mui/material"; +import {useQuery} from "@tanstack/react-query"; +import {getRugnuxStatusOptions} from "../client/@tanstack/react-query.gen"; +import {useTokenRequired} from "../auth"; +import SettingsPanel from "./SettingsPanel"; +import {CutAlert, ProbeAlert, StepTable, VerdictAlert} from "./RugnuxParts"; + +// Live rugnux processing of the last collection, as a dashboard card: the step it is on, the steps +// behind it with what they found, and once it is over the verdict. Nothing while rugnux has not run. +function RugnuxStatus() { + const {data: s, isError} = useQuery({ + ...getRugnuxStatusOptions(), + refetchInterval: 1000, + }); + const tokenRequired = useTokenRequired(); + + if (isError && tokenRequired) + return ( + + Dataset token required (key button in the top bar) + + ); + if (isError || s === undefined || s.state === 'Idle') + return null; + + const current = s.state === 'Running' && s.steps.length > 0 ? s.steps[s.steps.length - 1] : undefined; + + return ( + + + {s.state} · {s.images_received} / {s.images_expected} images · {s.elapsed_s.toFixed(0)} s + + {s.message && {s.message}} + + + + {current && ( + + {current.title} + + + )} + + {s.last_image_to_written_s !== undefined && ( + + Last image → all written: {s.last_image_to_written_s.toFixed(1)} s + + )} + + + + {s.warnings.map((w, i) => ( + {w} + ))} + + ); +} + +export default memo(RugnuxStatus); diff --git a/frontend/src/components/RugnuxTimeline.tsx b/frontend/src/components/RugnuxTimeline.tsx new file mode 100644 index 000000000..2eccfc1a1 --- /dev/null +++ b/frontend/src/components/RugnuxTimeline.tsx @@ -0,0 +1,174 @@ +import {Box, Tooltip, Typography} from "@mui/material"; +import {keyframes} from "@mui/system"; +import {indigo, lime, lightBlue, orange, grey, deepOrange} from "@mui/material/colors"; +import {rugnux_live_status} from "../client"; +import {lastImageTime} from "./RugnuxParts"; + +// The overlap of collection and processing on one time axis (seconds since the first image): the +// detector lane fills while images arrive, the rugnux lane shows its steps where they ran, and the +// gap between "last image" and "all written" is the headline latency. + +const stripes = keyframes` + from { background-position: 0 0; } + to { background-position: 40px 0; } +`; + +const runningSx = { + backgroundImage: "linear-gradient(135deg, rgba(255,255,255,.28) 25%, transparent 25%, transparent 50%, " + + "rgba(255,255,255,.28) 50%, rgba(255,255,255,.28) 75%, transparent 75%, transparent)", + backgroundSize: "40px 40px", + animation: `${stripes} 1s linear infinite`, +}; + +const STEP_COLOURS = [indigo[500], indigo[300], indigo[700], lightBlue[700], indigo[400], lightBlue[900]]; + +const LABEL_WIDTH = 120; +const LANE_HEIGHT = 64; +const AXIS_HEIGHT = 28; + +function niceStep(span: number) { + for (const s of [1, 2, 5, 10, 20, 30, 60, 120]) + if (span / s <= 12) + return s; + return 300; +} + +function Marker({x, colour, label, top, dashed}: { x: number, colour: string, label: string, top: number, dashed?: boolean }) { + return ( + + + + {label} + + + ); +} + +// deadline_s: the configured cutoff after the last image, 0 = none +function RugnuxTimeline({s, deadline_s}: { s: rugnux_live_status, deadline_s: number }) { + const lastImage = lastImageTime(s); + const collecting = lastImage === undefined && s.state === 'Running'; + const collectionEnd = lastImage ?? s.elapsed_s; + const rate = collectionEnd > 0 ? s.images_received / collectionEnd : 0; + const expectedEnd = rate > 0 ? s.images_expected / rate : 0; + + const deadline = lastImage !== undefined && deadline_s > 0 ? lastImage + deadline_s : undefined; + const span = Math.max(s.elapsed_s, expectedEnd, deadline ?? 0, 10) * 1.06; + const pct = (t: number) => 100 * Math.min(Math.max(t, 0), span) / span; + const tick = niceStep(span); + const ticks = Array.from({length: Math.floor(span / tick) + 1}, (_, i) => i * tick); + + const done = s.state !== 'Running'; + const latency = s.last_image_to_written_s; + + return ( + + + {["Detector", "Rugnux"].map((l, i) => ( + + {l} + + ))} + + + + {/* grid lines */} + {ticks.map(t => ( + + ))} + + {/* detector lane */} + + + + {s.images_received} / {s.images_expected} images{rate > 0 && ` · ${rate.toFixed(0)} Hz`} + + + {collecting && expectedEnd > collectionEnd && ( + + )} + + + {/* rugnux lane */} + + {s.steps.map((step, i) => { + const open = step.duration_s === undefined; + const end = open ? s.elapsed_s : step.started_s + step.duration_s!; + const width = Math.max(pct(end) - pct(step.started_s), 0.4); + return ( + + {step.title} · {open ? "running" : `${step.duration_s!.toFixed(1)} s`} + {step.notes.map((n, j) =>
{n}
)} +
}> + + + {step.title} + + + + ); + })} +
+ + {/* axis */} + + {ticks.map(t => ( + + {t} s + + ))} + + + {/* markers */} + {s.probe_s !== undefined && ( + + )} + {lastImage !== undefined && ( + + )} + {deadline !== undefined && s.cut !== 'deadline' && ( + + )} + {s.cut && s.cut_s !== undefined && ( + + )} + {!done && } + + {/* latency bracket */} + {latency !== undefined && lastImage !== undefined && ( + + + +{latency.toFixed(1)} s → all written + + + )} +
+
+ ); +} + +export default RugnuxTimeline; diff --git a/reader/CMakeLists.txt b/reader/CMakeLists.txt index de234d23f..0d6350514 100644 --- a/reader/CMakeLists.txt +++ b/reader/CMakeLists.txt @@ -19,6 +19,8 @@ ADD_LIBRARY(JFJochReader STATIC HDF5ImageLocator.cpp JFJochStartMessageReader.cpp JFJochStartMessageReader.h + JFJochImageBufferReader.cpp + JFJochImageBufferReader.h HDF5ImageLocator.h HDF5ImageSource.cpp HDF5ImageSource.h diff --git a/reader/JFJochImageBufferReader.cpp b/reader/JFJochImageBufferReader.cpp new file mode 100644 index 000000000..a7ca4e2cc --- /dev/null +++ b/reader/JFJochImageBufferReader.cpp @@ -0,0 +1,69 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "JFJochImageBufferReader.h" + +#include +#include + +#include "JFJochStartMessageReader.h" +#include "../common/JFJochException.h" +#include "../frame_serialize/CBORStream2Deserializer.h" + +JFJochImageBufferReader::JFJochImageBufferReader(ImageBuffer &buffer) : buffer_(buffer) {} + +void JFJochImageBufferReader::Open(const StartMessage &start) { + number_of_images_ = start.number_of_images; + ended_ = false; + SetStartMessage(DatasetFromStartMessage(start, default_experiment)); +} + +void JFJochImageBufferReader::Ended() { + ended_ = true; +} + +uint64_t JFJochImageBufferReader::GetNumberOfImages() const { + return number_of_images_; +} + +void JFJochImageBufferReader::Close() { + SetStartMessage({}); +} + +bool JFJochImageBufferReader::WaitForMessage(int64_t image_number, std::vector &cbor) { + if (image_number < 0 || static_cast(image_number) >= number_of_images_) + throw JFJochException(JFJochExceptionCategory::ArrayOutOfBounds, "Image out of bounds"); + // The buffer has no notification of its own; at 100 Hz a millisecond's poll costs nothing. + while (!buffer_.GetImage(cbor, image_number)) { + if (ended_) + return buffer_.GetImage(cbor, image_number); // one that came in just before the end + std::this_thread::sleep_for(std::chrono::milliseconds(1)); + } + return true; +} + +bool JFJochImageBufferReader::ReadRawImage(int64_t image_number, JFJochReaderRawImage &ret) { + if (!WaitForMessage(image_number, ret.read_buffer)) + return false; + const auto msg = CBORStream2Deserialize(ret.read_buffer); + if (msg->msg_type != CBORImageType::IMAGE || !msg->data_message) + return false; + // Copied out of the message: read_buffer is scratch a caller may hand to the next read. + const CompressedImage &image = msg->data_message->image; + ret.image_buffer.resize(image.GetCompressedSize()); + memcpy(ret.image_buffer.data(), image.GetCompressed(), image.GetCompressedSize()); + ret.image = CompressedImage(ret.image_buffer.data(), ret.image_buffer.size(), image.GetWidth(), + image.GetHeight(), image.GetMode(), image.GetCompressionAlgorithm()); + return true; +} + +bool JFJochImageBufferReader::LoadImage_i(std::shared_ptr &dataset, DataMessage &message, + std::vector &buffer, int64_t image_number, bool) { + if (!dataset || !WaitForMessage(image_number, buffer)) + return false; + const auto msg = CBORStream2Deserialize(buffer); + if (msg->msg_type != CBORImageType::IMAGE || !msg->data_message) + return false; + message = *msg->data_message; + return true; +} diff --git a/reader/JFJochImageBufferReader.h b/reader/JFJochImageBufferReader.h new file mode 100644 index 000000000..5a7c5203d --- /dev/null +++ b/reader/JFJochImageBufferReader.h @@ -0,0 +1,40 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include +#include + +#include "JFJochReader.h" +#include "../common/ImageBuffer.h" + +// Reads a collection inside the broker while it arrives: the dataset comes from its start message, +// the images from the broker's image buffer, where the receiver puts each one as it forwards it. A +// read of an image not there yet waits for it; after Ended it returns false for an image that never +// came. The buffer must hold the whole collection (slots >= images) - a slot taken again for a later +// image would hand out that image instead. +class JFJochImageBufferReader : public JFJochReader { +public: + explicit JFJochImageBufferReader(ImageBuffer &buffer); + + void Open(const StartMessage &start); + // No image comes after this: the collection is over, or abandoned. + void Ended(); + + [[nodiscard]] uint64_t GetNumberOfImages() const override; + void Close() override; + bool ReadRawImage(int64_t image_number, JFJochReaderRawImage &image) override; + std::vector ReadSpots(int64_t image) const override { return {}; } + +private: + bool LoadImage_i(std::shared_ptr &dataset, DataMessage &message, + std::vector &buffer, int64_t image_number, bool update_dataset) override; + // The image's CBOR message, as the receiver put it in the buffer; false when it never came. + bool WaitForMessage(int64_t image_number, std::vector &cbor); + + ImageBuffer &buffer_; + uint64_t number_of_images_ = 0; + std::atomic ended_ = false; +}; diff --git a/reader/JFJochStartMessageReader.cpp b/reader/JFJochStartMessageReader.cpp index eb8f768f4..f0c5fc14a 100644 --- a/reader/JFJochStartMessageReader.cpp +++ b/reader/JFJochStartMessageReader.cpp @@ -15,78 +15,77 @@ namespace { const std::string prefix = std::filesystem::path(start.file_prefix).filename().string(); return fmt::format("{:s}_data_{:06d}.h5", prefix, file_number + 1); } +} - // The dataset as the start message describes it - the same quantities an HDF5 master states, taken - // from the message the writer wrote it from. - std::shared_ptr Dataset(const StartMessage &start, const DiffractionExperiment &defaults) { - auto dataset = std::make_shared(); - dataset->arm_date = start.arm_date; - dataset->jfjoch_release = start.jfjoch_release; - dataset->error_value = start.error_value; - dataset->file_detect_ice_rings = start.detect_ice_rings; +std::shared_ptr DatasetFromStartMessage(const StartMessage &start, + const DiffractionExperiment &defaults) { + auto dataset = std::make_shared(); + dataset->arm_date = start.arm_date; + dataset->jfjoch_release = start.jfjoch_release; + dataset->error_value = start.error_value; + dataset->file_detect_ice_rings = start.detect_ice_rings; - auto &x = dataset->experiment; - x = defaults; - // The reader hands every image out as signed 32-bit, as JFJochHDF5Reader does. - x.BitDepthImage(32); - x.PixelSigned(true); - x.FilePrefix(std::filesystem::path(start.file_prefix).filename().string()); - x.BeamX_pxl(start.beam_center_x); - x.BeamY_pxl(start.beam_center_y); - x.DetectorDistance_mm(start.detector_distance * 1000.0f); - x.PoniRot1_rad(start.poni_rot1.value_or(0.0f)); - x.PoniRot2_rad(start.poni_rot2.value_or(0.0f)); - x.PoniRot3_rad(start.poni_rot3.value_or(0.0f)); - x.IncidentEnergy_keV(WVL_1A_IN_KEV / start.incident_wavelength); - if (start.incident_wavelength_spread) - x.BandwidthFWHM(start.incident_wavelength_spread.value() / start.incident_wavelength); - x.DetectIceRings(start.detect_ice_rings.value_or(false)); + auto &x = dataset->experiment; + x = defaults; + // The reader hands every image out as signed 32-bit, as JFJochHDF5Reader does. + x.BitDepthImage(32); + x.PixelSigned(true); + x.FilePrefix(std::filesystem::path(start.file_prefix).filename().string()); + x.BeamX_pxl(start.beam_center_x); + x.BeamY_pxl(start.beam_center_y); + x.DetectorDistance_mm(start.detector_distance * 1000.0f); + x.PoniRot1_rad(start.poni_rot1.value_or(0.0f)); + x.PoniRot2_rad(start.poni_rot2.value_or(0.0f)); + x.PoniRot3_rad(start.poni_rot3.value_or(0.0f)); + x.IncidentEnergy_keV(WVL_1A_IN_KEV / start.incident_wavelength); + if (start.incident_wavelength_spread) + x.BandwidthFWHM(start.incident_wavelength_spread.value() / start.incident_wavelength); + x.DetectIceRings(start.detect_ice_rings.value_or(false)); - DetectorSetup detector = DetDECTRIS(start.image_size_x, start.image_size_y, start.detector_description, {}); - detector.PixelSize_um(start.pixel_size_x * 1e6f); - detector.MirrorY(start.mirror_y); - detector.ImageOrientation(DetectorOrientation(start.detector_orientation_mirror_y, - start.detector_orientation_quarter_turns)); - detector.SensorThickness_um(start.sensor_thickness * 1e6f); - detector.SensorMaterial(start.sensor_material); - detector.SaturationLimit(SaturationLimitFromValue(start.saturation_value)); - detector.BitDepthImage(32); - detector.MinFrameTime(std::chrono::microseconds(0)); - detector.MinCountTime(std::chrono::microseconds(0)); - detector.ReadOutTime(std::chrono::nanoseconds(0)); - x.Detector(detector); + DetectorSetup detector = DetDECTRIS(start.image_size_x, start.image_size_y, start.detector_description, {}); + detector.PixelSize_um(start.pixel_size_x * 1e6f); + detector.MirrorY(start.mirror_y); + detector.ImageOrientation(DetectorOrientation(start.detector_orientation_mirror_y, + start.detector_orientation_quarter_turns)); + detector.SensorThickness_um(start.sensor_thickness * 1e6f); + detector.SensorMaterial(start.sensor_material); + detector.SaturationLimit(SaturationLimitFromValue(start.saturation_value)); + detector.BitDepthImage(32); + detector.MinFrameTime(std::chrono::microseconds(0)); + detector.MinCountTime(std::chrono::microseconds(0)); + detector.ReadOutTime(std::chrono::nanoseconds(0)); + x.Detector(detector); - x.FrameTime(std::chrono::duration_cast(std::chrono::duration(start.frame_time)), - std::chrono::duration_cast(std::chrono::duration(start.count_time))); + x.FrameTime(std::chrono::duration_cast(std::chrono::duration(start.frame_time)), + std::chrono::duration_cast(std::chrono::duration(start.count_time))); - x.Goniometer(start.goniometer); - x.GridScan(start.grid_scan); - x.Smargon(start.smargon_position); - x.NumTriggers(1); - x.ImagesPerTrigger(static_cast(start.number_of_images)); + x.Goniometer(start.goniometer); + x.GridScan(start.grid_scan); + x.Smargon(start.smargon_position); + x.NumTriggers(1); + x.ImagesPerTrigger(static_cast(start.number_of_images)); - InstrumentMetadata instrument; - instrument.SourceName(start.source_name); - instrument.SourceType(start.source_type); - instrument.InstrumentName(start.instrument_name); - x.ImportInstrumentMetadata(instrument); - x.SampleName(start.sample_name); - x.SampleTemperature_K(start.sample_temperature_K); - x.RingCurrent_mA(start.ring_current_mA); - x.TotalFlux(start.total_flux); - x.AttenuatorTransmission(start.attenuator_transmission); - if (start.beam_size_x && start.beam_size_y) { - x.BeamSizeX_um(start.beam_size_x.value() * 1e6f); - x.BeamSizeY_um(start.beam_size_y.value() * 1e6f); - } - - if (!start.pixel_mask.empty()) - dataset->pixel_mask = std::make_shared(start.pixel_mask.begin()->second); - else - dataset->pixel_mask = std::make_shared( - std::vector(start.image_size_x * start.image_size_y)); - return dataset; + InstrumentMetadata instrument; + instrument.SourceName(start.source_name); + instrument.SourceType(start.source_type); + instrument.InstrumentName(start.instrument_name); + x.ImportInstrumentMetadata(instrument); + x.SampleName(start.sample_name); + x.SampleTemperature_K(start.sample_temperature_K); + x.RingCurrent_mA(start.ring_current_mA); + x.TotalFlux(start.total_flux); + x.AttenuatorTransmission(start.attenuator_transmission); + if (start.beam_size_x && start.beam_size_y) { + x.BeamSizeX_um(start.beam_size_x.value() * 1e6f); + x.BeamSizeY_um(start.beam_size_y.value() * 1e6f); } + + if (!start.pixel_mask.empty()) + dataset->pixel_mask = std::make_shared(start.pixel_mask.begin()->second); + else + dataset->pixel_mask = std::make_shared( + std::vector(start.image_size_x * start.image_size_y)); + return dataset; } void JFJochStartMessageReader::Open(const StartMessage &start, const std::string &master_path) { @@ -114,7 +113,7 @@ void JFJochStartMessageReader::Open(const StartMessage &start, const std::string ended_ = false; lost_.clear(); } - SetStartMessage(Dataset(start, default_experiment)); + SetStartMessage(DatasetFromStartMessage(start, default_experiment)); } void JFJochStartMessageReader::FileClosed(uint64_t file_number, uint64_t image_count) { diff --git a/reader/JFJochStartMessageReader.h b/reader/JFJochStartMessageReader.h index 75d943f69..064c6d58b 100644 --- a/reader/JFJochStartMessageReader.h +++ b/reader/JFJochStartMessageReader.h @@ -19,6 +19,11 @@ public: explicit LiveCollectionLost(const std::string &what) : std::runtime_error(what) {} }; +// The dataset as the start message describes it - the same quantities an HDF5 master states, taken +// from the message the writer wrote it from. +std::shared_ptr DatasetFromStartMessage(const StartMessage &start, + const DiffractionExperiment &defaults); + // Reads a collection while it is being written: the dataset comes from its start message, as the // broker sends it, and the images straight from the data files - /entry/data/data in each - once the // broker reports a file closed and renamed into place (FileClosed). A read of an image whose file has diff --git a/receiver/CMakeLists.txt b/receiver/CMakeLists.txt index 228f49597..1cfd1aa69 100644 --- a/receiver/CMakeLists.txt +++ b/receiver/CMakeLists.txt @@ -11,7 +11,9 @@ ADD_LIBRARY(JFJochReceiver STATIC JFJochReceiverCurrentStatus.h JFJochReceiverOutput.h JFJochReceiverLite.h JFJochReceiverLite.cpp + JFJochReceiverRugnux.h JFJochReceiverRugnux.cpp + RugnuxLiveStatus.h RugnuxLiveStatus.cpp JFJochReceiver.cpp JFJochReceiver.h) -TARGET_LINK_LIBRARIES(JFJochReceiver ImagePusher JFJochImagePuller JFJochImageAnalysis JFJochAcquisitionDevice JFJochCommon JFJochHLSSimulation JFJochPreview) +TARGET_LINK_LIBRARIES(JFJochReceiver ImagePusher JFJochImagePuller JFJochImageAnalysis JFJochAcquisitionDevice JFJochCommon JFJochHLSSimulation JFJochPreview JFJochRugnux) diff --git a/receiver/JFJochReceiver.cpp b/receiver/JFJochReceiver.cpp index abb36ea42..42910ecb1 100644 --- a/receiver/JFJochReceiver.cpp +++ b/receiver/JFJochReceiver.cpp @@ -197,6 +197,7 @@ void JFJochReceiver::SendEndMessage() { message.adu_histogram["module" + std::to_string(i)] = adu_histogram_module[i]->GetHistogram(); scan_result.FillEndMessage(message); + AddToEndMessage(message); if (push_images_to_writer) { if (!image_pusher.EndDataCollection(message)) diff --git a/receiver/JFJochReceiver.h b/receiver/JFJochReceiver.h index d65f6235c..93fb213ae 100644 --- a/receiver/JFJochReceiver.h +++ b/receiver/JFJochReceiver.h @@ -96,6 +96,9 @@ protected: void SendStartMessage(); void SendEndMessage(); void SaveStartMessageToImageBuffer(const StartMessage &msg); + // The last word on the end message before it is sent: a receiver whose analysis is not the + // per-image one fills in what it found. + virtual void AddToEndMessage(EndMessage &message) {} virtual void Cancel(const JFJochException &e); public: JFJochReceiver(const DiffractionExperiment& experiment, diff --git a/receiver/JFJochReceiverRugnux.cpp b/receiver/JFJochReceiverRugnux.cpp new file mode 100644 index 000000000..b876253f2 --- /dev/null +++ b/receiver/JFJochReceiverRugnux.cpp @@ -0,0 +1,482 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "JFJochReceiverRugnux.h" + +#include +#include +#include +#include +#include + +#include "spdlog/fmt/fmt.h" + +#include "JFJochReceiverLite.h" +#include "../common/ParallelFor.h" +#include "../frame_serialize/CBORStream2Deserializer.h" +#include "../rugnux/RugnuxLive.h" +#include "../rugnux/ResultReport.h" + +using namespace std::chrono_literals; + +namespace { + int64_t SteadyNowNs() { + return std::chrono::duration_cast( + std::chrono::steady_clock::now().time_since_epoch()).count(); + } + + double SecondsSince(int64_t ns) { + return static_cast(SteadyNowNs() - ns) / 1e9; + } + + // A run reachable for Cut while it exists: registered in `slot` (under `m`, cancelled at once where the + // cut came first) and taken off again before it is destroyed, an exception included. + class Reachable { + std::mutex &m; + Rugnux *&slot; + public: + Reachable(std::mutex &m, Rugnux *&slot, Rugnux &run, const bool &cut, const std::atomic &cancelled) + : m(m), slot(slot) { + std::unique_lock ul(m); + slot = &run; + if (cut || cancelled) + run.Cancel(); + } + ~Reachable() { + std::unique_lock ul(m); + slot = nullptr; + } + }; + + // What rugnux reports as it goes: its per-image results into the receiver's plots and scan + // result, which a later pass over the same image overwrites - so the canonical pass, the last to + // read every image, is what stays - and its steps into the log. + class LiveObserver : public RugnuxObserver { + JFJochReceiverPlots &plots; + ScanResultGenerator &scan_result; + const AzimuthalIntegrationMapping &mapping; + RugnuxLiveStatus &status; + Logger &logger; + public: + LiveObserver(JFJochReceiverPlots &plots, ScanResultGenerator &scan_result, + const AzimuthalIntegrationMapping &mapping, RugnuxLiveStatus &status, Logger &logger) + : plots(plots), scan_result(scan_result), mapping(mapping), status(status), logger(logger) {} + + void OnImageProcessed(const DataMessage &msg) override { + plots.Add(msg, AzimuthalIntegrationProfile(mapping)); + scan_result.Add(msg); + } + void OnProgress(uint64_t done, uint64_t total) override { status.Progress(done, total); } + void OnStep(const std::string &title) override { + status.Step(title); + logger.Info("rugnux: {}", title); + } + void OnNote(const std::string &text) override { + status.Note(text); + logger.Info("rugnux: {}", text); + } + }; +} + +JFJochReceiverRugnux::JFJochReceiverRugnux(const DiffractionExperiment &in_experiment, + const PixelMask &in_pixel_mask, + ImagePuller &in_image_puller, + ImagePusher &in_image_pusher, + Logger &in_logger, + int64_t in_forward_nthreads, + int in_rugnux_nthreads, + const std::string &in_model_path, + double in_deadline_s, + RugnuxLiveStatus &in_live_status, + const SpotFindingSettings &in_spot_finding_settings, + JFJochReceiverCurrentStatus &in_current_status, + JFJochReceiverPlots &in_plots, + ImageBuffer &in_image_buffer, + ZMQPreviewSocket *in_zmq_preview_socket, + ZMQMetadataSocket *in_zmq_metadata_socket) + : JFJochReceiver(in_experiment, in_image_buffer, in_image_pusher, in_current_status, in_plots, + in_spot_finding_settings, in_logger, in_pixel_mask, in_zmq_preview_socket, + in_zmq_metadata_socket, nullptr), + image_puller(in_image_puller), + reader(in_image_buffer), + forward_nthreads(JFJochReceiverLite::NumberOfDataAnalysisThreads(in_forward_nthreads, in_experiment)), + rugnux_nthreads(in_rugnux_nthreads), + model_path(in_model_path), + deadline_s(in_deadline_s), + live_status(in_live_status), + measurement_started(1), + forward_started(forward_nthreads) { + logger.Info("Starting {} forward threads; rugnux runs on {} threads while the images arrive", + forward_nthreads, rugnux_nthreads); + for (int i = 0; i < forward_nthreads; i++) + forward_futures.emplace_back(std::async(std::launch::async, &JFJochReceiverRugnux::ForwardThread, this, i)); + measurement = std::async(std::launch::async, &JFJochReceiverRugnux::MeasurementThread, this); + forward_started.wait(); +} + +JFJochReceiverRugnux::~JFJochReceiverRugnux() { + cancelled = true; + reader.Ended(); + { + std::unique_lock ul(rugnux_m); + if (rugnux != nullptr) + rugnux->Cancel(); + if (probe != nullptr) + probe->Cancel(); + } + try { + if (measurement.valid()) + measurement.get(); + } catch (const std::exception &e) { + logger.Error("ReceiverRugnux teardown failed: {}", e.what()); + } +} + +void JFJochReceiverRugnux::MeasurementThread() { + std::future rugnux_done, probe_done; + try { + // Waiting for the start message, as JFJochReceiverLite::MeasurementThread. + std::optional give_up_at; + auto msg = image_puller.PollImage(); + while (!cancelled && (!msg.has_value() || !msg->cbor || !msg->cbor->start_message)) { + if (detector_finished && !give_up_at) + give_up_at = std::chrono::steady_clock::now() + StartMessageGrace; + if (give_up_at && (std::chrono::steady_clock::now() > *give_up_at)) { + logger.Error("Detector finished, but no start message arrived - abandoning measurement"); + cancelled = true; + break; + } + msg = image_puller.PollImage(); + } + if (cancelled) { + current_status.SetProgress({}); + current_status.SetStatus(GetStatus()); + measurement_started.count_down(); + return; + } + + Configure(msg->cbor->start_message.value()); + image_buffer.StartMeasurement(experiment); + start_time = std::chrono::system_clock::now(); + SendStartMessage(); + + // Rugnux reads the images back from the buffer, so it needs one slot per image: a slot taken + // again would hand it a later image. Without that the collection is only forwarded. + const auto slots = image_buffer.GetStatus().total_slots; + live_status.Start(experiment.GetImageNum()); + if (slots < experiment.GetImageNum()) { + logger.Error("Image buffer holds {} images, the collection has {}: no rugnux analysis for it", + slots, experiment.GetImageNum()); + live_status.Finish(RugnuxLiveState::Skipped, "the image buffer cannot hold the whole collection"); + } else { + // The start message as the writer gets it, so rugnux sees the dataset an HDF5 master states. + std::vector start_cbor; + image_buffer.GetStartMessage(start_cbor); + reader.Open(CBORStream2Deserialize(start_cbor)->start_message.value()); + char dir_template[] = "/tmp/jfjoch_rugnux_XXXXXX"; + if (mkdtemp(dir_template) == nullptr) + throw JFJochException(JFJochExceptionCategory::FileWriteError, "Cannot create rugnux scratch directory"); + scratch_dir = dir_template; + rugnux_done = std::async(std::launch::async, &JFJochReceiverRugnux::RugnuxThread, this); + probe_done = std::async(std::launch::async, &JFJochReceiverRugnux::ProbeThread, this); + } + measurement_started.count_down(); + } catch (const JFJochException &e) { + logger.ErrorException(e); + Cancel(e); + measurement_started.count_down(); + throw; + } + + logger.Info("Receiving started"); + for (auto &f: forward_futures) + f.get(); + reader.Ended(); + images_done = true; + live_status.LastImage(); + const int64_t last_image = last_image_ns.load(); + logger.Info("Receiving finished, {} images", images_collected.load()); + + if (rugnux_done.valid()) { + // The fixed cutoff: the analysis gets deadline_s after the last image, then gives what it has. + if (deadline_s > 0 && rugnux_done.wait_for(std::chrono::duration(deadline_s)) + == std::future_status::timeout) + Cut("deadline"); + rugnux_done.wait(); + logger.Info("rugnux live: done {:.2f} s after the last image", SecondsSince(last_image)); + } + if (probe_done.valid()) + probe_done.wait(); + + current_status.SetProgress(1.0); + current_status.SetStatus(GetStatus()); + + SendEndMessage(); + const double end_sent_s = SecondsSince(last_image); + + if (!image_buffer.CheckIfBufferReturned(SendFinalizeTimeout)) { + logger.Error("Send commands not finalized in {} seconds", SendFinalizeTimeout.count()); + throw JFJochException(JFJochExceptionCategory::ZeroMQ, "Send commands not finalized in " + + std::to_string(SendFinalizeTimeout.count()) + " seconds"); + } + if (push_images_to_writer) + writer_error = image_pusher.Finalize(); + if (last_image > 0 && rugnux_done.valid()) { + const double written_s = SecondsSince(last_image); + live_status.Latency(written_s); + logger.Info("rugnux live: last image -> all written {:.2f} s (end message sent at {:.2f} s)", + written_s, end_sent_s); + } + + if (!scratch_dir.empty()) { + std::error_code ec; + std::filesystem::remove_all(scratch_dir, ec); + } + end_time = std::chrono::system_clock::now(); + current_status.SetProgress({}); + current_status.SetStatus(GetStatus()); +} + +void JFJochReceiverRugnux::RugnuxThread() { + // Below the forward threads: every thread rugnux starts inherits this, so an image arriving finds a + // core however busy rugnux keeps the machine. + // The process-wide ParallelFor pool is not started by this thread, so it is lowered separately. + setpriority(PRIO_PROCESS, static_cast(syscall(SYS_gettid)), 10); + parallel_detail::WorkerPool::Instance().SetNice(10); + try { + const auto dataset = reader.GetDataset(); + const RugnuxLiveSetup setup = MakeRugnuxLiveSetup(*dataset, rugnux_nthreads, scratch_dir + "/p", model_path); + LiveObserver observer(plots, scan_result, *az_int_mapping, live_status, logger); + ProcessResult result; + { + Rugnux process(reader, setup.experiment, *dataset->pixel_mask, setup.config); + Reachable reachable(rugnux_m, rugnux, process, cut, cancelled); + result = process.Run(&observer); + } + // The verdict and summary of the report a `rugnux` run writes, without writing it. + const ReportDocument doc = BuildReportDocument(scratch_dir + "/p", experiment.GetFilePrefix(), + setup.experiment, result); + std::vector warnings; + for (const auto &w: doc.warnings) + if (!w.developer_only) + warnings.push_back(w.text); + live_status.Result(doc.verdict, doc.verdict_text, doc.summary_rows, warnings); + live_status.Finish(result.cancelled ? RugnuxLiveState::Cancelled : RugnuxLiveState::Done); + std::unique_lock ul(rugnux_m); + rugnux_result = std::move(result); + } catch (const std::exception &e) { + logger.Error("rugnux live: {}", e.what()); + live_status.Finish(RugnuxLiveState::Failed, e.what()); + } + if (!parallel_detail::WorkerPool::Instance().SetNice(0)) + logger.Warning("rugnux live: the ParallelFor pool stays at nice 10 - raising it back needs CAP_SYS_NICE"); +} + +void JFJochReceiverRugnux::ProbeThread() { + // Rugnux waits for half the sweep before it decides on a lattice. In the meantime the machine is + // idle, so a small run of its own indexes the first 60 degrees and says at once whether there is + // a crystal - quick feedback for the person at the beamline, above all where there is none. It + // decides nothing for the run, which goes on as it would without it. + constexpr double PROBE_DEG = 60.0; + setpriority(PRIO_PROCESS, static_cast(syscall(SYS_gettid)), 10); + try { + const auto dataset = reader.GetDataset(); + const auto gonio = dataset->experiment.GetGoniometer(); + if (!gonio || gonio->GetIncrement_deg() == 0.0f) + return; + const int64_t frames = std::lround(PROBE_DEG / std::abs(gonio->GetIncrement_deg())); + if (2 * frames > static_cast(reader.GetNumberOfImages())) + return; // a sweep this short is decided on soon enough by the run itself + RugnuxLiveSetup setup = MakeRugnuxLiveSetup(*dataset, rugnux_nthreads, "", ""); + setup.config.end_image = static_cast(frames); + setup.config.rotation_postrefine_geometry = false; + setup.config.run_scaling = false; + ProcessResult r; + { + Rugnux probe_run(reader, setup.experiment, *dataset->pixel_mask, setup.config); + Reachable reachable(rugnux_m, probe, probe_run, cut, cancelled); + r = probe_run.Run(nullptr); + } + if (r.consensus_cell && r.rotation_lattice_type) { + const auto &c = *r.consensus_cell; + live_status.Probe(fmt::format("lattice on the first {:.0f} deg: {}-centred {}, {:.1f} {:.1f} {:.1f} " + "{:.1f} {:.1f} {:.1f}, {:.0f}% of the images indexed", PROBE_DEG, + r.rotation_lattice_type->centering, + gemmi::crystal_system_str(r.rotation_lattice_type->crystal_system), + c.a, c.b, c.c, c.alpha, c.beta, c.gamma, + 100.0 * r.indexing_rate.value_or(0.0f))); + } else + live_status.Probe(fmt::format("no lattice on the first {:.0f} deg", PROBE_DEG)); + } catch (const NoLatticeFound &e) { + live_status.Probe(fmt::format("no lattice on the first {:.0f} deg: {}", PROBE_DEG, e.reason)); + } catch (const std::exception &e) { + logger.Warning("rugnux live: the lattice probe failed: {}", e.what()); + } + logger.Info("rugnux live: lattice probe - {}", live_status.Get().probe); +} + +void JFJochReceiverRugnux::AddToEndMessage(EndMessage &message) { + std::unique_lock ul(rugnux_m); + if (!rugnux_result) + return; + const EndMessage &r = rugnux_result->end_message; + message.indexing_rate = r.indexing_rate; + message.bkg_estimate = r.bkg_estimate; + message.spindle_blind_fraction = r.spindle_blind_fraction; + message.ice_ring_score_mean = r.ice_ring_score_mean; + message.az_int_result = r.az_int_result; + message.rotation_lattice = r.rotation_lattice; + message.rotation_lattice_type = r.rotation_lattice_type; + message.rotation_extra_lattices = r.rotation_extra_lattices; + message.unit_cell = r.unit_cell; + message.space_group_name = r.space_group_name; + message.space_group_number = r.space_group_number; + message.reindex_matrix = r.reindex_matrix; + message.refined_beam_center_x = r.refined_beam_center_x; + message.refined_beam_center_y = r.refined_beam_center_y; + message.refined_poni_rot1 = r.refined_poni_rot1; + message.refined_poni_rot2 = r.refined_poni_rot2; + message.refined_poni_rot3 = r.refined_poni_rot3; + message.refined_rotation_axis = r.refined_rotation_axis; + // TODO: merged data, map coefficients and placed model from scratch_dir (writer branch). Only here, + // with rugnux_result set: every file in scratch_dir is then whole - rugnux writes synchronously and a + // cut never stops a write half-way - while a run that threw may have left one half-written. +} + +void JFJochReceiverRugnux::Configure(const StartMessage &msg) { + // As JFJochReceiverLite::Configure. + if ((experiment.GetXPixelsNum() != msg.image_size_x) + || (experiment.GetYPixelsNum() != msg.image_size_y)) + throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Mismatch in detector size"); + if (fabs(experiment.GetPixelSize_mm() - msg.pixel_size_x * 1e3) > 1e-7) + throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Mismatch in pixel size"); + + experiment.Detector().Description(msg.detector_description); + experiment.Detector().SerialNumber(msg.detector_serial_number); + experiment.Detector().SensorMaterial(msg.sensor_material); + experiment.Detector().SensorThickness_um(msg.sensor_thickness * 1e6); + experiment.Detector().SaturationLimit(SaturationLimitFromValue(msg.saturation_value)); + experiment.Detector().CountRateCorrectionApplied(msg.countrate_correction_enabled); + experiment.Detector().CountRateCorrectionLookupTable(msg.countrate_correction_lookup_table); + experiment.Detector().FlatfieldApplied(msg.flatfield_enabled); + experiment.Detector().VirtualPixelInterpolationApplied(msg.virtual_pixel_interpolation_enabled); + experiment.ApplyPixelMask(false); + experiment.Detector().BitDepthImage(msg.bit_depth_image); + experiment.PixelSigned(msg.pixel_signed); +} + +void JFJochReceiverRugnux::ForwardThread(uint32_t id) { + forward_started.count_down(); + measurement_started.wait(); + + while (!cancelled && !end_message_received) { + try { + auto msg = image_puller.PollImage(std::chrono::milliseconds(5)); + if (!msg.has_value() || !msg->cbor) + continue; + if (msg->cbor->end_message) { + end_message_received = true; + } else if (msg->cbor->calibration) { + if (push_images_to_writer) + image_pusher.SendCalibration(msg->cbor->calibration.value()); + } else if (msg->cbor->data_message) { + last_image_ns = SteadyNowNs(); + live_status.ImageReceived(); + DataMessage data_msg = msg->cbor->data_message.value(); + ++images_collected; + + const auto compressed_size_img = data_msg.image.GetCompressedSize(); + const auto uncompressed_size_img = data_msg.image.GetUncompressedSize(); + compressed_size += compressed_size_img; + uncompressed_size += uncompressed_size_img; + UpdateMaxImageReceived(data_msg.number); + + data_msg.original_number = data_msg.number; + data_msg.user_data = experiment.GetImageAppendix(); + data_msg.run_number = experiment.GetRunNumber(); + data_msg.run_name = experiment.GetRunName(); + data_msg.receiver_buf_available = image_buffer.GetAvailSlots(); + data_msg.receiver_aq_dev_delay = image_puller.GetCurrentFifoUtilization(); + if (compressed_size_img > 0) + data_msg.compression_ratio = static_cast(uncompressed_size_img) + / static_cast(compressed_size_img); + + auto loc = image_buffer.GetImageSlot(); + if (loc == nullptr) + writer_queue_full = true; + else { + auto writer_buffer = (uint8_t *) loc->GetImage(); + CBORStream2Serializer serializer(writer_buffer, experiment.GetImageBufferLocationSize()); + serializer.SerializeImage(data_msg); + loc->SetImageNumber(data_msg.number); + loc->SetImageSize(serializer.GetBufferSize()); + loc->SetIndexed(false); + loc->ReadyToSend(); + + if (zmq_preview_socket != nullptr) + zmq_preview_socket->SendImage(writer_buffer, serializer.GetBufferSize()); + if (zmq_metadata_socket != nullptr) + zmq_metadata_socket->AddDataMessage(data_msg); + if (push_images_to_writer) { + if (image_pusher.SendImage(*loc)) + ++images_sent; + } else + loc->release(); + UpdateMaxImageSent(data_msg.number); + } + } + UpdateMaxDelay(image_puller.GetCurrentFifoUtilization()); + current_status.SetProgress(GetProgress()); + current_status.SetStatus(GetStatus()); + } catch (const JFJochException &e) { + logger.ErrorException(e); + Cancel(e); + } + } +} + +void JFJochReceiverRugnux::Cancel(bool silent) { + detector_finished = true; + // The silent cancel is the detector reading idle at the end of every collection: rugnux goes on. + if (silent) + return; + // /cancel is the one way in for the beamline, which cannot tell the collection from its analysis: it + // ends the collection while the images still arrive, as JFJochReceiverLite does, and in every case + // cuts the analysis, so the end message goes out at once with what rugnux has established. + if (!images_done) + JFJochReceiver::Cancel(silent); + Cut("cancel"); +} + +void JFJochReceiverRugnux::Cut(const std::string &reason) { + std::unique_lock ul(rugnux_m); + if (cut || rugnux_result) + return; + cut = true; + reader.Ended(); // no image is waited for any more + if (rugnux != nullptr) + rugnux->Cancel(); + if (probe != nullptr) + probe->Cancel(); + live_status.Cut(reason); + logger.Info("rugnux live: analysis cut ({}) - the end message carries what is established", reason); +} + +void JFJochReceiverRugnux::StopReceiver() { + if (measurement.valid()) { + measurement.get(); + logger.Info("Receiver stopped"); + } +} + +float JFJochReceiverRugnux::GetEfficiency() const { + if (experiment.GetFrameNum() == 0) + return 0; + return static_cast(images_collected) / static_cast(experiment.GetFrameNum()); +} + +float JFJochReceiverRugnux::GetProgress() const { + if (experiment.GetFrameNum() == 0) + return 0.0; + return static_cast(max_image_number_received) / static_cast(experiment.GetFrameNum()); +} diff --git a/receiver/JFJochReceiverRugnux.h b/receiver/JFJochReceiverRugnux.h new file mode 100644 index 000000000..1e480e4df --- /dev/null +++ b/receiver/JFJochReceiverRugnux.h @@ -0,0 +1,87 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include + +#include "JFJochReceiver.h" +#include "../image_puller/ImagePuller.h" +#include "../reader/JFJochImageBufferReader.h" +#include "../rugnux/Rugnux.h" +#include "RugnuxLiveStatus.h" + +// A DECTRIS rotation collection forwarded to the writer as JFJochReceiverLite does, but analysed by +// rugnux while it arrives instead of image by image: the forward threads put each image into the +// image buffer and send it on, and one rugnux thread reads the collection back from that buffer. The +// end message waits for rugnux, and carries what it found - the lattice, refined geometry, per-image +// results and its merged data, map coefficients and placed model (see AddToEndMessage). +class JFJochReceiverRugnux : public JFJochReceiver { + using JFJochReceiver::Cancel; + + ImagePuller &image_puller; + JFJochImageBufferReader reader; + + std::atomic end_message_received{false}; + std::atomic detector_finished{false}; // see JFJochReceiverLite + constexpr static auto StartMessageGrace = std::chrono::seconds(5); + + const int64_t forward_nthreads; + const int rugnux_nthreads; + const std::string model_path; + const double deadline_s; // after the last image, the analysis is cut (0 = never) + std::string scratch_dir; // rugnux's own output, read back into the end message + RugnuxLiveStatus &live_status; + + std::vector> forward_futures; + std::future measurement; + std::latch measurement_started; + std::latch forward_started; + + std::mutex rugnux_m; + Rugnux *rugnux = nullptr; // while it runs, for Cut + Rugnux *probe = nullptr; // the same for the lattice probe + std::optional rugnux_result; + bool cut = false; + std::atomic images_done{false}; // the forward threads have ended + + // The latency of the demonstration: from the last image in to every result in place. + std::atomic last_image_ns{0}; + + void MeasurementThread(); + void ForwardThread(uint32_t id); + void RugnuxThread(); + void ProbeThread(); + void Configure(const StartMessage &message); + // Stops the analysis where it is: rugnux returns what it has established (see Rugnux::Cancel), and + // the end message goes out with that. Reason: "deadline" or "cancel". + void Cut(const std::string &reason); + void AddToEndMessage(EndMessage &message) override; +public: + JFJochReceiverRugnux(const DiffractionExperiment &experiment, + const PixelMask &pixel_mask, + ImagePuller &image_puller, + ImagePusher &image_pusher, + Logger &logger, + int64_t forward_nthreads, + int rugnux_nthreads, + const std::string &model_path, + double deadline_s, + RugnuxLiveStatus &live_status, + const SpotFindingSettings &spot_finding_settings, + JFJochReceiverCurrentStatus ¤t_status, + JFJochReceiverPlots &plots, + ImageBuffer &image_buffer, + ZMQPreviewSocket *zmq_preview_socket = nullptr, + ZMQMetadataSocket *zmq_metadata_socket = nullptr); + ~JFJochReceiverRugnux() override; + + void StopReceiver() override; + void Cancel(bool silent) override; + + float GetEfficiency() const override; + float GetProgress() const override; + + void SetSpotFindingSettings(const SpotFindingSettings &spot_finding_settings) override {} +}; diff --git a/receiver/JFJochReceiverService.cpp b/receiver/JFJochReceiverService.cpp index ecbab954e..ce0c633c3 100644 --- a/receiver/JFJochReceiverService.cpp +++ b/receiver/JFJochReceiverService.cpp @@ -2,6 +2,9 @@ // SPDX-License-Identifier: GPL-3.0-only #include "JFJochReceiverService.h" +#include "JFJochReceiverRugnux.h" +#include "../common/ThreadAffinity.h" +#include "../rugnux/RugnuxDefaults.h" #include "JFJochReceiverFPGA.h" #include "JFJochReceiverLite.h" #include "../preview/JFJochJPEG.h" @@ -17,6 +20,23 @@ JFJochReceiverService::JFJochReceiverService(AcquisitionDeviceGroup &in_aq_devic spot_finding_settings(DiffractionExperiment::DefaultDataProcessingSettings()) { } +JFJochReceiverService &JFJochReceiverService::RugnuxLive(bool enable, const std::string &model_path, + int reserved_cpus, double deadline_s) { + std::unique_lock ul_state(state_mutex); + if (state != ReceiverState::Idle) + throw JFJochException(JFJochExceptionCategory::WrongDAQState, + "Cannot change rugnux settings during data collection"); + rugnux_enable = enable; + rugnux_model_path = model_path; + rugnux_reserved_cpus = reserved_cpus; + rugnux_deadline_s = deadline_s; + return *this; +} + +RugnuxLiveSnapshot JFJochReceiverService::GetRugnuxStatus() const { + return rugnux_status.Get(); +} + JFJochReceiverService &JFJochReceiverService::NumThreads(int64_t input) { if (input <= 0) throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "Thread number must be above zero"); @@ -103,6 +123,14 @@ void JFJochReceiverService::Start(const DiffractionExperiment &experiment, image_puller = std::make_shared( experiment.GetDetectorSetup().GetDECTRISStream2Addr()); } + if (rugnux_enable && RugnuxRotationData(experiment)) { + receiver = std::make_unique( + experiment, pixel_mask, *image_puller, image_pusher, logger, nthreads_local, + std::max(1, static_cast(AvailableCpus()) - rugnux_reserved_cpus), + rugnux_model_path, rugnux_deadline_s, rugnux_status, spot_finding_settings, receiver_status, plots, image_buffer, + zmq_preview_socket.get(), zmq_metadata_socket.get()); + break; + } receiver = std::make_unique(experiment, pixel_mask, *image_puller, diff --git a/receiver/JFJochReceiverService.h b/receiver/JFJochReceiverService.h index cb9045b1a..57a9985a5 100644 --- a/receiver/JFJochReceiverService.h +++ b/receiver/JFJochReceiverService.h @@ -3,6 +3,8 @@ #pragma once +#include "RugnuxLiveStatus.h" + #include #include @@ -21,6 +23,14 @@ class JFJochReceiverService { std::shared_ptr image_puller; int64_t nthreads = 8; + // Rotation collections from a DECTRIS detector analysed by rugnux while they arrive + // (JFJochReceiverRugnux), instead of image by image. Off unless asked for. + bool rugnux_enable = false; + std::string rugnux_model_path; + int rugnux_reserved_cpus = 4; // left to the forward threads and the pusher + double rugnux_deadline_s = 0; // the analysis is cut this long after the last image (0 = never) + RugnuxLiveStatus rugnux_status; // of the last collection, kept after it ends + enum class ReceiverState {Idle, Running}; ReceiverState state = ReceiverState::Idle; mutable std::mutex state_mutex; @@ -43,6 +53,9 @@ public: ImagePusher &pusher, size_t send_buffer_size_MiB = 512); JFJochReceiverService& NumThreads(int64_t input); + JFJochReceiverService& RugnuxLive(bool enable, const std::string &model_path, int reserved_cpus, + double deadline_s); + RugnuxLiveSnapshot GetRugnuxStatus() const; JFJochReceiverService& PreviewSocket(const std::string &addr, const std::optional &watermark = {}); JFJochReceiverService& MetadataSocket(const std::string &addr); diff --git a/receiver/RugnuxLiveStatus.cpp b/receiver/RugnuxLiveStatus.cpp new file mode 100644 index 000000000..a0247a8c9 --- /dev/null +++ b/receiver/RugnuxLiveStatus.cpp @@ -0,0 +1,95 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "RugnuxLiveStatus.h" + +double RugnuxLiveStatus::Now() const { + return std::chrono::duration(std::chrono::steady_clock::now() - start).count(); +} + +void RugnuxLiveStatus::CloseStep() { + if (!s.steps.empty() && !s.steps.back().duration_s) + s.steps.back().duration_s = Now() - s.steps.back().started_s; +} + +void RugnuxLiveStatus::Start(int64_t images_expected) { + std::unique_lock ul(m); + s = RugnuxLiveSnapshot{}; + s.state = RugnuxLiveState::Running; + s.images_expected = images_expected; + start = std::chrono::steady_clock::now(); +} + +void RugnuxLiveStatus::ImageReceived() { + std::unique_lock ul(m); + ++s.images_received; +} + +void RugnuxLiveStatus::Step(const std::string &title) { + std::unique_lock ul(m); + CloseStep(); + s.steps.push_back(RugnuxLiveStep{.title = title, .started_s = Now()}); + s.step_progress.reset(); +} + +void RugnuxLiveStatus::Note(const std::string &text) { + std::unique_lock ul(m); + if (s.steps.empty()) + s.steps.push_back(RugnuxLiveStep{.title = "", .started_s = Now()}); + s.steps.back().notes.push_back(text); +} + +void RugnuxLiveStatus::Progress(uint64_t done, uint64_t total) { + std::unique_lock ul(m); + if (total > 0) + s.step_progress = static_cast(done) / static_cast(total); +} + +void RugnuxLiveStatus::Finish(RugnuxLiveState state, const std::string &message) { + std::unique_lock ul(m); + CloseStep(); + s.elapsed_s = Now(); + s.state = state; + s.message = message; + s.step_progress.reset(); +} + +void RugnuxLiveStatus::Result(const std::string &verdict, const std::string &verdict_text, + const std::vector> &summary, + const std::vector &warnings) { + std::unique_lock ul(m); + s.verdict = verdict; + s.verdict_text = verdict_text; + s.summary = summary; + s.warnings = warnings; +} + +void RugnuxLiveStatus::Latency(double last_image_to_written_s) { + std::unique_lock ul(m); + s.last_image_to_written_s = last_image_to_written_s; +} + +void RugnuxLiveStatus::LastImage() { + std::unique_lock ul(m); + s.last_image_s = Now(); +} + +void RugnuxLiveStatus::Cut(const std::string &reason) { + std::unique_lock ul(m); + s.cut = reason; + s.cut_s = Now(); +} + +void RugnuxLiveStatus::Probe(const std::string &text) { + std::unique_lock ul(m); + s.probe = text; + s.probe_s = Now(); +} + +RugnuxLiveSnapshot RugnuxLiveStatus::Get() const { + std::unique_lock ul(m); + RugnuxLiveSnapshot ret = s; + if (s.state == RugnuxLiveState::Running) + ret.elapsed_s = Now(); + return ret; +} diff --git a/receiver/RugnuxLiveStatus.h b/receiver/RugnuxLiveStatus.h new file mode 100644 index 000000000..04e03f00c --- /dev/null +++ b/receiver/RugnuxLiveStatus.h @@ -0,0 +1,71 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include +#include +#include +#include +#include + +// Where the live rugnux run of the last collection is, for the broker's status route: the steps it has +// taken with what each found ("lattice found", "space group P 21 21 21"), the step it is on and how far +// into its images, and - once it is over - its verdict and summary as the report states them, and the +// latency from the last image to every result written. +enum class RugnuxLiveState { Idle, Running, Done, Failed, Cancelled, Skipped }; + +struct RugnuxLiveStep { + std::string title; + double started_s = 0.0; // since the collection started + std::optional duration_s; // set once the next step starts or the run ends + std::vector notes; +}; + +struct RugnuxLiveSnapshot { + RugnuxLiveState state = RugnuxLiveState::Idle; + std::string message; // why it failed or was skipped + int64_t images_expected = 0; + int64_t images_received = 0; + double elapsed_s = 0.0; + std::optional step_progress; // fraction of the current pass's images + std::vector steps; + // The lattice probe on the first 60 degrees (JFJochReceiverRugnux::ProbeThread): an early answer + // to "is there a crystal", seconds into the collection; the run's own answer comes later. + std::string probe; + std::optional probe_s; // when it answered, since the collection started + std::optional last_image_s; // when the last image arrived, since the collection started + // The analysis was cut - "deadline" (the broker's deadline_s after the last image) or "cancel" - at + // cut_s since the collection started; what it had established went out, the steps after it were left out. + std::string cut; + std::optional cut_s; + std::optional last_image_to_written_s; + std::string verdict; // OK | WARNINGS | UNUSABLE | FAILED + std::string verdict_text; + std::vector> summary; + std::vector warnings; +}; + +class RugnuxLiveStatus { + mutable std::mutex m; + RugnuxLiveSnapshot s; + std::chrono::steady_clock::time_point start; + double Now() const; + void CloseStep(); +public: + void Start(int64_t images_expected); + void ImageReceived(); + void Step(const std::string &title); + void Note(const std::string &text); + void Progress(uint64_t done, uint64_t total); + void Finish(RugnuxLiveState state, const std::string &message = ""); + void Result(const std::string &verdict, const std::string &verdict_text, + const std::vector> &summary, + const std::vector &warnings); + void Latency(double last_image_to_written_s); + void LastImage(); + void Cut(const std::string &reason); + void Probe(const std::string &text); + RugnuxLiveSnapshot Get() const; +}; diff --git a/rugnux/CMakeLists.txt b/rugnux/CMakeLists.txt index 27eb8cfb1..83444105f 100644 --- a/rugnux/CMakeLists.txt +++ b/rugnux/CMakeLists.txt @@ -17,6 +17,8 @@ ADD_LIBRARY(JFJochRugnux STATIC RugnuxScaleMerge.cpp RugnuxDefaults.cpp RugnuxDefaults.h + RugnuxLive.cpp + RugnuxLive.h Rugnux.h RugnuxCommandLine.cpp RugnuxCommandLine.h diff --git a/rugnux/Rugnux.cpp b/rugnux/Rugnux.cpp index e6e6eb076..a7c231288 100644 --- a/rugnux/Rugnux.cpp +++ b/rugnux/Rugnux.cpp @@ -419,11 +419,11 @@ ProcessResult Rugnux::Run(RugnuxObserver *observer) { result = RunAllPasses(observer); } catch (const NoLatticeFound &) { // A run that found no lattice after deciding a near tie early is made again deciding late. - if (!near_tie_rechecks_->carried) + if (!near_tie_rechecks_->carried || config_.fast_live) throw; lost = true; } - if (lost || (!result.cancelled && NearTieOverturned())) { + if (lost || (!result.cancelled && !config_.fast_live && NearTieOverturned())) { JoinBeamCenterCapture(); Logger logger("Rugnux"); logger.Info("A near tie decided early ends elsewhere on the rest of the sweep - the run is made again, " @@ -431,6 +431,12 @@ ProcessResult Rugnux::Run(RugnuxObserver *observer) { result = again->RunAllPasses(observer); run = again.get(); } + // Cut short in fast_live: a pass whose images were not all read has no lattice and no merge, so the + // run's answer is the last pass that ran to its end. + if (config_.fast_live && result.cancelled && established_) { + result = *established_; + result.cancelled = true; + } result.total_time_s = std::chrono::duration(std::chrono::steady_clock::now() - run_start).count(); // For the report's beam-centre warning: what the background measured, and what this crystal asks // of the centre - at the file's geometry, as the pre-scan's check asks it, but on the cell the run @@ -707,7 +713,7 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b // skip the search that is the whole point of running again. // The run as this pass finds it, for the re-check of a near tie its first pass may decide early. std::shared_ptr recheck; - if (!decide_late_ && config_.mode == ProcessMode::FullAnalysis && config_.rotation_indexing + if (!decide_late_ && !config_.fast_live && config_.mode == ProcessMode::FullAnalysis && config_.rotation_indexing && config_.two_pass_rotation && !force_rotation_result_.has_value() && !config_.forced_rotation_lattice.has_value() && experiment_.IsRotationIndexing()) recheck = std::make_shared(*this); @@ -1072,7 +1078,9 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b image_pass_mark.Stop(); // Scaling and merging (full analysis only). - if (full && !cancelled_ && (result.indexing_rate.value_or(0.0f) > 0 || result.rotation_lattice_found) + // As ImagePass's stopped(): in fast_live a pass that read all its images merges whatever comes after. + const bool images_cut = config_.fast_live ? result.cancelled : static_cast(cancelled_); + if (full && !images_cut && (result.indexing_rate.value_or(0.0f) > 0 || result.rotation_lattice_found) && (config_.run_scaling || !config_.reference_data.empty())) { TimingMark mark(logger, "scale, merge and symmetry"); std::optional gpu_merge; // what the speculative probe waits for on a small card @@ -1190,6 +1198,7 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b writer->Finalize(); result.written_master_path = config_.output_prefix + "_process.h5"; } + result.end_message = end_msg; output_mark.Stop(); diff --git a/rugnux/Rugnux.h b/rugnux/Rugnux.h index e5cca61d9..afbdca2aa 100644 --- a/rugnux/Rugnux.h +++ b/rugnux/Rugnux.h @@ -110,6 +110,13 @@ struct ProcessConfig { // are decided (Rugnux::decide_late_). bool live = false; + // Live in the broker, where the run has to end a fixed time after the last frame: every decision + // stands where it was first taken, and nothing the run would otherwise do again once the sweep is + // in - the near-tie re-checks and the run made again, the rotation-scale walk, the metric-symmetry + // arms, the geometry walk, the supercell and quality guards, the doubled cell - is done. A + // difficult crystal can come out worse; an easy one comes out the same, sooner. + bool fast_live = false; + // Rotation indexing (FullAnalysis) bool rotation_indexing = false; bool two_pass_rotation = true; @@ -326,6 +333,9 @@ struct ProcessResult { // beam-centre pre-scan that runs before the first one. processing_time_s is the last pass alone // and so understates a two-pass run by more than a factor of two. double total_time_s = 0.0; + // The end message of this pass, as the _process.h5 records it: the lattice, refined geometry, + // reindexing and the run means - what the broker puts into its own when it runs rugnux live. + EndMessage end_message; // Workers the per-image loop actually ran, which is not config.nthreads once the loop is capped. int image_loop_threads = 0; double frame_rate_hz = 0.0; @@ -813,6 +823,9 @@ class Rugnux { CancelFlag Own() const { CancelFlag f; f.run = flag; return f; } }; CancelFlag cancelled_; + // fast_live: the last pass that ran to its end. Where a cancel cuts the pass after it short, Run() + // returns this one, so the broker sends what is established (lattice, geometry) rather than nothing. + std::optional established_; // Where the steps and notes of the pass now running go: the observer on a pass that makes the // result, nullptr on a probe pass and on a copy run beside the main one. Set by RunPipeline. @@ -1357,6 +1370,8 @@ public: const PowderRings &GetPowderRings() const { return powder_; } // Request cancellation; safe to call from any thread (the worker loop checks between images). + // fast_live makes it a cut: a pass that is past its images still merges and writes its files, + // only the model is left out, and a pass cut in its images gives way to the last complete one. void Cancel() { cancelled_ = true; } bool IsCancelled() const { return cancelled_; } }; diff --git a/rugnux/RugnuxImagePass.cpp b/rugnux/RugnuxImagePass.cpp index dc17a0419..0510a79e9 100644 --- a/rugnux/RugnuxImagePass.cpp +++ b/rugnux/RugnuxImagePass.cpp @@ -409,6 +409,10 @@ void Rugnux::ImagePass(PipelineLocals &p) { std::chrono::steady_clock::now() - image_loop_start).count(); result.cancelled = cancelled_; + // Whether the pass stops here. In fast_live a cut that comes after the last image read lets the pass + // finish - its lattice, its merge and its files are what the run has established - and only the model + // after them is left out (ScaleMergeAndSymmetry). + const auto stopped = [&] { return config_.fast_live ? result.cancelled : static_cast(cancelled_); }; result.images_processed = finished_count.load(); Note(fmt::format("{} images, {:.0f} per second", result.images_processed, result.images_processed / std::max(1e-6, result.image_loop_time_s))); @@ -424,7 +428,7 @@ void Rugnux::ImagePass(PipelineLocals &p) { // The footprint of the reflection rather than of the spot: the pre-scan's widths plus where the // spots sit against their predictions (SpotFootprint.h). Like the widths it acts only where the // reflection outgrows the r1 disk, and like them it is held back for the canonical pass. - if (measure_offsets && !cancelled_) { + if (measure_offsets && !stopped()) { const SpotFootprint fp = FootprintWithOffsets(*prescan_footprint_, footprint_offsets); const BraggIntegrationSettings canonical = bragg_adaptive_.value_or(experiment_.GetBraggIntegrationSettings()); bool outgrows = false; @@ -446,7 +450,7 @@ void Rugnux::ImagePass(PipelineLocals &p) { } } - if (full && indexer && experiment_.IsRotationIndexing() && !cancelled_) { + if (full && indexer && experiment_.IsRotationIndexing() && !stopped()) { const SupercellProbe probe = indexer->GetSupercellProbe(); if (probe[0][0].n > 0 && probe[0][1].n > 0) { std::string table; @@ -594,7 +598,7 @@ void Rugnux::ImagePass(PipelineLocals &p) { predicted += p_i; crowded += c_i; } - if (predicted > 0 && !cancelled_) { + if (predicted > 0 && !stopped()) { const double f = static_cast(crowded) / static_cast(predicted); const double n = static_cast(crowding_frames.size()); double ss = 0.0; @@ -611,7 +615,7 @@ void Rugnux::ImagePass(PipelineLocals &p) { // Every image failing is a total failure, not a run that produced nothing: it used to be reported // only as per-image log lines while the process still exited 0 with no output file. - if (!cancelled_ && images_to_process > 0 && result.images_processed == 0) + if (!stopped() && images_to_process > 0 && result.images_processed == 0) throw JFJochException(JFJochExceptionCategory::InputParameterInvalid, "No image could be analyzed - see the per-image errors above"); @@ -621,7 +625,7 @@ void Rugnux::ImagePass(PipelineLocals &p) { // Powder calibration: the whole run has now been accumulated - the summed (q x azimuth) profile in // plots, or the pooled spot list - so fit the detector geometry to it. The caller reports it and // writes the PONI file; nothing here is stored in the _process.h5. - if (calibration && !cancelled_) + if (calibration && !stopped()) FitCalibration(p, calibration_spot_list); // End message (also written to the file). @@ -642,7 +646,7 @@ void Rugnux::ImagePass(PipelineLocals &p) { end_msg.az_int_result["dataset"] = plots.GetAzIntProfile(); end_msg.indexing_rate = result.indexing_rate; - if (full && !cancelled_) { + if (full && !stopped()) { const auto rot = indexer->FinalizeRotationIndexing(); indexer->RethrowIndexerError(); if (rot.has_value()) { diff --git a/rugnux/RugnuxLive.cpp b/rugnux/RugnuxLive.cpp new file mode 100644 index 000000000..afd1bc3f1 --- /dev/null +++ b/rugnux/RugnuxLive.cpp @@ -0,0 +1,57 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "RugnuxLive.h" + +#include "RugnuxDefaults.h" + +RugnuxLiveSetup MakeRugnuxLiveSetup(const JFJochReaderDataset &dataset, int nthreads, + const std::string &output_prefix, const std::string &model_path) { + RugnuxLiveSetup s; + + // The experiment as rugnux_cli.cpp sets it up for a rotation sweep with no options given. + DiffractionExperiment &x = s.experiment; + x = dataset.experiment; + ApplyRugnuxExperimentDefaults(x); + x.NumTriggers(1); + ClearStoredCrystal(x); + x.MaxSpotCount(RUGNUX_MAX_SPOT_COUNT); + + IndexingSettings indexing; + indexing.Algorithm(IndexingAlgorithmEnum::Auto); + indexing.RotationIndexing(true); + indexing.GeomRefinementAlgorithm(GeomRefinementAlgorithmEnum::BeamCenter); + indexing.IndexIceRings(false); + x.ImportIndexingSettings(indexing); + x.DetectIceRings(RugnuxDetectIceRings(dataset.file_detect_ice_rings, true)); + + ScalingSettings scaling = RugnuxDefaultScalingSettings(true); + scaling.ScaleFulls(true); + scaling.RelativeBDegrees(0.0); + scaling.MergeFriedel(true); + scaling.MinPartiality(0.02); + scaling.MinCCForImage(0.0); + x.ImportScalingSettings(scaling); + + ProcessConfig &c = s.config; + c.mode = ProcessMode::FullAnalysis; + c.nthreads = nthreads; + c.output_prefix = output_prefix; + c.write_process_h5 = false; + c.export_unmerged = false; + c.spot_finding = RugnuxDefaultSpotFinding(true); + c.rotation_indexing = true; + c.two_pass_rotation = true; + c.rotation_postrefine_geometry = true; + c.rotation_indexing_image_count = RUGNUX_ROTATION_INDEXING_IMAGES; + c.detect_beam_stop = RUGNUX_DETECT_BEAM_STOP_FRAMES; + c.beam_center_check = true; + c.measure_spot_budget = true; + c.run_scaling = true; + c.model_path = model_path; + c.live = true; + c.fast_live = true; + // Decided late, on the whole sweep, as it re-checks its radius there - which fast_live does not. + c.adaptive_integration_radius = false; + return s; +} diff --git a/rugnux/RugnuxLive.h b/rugnux/RugnuxLive.h new file mode 100644 index 000000000..c4aba1297 --- /dev/null +++ b/rugnux/RugnuxLive.h @@ -0,0 +1,21 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include + +#include "Rugnux.h" +#include "../reader/JFJochReaderDataset.h" + +// A rotation collection processed inside the broker while its frames arrive: what a bare `rugnux` on +// the same file would set, with the run made fast_live. The output goes to output_prefix - a place +// private to the broker, from which it builds the END message - and the model, where one is given, +// is placed and validated as `rugnux --model` does. +struct RugnuxLiveSetup { + DiffractionExperiment experiment; + ProcessConfig config; +}; + +RugnuxLiveSetup MakeRugnuxLiveSetup(const JFJochReaderDataset &dataset, int nthreads, + const std::string &output_prefix, const std::string &model_path); diff --git a/rugnux/RugnuxPasses.cpp b/rugnux/RugnuxPasses.cpp index 01ae4bc01..6b41c4e23 100644 --- a/rugnux/RugnuxPasses.cpp +++ b/rugnux/RugnuxPasses.cpp @@ -387,6 +387,8 @@ ProcessResult Rugnux::RunAllPasses(RugnuxObserver *observer) { pass1.pass_number = 1; pass1.pass_count = 2; if (cancelled_) { config_.output_prefix = base_prefix; return pass1; } + if (config_.fast_live) + established_ = pass1; // Beam centre as a LATTICE hypothesis, decided on the merge. The first pass indexed both // centres, found the same cell with a different metric symmetry read off it, and measured that @@ -658,7 +660,7 @@ ProcessResult Rugnux::RunAllPasses(RugnuxObserver *observer) { // pass off and throws it away, so the walk runs first, on its own, and the refined passes // after it. Either way the run ends where the sequential walk leaves it. constexpr double ROTATION_SCALE_STEP = 0.01; - if (!cancelled_ && gonio_snapshot && pass1.post_refine && !config_.rotation_scale) { + if (!cancelled_ && !config_.fast_live && gonio_snapshot && pass1.post_refine && !config_.rotation_scale) { const auto check = std::make_shared(); RotationScaleWalk walk; if (std::fabs(pass1.post_refine->rotation_scale - 1.0) >= ROTATION_SCALE_STEP) { @@ -940,7 +942,8 @@ std::optional Rugnux::RefinedPasses(RugnuxObserver *observer, Pro // Let every refined pass from here on ask the quality guard's question of itself, so one that // is going to be thrown away can skip the report and the files it would have superseded. - quality_guard_pass1_ = pass1; + if (!config_.fast_live) + quality_guard_pass1_ = pass1; config_.output_prefix = base_prefix; // the refined pass is the canonical result (no _02 suffix) // The canonical pass measures the post-refinement again where the pre-pass moved the geometry // (it applies nothing), so that the walk below has something to decide on. @@ -997,7 +1000,7 @@ std::optional Rugnux::RefinedPasses(RugnuxObserver *observer, Pro double split = 0.0; std::optional demoted_arm; // run where the data resolve the equality std::shared_ptr demoted_recheck; // the demoted arm again on all the frames, for a near tie - if (!cancelled_ && (length_arm || angle_arm) && pass1.rotation_lattice_type) { + if (!cancelled_ && !config_.fast_live && (length_arm || angle_arm) && pass1.rotation_lattice_type) { split = length_arm ? *pass1.lattice_length_split : *pass1.lattice_angle_departure_deg * PI / 180.0; const double dx = std::max(experiment_.GetBeamX_pxl(), static_cast(experiment_.GetXPixelsNum()) - experiment_.GetBeamX_pxl()); @@ -1101,8 +1104,8 @@ std::optional Rugnux::RefinedPasses(RugnuxObserver *observer, Pro logger.Info("Rotation two-pass geometry post-refinement: second pass (refined geometry, canonical) -> {}_*", base_prefix); - speculate_geometry_probe_ = true; // a walk that follows starts with an indexing probe - rerun_if_starved_ = true; + speculate_geometry_probe_ = !config_.fast_live; // a walk that follows starts with an indexing probe + rerun_if_starved_ = !config_.fast_live; const DiffractionExperiment before_pass2 = experiment_; auto pass2 = RunPipeline(observer, /*write_output=*/true, /*geometry_prepass=*/false); if (radius_recheck_) { @@ -1296,7 +1299,7 @@ std::optional Rugnux::RefinedPasses(RugnuxObserver *observer, Pro // from here, not from where its own probe left the run. DiffractionExperiment last_round_start = experiment_; bool walk_shown = false; - while (!cancelled_ && prepass_detector_geometry_ + while (!cancelled_ && !config_.fast_live && prepass_detector_geometry_ && pass2.post_refine && pass2.post_refine->detector_refined) { if (!walk_shown) { step("Geometry check"); @@ -1437,7 +1440,7 @@ std::optional Rugnux::RefinedPasses(RugnuxObserver *observer, Pro // RunPipeline) - so each is followed by it. After the first re-run the radius is the fixed one // and this never fires again. const auto rerun_if_starved = [&](ProcessResult &pass, const std::string decision) { - if (cancelled_ || !bragg_adaptive_ || !bkg_starved_fraction_ + if (cancelled_ || config_.fast_live || !bragg_adaptive_ || !bkg_starved_fraction_ || *bkg_starved_fraction_ <= spot_width::BKG_STARVED_MAX_FRACTION) return; logger.Info("Two-pass: at the widened integration radius r1={:.1f} the neighbouring " @@ -1487,7 +1490,7 @@ std::optional Rugnux::RefinedPasses(RugnuxObserver *observer, Pro }; const double v1 = primitive_volume(*pass1.consensus_cell, pass1.consensus_centering); const double v2 = primitive_volume(*pass2.consensus_cell, pass2.consensus_centering); - if (v1 > 0.0 && v2 > 1.5 * v1 && !supercell_settled_) { + if (v1 > 0.0 && v2 > 1.5 * v1 && !supercell_settled_ && !config_.fast_live) { logger.Info("Two-pass: second-pass primitive cell volume {:.0f} A^3 is {:.2f}x pass-1's " "({:.0f} A^3) - a spurious supercell; re-running the second pass with " "pass-1's result forced", @@ -1519,7 +1522,7 @@ std::optional Rugnux::RefinedPasses(RugnuxObserver *observer, Pro // but it is not guaranteed to be, and the guard that decides is RefinedPassIsWorse above. It // has already been asked once, inside the pass itself, which is how a pass that is about to be // thrown away knows not to write a report; this is where the answer is acted on. - if (!cancelled_ && pass1.has_merge_statistics && pass2.has_merge_statistics) { + if (!cancelled_ && !config_.fast_live && pass1.has_merge_statistics && pass2.has_merge_statistics) { logger.Info("Two-pass quality guard: the refined pass holds {} reflections at I/sigma >= 2 and " "{} at <= -2 of {} in a {:.0f} A^3 primitive cell, the header-geometry pass {} and {} " "of {} in {:.0f} A^3; low-order axial {} against {}", @@ -1800,7 +1803,7 @@ namespace { ProcessResult Rugnux::DoubledCellHypothesis(RugnuxObserver *observer, ProcessResult half, const std::string &base_prefix) { - if (cancelled_ || user_cell_ || user_fixed_sg_ || !half.supercell || !last_rotation_result_ + if (cancelled_ || config_.fast_live || user_cell_ || user_fixed_sg_ || !half.supercell || !last_rotation_result_ || !half.has_merge_statistics || !half.consensus_cell || !DoubledCellWorthMerging(*half.supercell)) return half; Logger logger("Rugnux"); diff --git a/rugnux/RugnuxScaleMerge.cpp b/rugnux/RugnuxScaleMerge.cpp index 658fadb27..78ea9d081 100644 --- a/rugnux/RugnuxScaleMerge.cpp +++ b/rugnux/RugnuxScaleMerge.cpp @@ -3992,8 +3992,16 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { gemmi::SpaceGroup space_group; }; std::optional placed_model_out; + // fast_live, cut (the broker's deadline or a cancel): the model is left out, and the files are written + // as a run without one writes them. Asked again before the search below. + const auto model_cut = [&] { + if (!config_.fast_live || !cancelled_) + return false; + Note("cut: the model is left out"); + return true; + }; const bool model_run = result.consensus_cell && write_files && !config_.model_path.empty() && !geometry_prepass - && !superseded; + && !superseded && !model_cut(); // The twin hypothesis the model is asked about: its own subgroup's merge where it has one, the data's // otherwise - and whether that merge was made only for the model, so is written only where it chooses it. std::optional &model_twin = model_twin_merge ? model_twin_file : twin_file; @@ -4307,7 +4315,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { // veto - and nothing else, never an indexing: a different group or the subgroup it chooses goes to the // files of its own, _mr, from the merge it was chosen on. It never makes the rigid body's // verdict (MODEL_FIT) either; its own null is what placed it. - if (model_run && (model_predicted || config_.force_mr || !placed_by_rigid_body)) { + if (model_run && (model_predicted || config_.force_mr || !placed_by_rigid_body) && !model_cut()) { phase("Molecular replacement"); Step("Molecular replacement"); TimingMark mark(logger, "model prior"); diff --git a/rugnux/rugnux_cli.cpp b/rugnux/rugnux_cli.cpp index 33f713b9f..e218c8a70 100644 --- a/rugnux/rugnux_cli.cpp +++ b/rugnux/rugnux_cli.cpp @@ -318,6 +318,7 @@ enum { OPT_WRITE_PROCESS_H5, OPT_FINALIST_LEDGER, OPT_SIMULATE_LIVE, + OPT_FAST_LIVE, OPT_DEVELOPER, OPT_NO_GPU, OPT_FORCE_STILL, @@ -376,6 +377,7 @@ static option long_options[] = { {"write-process-h5", no_argument, nullptr, OPT_WRITE_PROCESS_H5}, {"finalist-ledger", no_argument, nullptr, OPT_FINALIST_LEDGER}, {"simulate-live", required_argument, nullptr, OPT_SIMULATE_LIVE}, + {"fast-live", no_argument, nullptr, OPT_FAST_LIVE}, // undocumented: the broker's live run (ProcessConfig::fast_live) {"developer", no_argument, nullptr, OPT_DEVELOPER}, {"no-gpu", no_argument, nullptr, OPT_NO_GPU}, {"smooth-g", optional_argument, nullptr, OPT_SMOOTH_G}, @@ -942,6 +944,7 @@ static int RunRugnux(int argc, char **argv, bool no_gpu) { std::optional scale_fulls_arg; // --scale-fulls / --no-scale-fulls; default on for rot3d bool write_process_h5_flag = false; // --write-process-h5; also write _process.h5 when merging bool simulate_live = false; // --simulate-live + bool fast_live = false; // --fast-live, with --simulate-live bool finalist_ledger_flag = false; // --finalist-ledger; report-only symmetry evidence table std::optional detect_ice_rings; // --detect-ice-rings[=on|off]; unset => use the dataset (file) value bool index_ice_rings = false; // --index-ice-rings[=on|off]; index on the ice-band spots too @@ -1367,6 +1370,9 @@ static int RunRugnux(int argc, char **argv, bool no_gpu) { case OPT_FINALIST_LEDGER: finalist_ledger_flag = true; break; + case OPT_FAST_LIVE: + fast_live = true; + break; case OPT_SIMULATE_LIVE: simulate_live = true; simulated_frame_time = std::chrono::microseconds( @@ -3136,6 +3142,9 @@ static int RunRugnux(int argc, char **argv, bool no_gpu) { config.write_process_h5 = run_scaling ? write_process_h5_flag : true; config.finalist_ledger = finalist_ledger_flag; config.live = broker_feed || simulate_live; + config.fast_live = fast_live && config.live; + if (config.fast_live) + config.adaptive_integration_radius = false; // as MakeRugnuxLiveSetup if (simulate_live) logger.Info("Simulated live collection: image i readable (i+1) x {:.1f} ms after the run starts", simulated_frame_time.count() / 1000.0); -- 2.54.0 From 4e6d7c33b302f40b7abb59f37269c557afe07dfd Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 12:20:50 +0200 Subject: [PATCH 23/81] rugnux live: END carries the merged data, map coefficients and placed model rugnux wrote Co-Authored-By: Claude Opus 5.5 --- receiver/JFJochReceiverRugnux.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/receiver/JFJochReceiverRugnux.cpp b/receiver/JFJochReceiverRugnux.cpp index b876253f2..2254855ca 100644 --- a/receiver/JFJochReceiverRugnux.cpp +++ b/receiver/JFJochReceiverRugnux.cpp @@ -16,6 +16,7 @@ #include "../frame_serialize/CBORStream2Deserializer.h" #include "../rugnux/RugnuxLive.h" #include "../rugnux/ResultReport.h" +#include "../writer/RugnuxResultBlocks.h" using namespace std::chrono_literals; @@ -338,9 +339,10 @@ void JFJochReceiverRugnux::AddToEndMessage(EndMessage &message) { message.refined_poni_rot2 = r.refined_poni_rot2; message.refined_poni_rot3 = r.refined_poni_rot3; message.refined_rotation_axis = r.refined_rotation_axis; - // TODO: merged data, map coefficients and placed model from scratch_dir (writer branch). Only here, - // with rugnux_result set: every file in scratch_dir is then whole - rugnux writes synchronously and a - // cut never stops a write half-way - while a run that threw may have left one half-written. + // Merged data, map coefficients and placed model, for the writer to write beside the master. Only + // here, with rugnux_result set: every file in scratch_dir is then whole - rugnux writes synchronously + // and a cut never stops a write half-way - while a run that threw may have left one half-written. + FillRugnuxResultBlocks(scratch_dir + "/p", message); } void JFJochReceiverRugnux::Configure(const StartMessage &msg) { -- 2.54.0 From 52025483d83af9b392e048cac4d3551141de6aed Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 12:21:34 +0200 Subject: [PATCH 24/81] battery: a per-set reference_mismatch key skips the REFMAC and depositor-data checks The frames of 3mc4 and 3r6o are a crystal twinned ~30% by k,h,-l - XDS on the same frames reads the same H-test (0.29/0.27) as rugnux (0.29/0.29), in every 60-frame wedge and in P1 - while the deposited structure factors read untwinned (H ~0). The deposited data are another crystal of the same form, so the REFMAC R-free ratio and dep_cc on these two sets measured the mismatch, not rugnux. open.json carries the reason as "reference_mismatch"; run and recheck then record refmac_status/dep_status "skipped" with it, and the report lists both skips (the depositor-data skip list is shown even when no set was compared). Space group, cell and d_min are still scored against the deposition. Checked: battery run --only 3mc4,3r6o --model-check --gpulock (20261017-1139_e25876_twin-isa-mismatch) - both sets skipped with the reason; test_score.py OK. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- tools/battery/README.md | 5 +++++ tools/battery/battery.py | 24 +++++++++++++++++++++--- tools/battery/open.json | 4 ++-- tools/battery/report.py | 9 ++++++--- 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/tools/battery/README.md b/tools/battery/README.md index 6519ec491..5629ef4b1 100644 --- a/tools/battery/README.md +++ b/tools/battery/README.md @@ -859,6 +859,11 @@ whole range; the manifest keeps the rule used as `dmin_rule`. disagrees with an unpinned manifest input. Add the row to `open.json` with the deposited reference (`sg`, `sgno`, `cell`, `dmin`) and tags. Set `"pinned": true` when the choice between sweeps was deliberate. Record the source and DOI in `docs/EXTERNAL_TEST_DATA.md`. + A set whose frames are not the crystal the deposited data came from (checked independently, + e.g. with XDS on the same frames) gets `"reference_mismatch": ""`: the REFMAC check and the + depositor-data comparison are skipped (`refmac_status` / `dep_status` `skipped`, the reason in + `refmac_reason` / `dep_reason` and in the report), while space group, cell and d_min are still + scored against the deposition. - **Small molecules** carry `"cod": ""`, the published structure the SHELXL check refines (pick an entry whose Niggli-reduced cell and space group match the row's reference; prefer a modern, ordered, low-R one). diff --git a/tools/battery/battery.py b/tools/battery/battery.py index 0c1dc3934..a7df13e9f 100644 --- a/tools/battery/battery.py +++ b/tools/battery/battery.py @@ -477,7 +477,7 @@ def run_one(run_dir, binary, e, opts): if e.get("timing"): row.update(timing.check(e["timing"], row, wd, reference)) elif e["reference"] == "deposition" and row["model"] and os.path.exists(os.path.join(wd, "p.mtz")): - row.update(depdata_check.check_set(wd, e["id"], opts["pdb_cache"])) + row.update(check_depdata(e, wd, opts["pdb_cache"])) if opts["model_check"] and e["arm"] == "open": row.update(check_model(e, wd)) if e.get("cod"): @@ -496,6 +496,20 @@ REFMAC_KEYS = ("refmac_rfree", "refmac_rwork", "refmac_rfree_depflags", "refmac_ "refmac_reason", "refmac_refined_ratio") + tuple("refmac_" + k for k in REFMAC_REFINED) +def mismatch_reason(e): + """Why the deposited data are not a reference for this set's frames (open.json's + `reference_mismatch`), or None: the REFMAC and depositor-data checks are then skipped.""" + return e.get("reference_mismatch") and "reference mismatch: " + e["reference_mismatch"] + + +def check_depdata(e, wd, pdb_cache): + """Our merge against the depositor's data (depdata_check.py), unless the manifest says the + deposition is not a reference for these frames.""" + if mismatch_reason(e): + return dict({k: None for k in depdata_check.KEYS}, dep_status="skipped", dep_reason=mismatch_reason(e)) + return depdata_check.check_set(wd, e["id"], pdb_cache) + + def check_model(e, wd): """R-free of the deposited model against this run's merge, by REFMAC (model_check.py).""" out = {k: None for k in REFMAC_KEYS} @@ -503,6 +517,8 @@ def check_model(e, wd): mtz = os.path.join(wd, "p.mtz") if not PDB_ID.match(pdb): return dict(out, refmac_status="skipped", refmac_reason="not a PDB entry") + if mismatch_reason(e): + return dict(out, refmac_status="skipped", refmac_reason=mismatch_reason(e)) if not os.path.exists(mtz): return dict(out, refmac_status="skipped", refmac_reason="no merged MTZ") try: @@ -989,7 +1005,7 @@ def recheck_one(e, wd, pdb_cache): """The post-processing checks of one open-arm row, on the run's own p.mtz (a worker process).""" out = {} if e["model"] and os.path.exists(os.path.join(wd, "p.mtz")): - out.update(depdata_check.check_set(wd, e["id"], pdb_cache)) + out.update(check_depdata(e, wd, pdb_cache)) out.update(check_model(e, wd)) return out @@ -1031,8 +1047,10 @@ def cmd_recheck(a, site): set_writable([os.path.join(wd, "model_check")]) os.rename(os.path.join(wd, "model_check"), os.path.join(wd, "model_check.pre-recheck-" + stamp)) shutil.copy2(os.path.join(run, "results.json"), os.path.join(run, "results.json.pre-recheck-" + stamp)) + mismatch = {e["id"]: e.get("reference_mismatch") for e in load_sets(site, "open")} with concurrent.futures.ProcessPoolExecutor(a.jobs) as pool: - futures = {pool.submit(recheck_one, {"id": r["set"], "model": r.get("model")}, wd, pdb_cache): r + futures = {pool.submit(recheck_one, {"id": r["set"], "model": r.get("model"), + "reference_mismatch": mismatch.get(r["set"])}, wd, pdb_cache): r for r, wd in zip(rows, wds)} for n, fut in enumerate(concurrent.futures.as_completed(futures), 1): r = futures[fut] diff --git a/tools/battery/open.json b/tools/battery/open.json index 10ea5cf1d..d2686dfd3 100644 --- a/tools/battery/open.json +++ b/tools/battery/open.json @@ -3,10 +3,10 @@ {"id": "36gk", "input": "36gk/CLS-0074_5-3_36GK/data/CLS-0074_5-3_master.h5", "wavelength": 0.95371, "ref": {"sg": "I 2 2 2", "sgno": 23, "cell": [120.58, 189.49, 199.69, 90.0, 90.0, 90.0], "dmin": 2.28}, "tags": ["h5", "orthorhombic"]}, {"id": "3inp", "input": "3inp/IDP02542_3inp/data/idp02542b.001", "wavelength": 0.97872, "ref": {"sg": "F 41 3 2", "sgno": 210, "cell": [224.08, 224.08, 224.08, 90.0, 90.0, 90.0], "dmin": 2.05}, "tags": ["marCCD", "cubic"], "tiers": {"ci": "marCCD, face-centred cubic F4132"}}, {"id": "3ky7", "input": "3ky7/IDP90258_3ky7/data/idp90258f.001", "wavelength": 0.97856, "ref": {"sg": "P 43 3 2", "sgno": 212, "cell": [125.176, 125.176, 125.176, 90.0, 90.0, 90.0], "dmin": 2.35}, "tags": ["marCCD", "cubic"]}, - {"id": "3mc4", "input": "3mc4/series/206918e4_x0001.img", "wavelength": 1.54178, "ref": {"sg": "H 3", "sgno": 146, "cell": [104.03, 104.03, 105.54, 90.0, 90.0, 120.0], "dmin": 1.95}, "tags": ["smv", "trigonal", "home-source"]}, + {"id": "3mc4", "input": "3mc4/series/206918e4_x0001.img", "wavelength": 1.54178, "ref": {"sg": "H 3", "sgno": 146, "cell": [104.03, 104.03, 105.54, 90.0, 90.0, 120.0], "dmin": 1.95}, "reference_mismatch": "the frames are a crystal twinned ~30% (law k,h,-l, confirmed with XDS on the same frames); the deposited data are an untwinned crystal of the same form", "tags": ["smv", "trigonal", "home-source"]}, {"id": "3meb", "input": "3meb/series/202097g3_x0001.img", "wavelength": 1.54178, "ref": {"sg": "P 1 21 1", "sgno": 4, "cell": [58.58, 101.15, 81.53, 90.0, 90.62, 90.0], "dmin": 1.9}, "tags": ["smv", "monoclinic", "home-source"]}, {"id": "3p85", "input": "3p85/series/217175d10_x0001.img", "wavelength": 1.54178, "ref": {"sg": "P 63 2 2", "sgno": 182, "cell": [127.29, 127.29, 72.9, 90.0, 90.0, 120.0], "dmin": 1.9}, "tags": ["smv", "hexagonal", "home-source"]}, - {"id": "3r6o", "input": "3r6o/series/219594b8_x0001.img", "wavelength": 1.54178, "ref": {"sg": "I 41", "sgno": 80, "cell": [90.68, 90.68, 76.13, 90.0, 90.0, 90.0], "dmin": 1.95}, "symmetry_evidence": "symmetry/3r6o", "tags": ["smv", "tetragonal", "home-source"]}, + {"id": "3r6o", "input": "3r6o/series/219594b8_x0001.img", "wavelength": 1.54178, "ref": {"sg": "I 41", "sgno": 80, "cell": [90.68, 90.68, 76.13, 90.0, 90.0, 90.0], "dmin": 1.95}, "symmetry_evidence": "symmetry/3r6o", "reference_mismatch": "the frames are a crystal twinned ~30% (law k,h,-l, confirmed with XDS on the same frames); the deposited data are an untwinned crystal of the same form", "tags": ["smv", "tetragonal", "home-source"]}, {"id": "5cc8", "input": "5cc8/data/263060g10_x0001.img", "wavelength": 1.54178, "ref": {"sg": "P 21 21 2", "sgno": 18, "cell": [87.14, 93.76, 72.49, 90.0, 90.0, 90.0], "dmin": 1.75}, "symmetry_evidence": "symmetry/5cc8", "tags": ["smv", "orthorhombic", "home-source", "tncs"]}, {"id": "5ebi", "input": "5ebi/dna-rna-chimera_Ba_high_2_001.img", "wavelength": 0.82657, "ref": {"sg": "P 1 21 1", "sgno": 4, "cell": [35.72, 44.1, 35.72, 90.0, 119.98, 90.0], "dmin": 1.09}, "pinned": true, "symmetry_evidence": "symmetry/5ebi", "tags": ["marCCD", "monoclinic", "twin"]}, {"id": "5epe", "input": "5epe/030805_5epe/data/E1_7_set.001", "wavelength": 0.97856, "ref": {"sg": "F 2 3", "sgno": 196, "cell": [157.536, 157.536, 157.536, 90.0, 90.0, 90.0], "dmin": 1.9}, "tags": ["marCCD", "cubic"]}, diff --git a/tools/battery/report.py b/tools/battery/report.py index 06ea151bf..c9475c4bd 100644 --- a/tools/battery/report.py +++ b/tools/battery/report.py @@ -523,6 +523,9 @@ def build(run_dir, baseline=None, allow_incomplete=False): "REFMAC check (--model-check): R_free of the deposited model against our merge / against " "the deposited structure factors, both on the depositor's free set with the same protocol, " "one point per set, sorted; below 1 = our data fit the model better") + skipped = [r for r in res if r.get("refmac_status") == "skipped" and r["arm"] == "open"] + if skipped: + doc.p("REFMAC check skipped: " + "; ".join(f"{r['set']} ({r['refmac_reason']})" for r in skipped)) dep = [r for r in res if r.get("dep_status") == "ok"] if dep: @@ -544,9 +547,9 @@ def build(run_dir, baseline=None, allow_incomplete=False): doc.table(["set", "dep. data", "our d_min", "dep. d_min", "common refl.", "dCC all", "dCC outer 2", "CC past limit", "to d A", "REFMAC ratio", "ISa", "tags"], rows, num=range(2, 11)) - other = [r for r in res if r.get("dep_status") not in (None, "ok")] - if other: - doc.p("No comparison: " + "; ".join(f"{r['set']} ({r['dep_reason']})" for r in other)) + other = [r for r in res if r.get("dep_status") not in (None, "ok")] + if other: + doc.p("No depositor-data comparison: " + "; ".join(f"{r['set']} ({r['dep_reason']})" for r in other)) xds = [r for r in res if r.get("refres_range")] if xds: -- 2.54.0 From 0d7e176b3c4b4f740597e59b0b109a7b8b89bef3 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 12:41:45 +0200 Subject: [PATCH 25/81] Speculative geometry probe beside the merge decided on bytes, not on a 12 GB card size The speculative geometry probe waited for the main line's merge on every card below 12 GB (gpu_takes_turns), so on an 8 GB laptop card it always ran after the merge, as a serial "Geometry check" at the end of the run (Windows RTX PRO 2000: myob 1.4-1.7 s, lyso 0.6 s, 4nwv 3.2-4.4 s, against ~0.15 s where it overlaps). Now it is decided from bytes, up front and never from free memory: - GPUMerge::Holds(bytes): the main line says what its merge holds of the card once the scaling engine is ingested - the engine's DeviceBytes (an upper bound), twice where the all-observation arm gets an engine of its own - before the post-refinement that may start the probe is let go. A merge that has not said yet counts as leaving no room. Before the model stage it says the whole card: model validation and MR budget 80% of the card for themselves. - GPUWorkBeside(after_merges, bytes): the probe waits for the merges only where its own bytes and theirs exceed 80% of the first card's total (the same 80% the merge's and the model's GPU budgets use; on WDDM the rest is the paging margin). The image-pass / probe-pass turn-taking below 12 GB is unchanged. - Rugnux::IndexingProbeGPUBytes: the probe's first-pass spot workers at 24 bytes a pixel (GPUWorkersPerCard's figure) plus 0.65 GB per FFT indexer (1.24 GB measured for two). The spot-worker count is now one function (FirstPassSpotWorkers) for both. - The model stage waits for GPU work beside to end before it plans its GPU engines. Estimates on an 8.55 GB card: myob probe 4.1 GB + merge 0.6 GB -> beside (was: after); 4nwv probe 3.9 GB + merge 4.2 GB -> still after. On the RTX 5080 (16.3 GB): myob 4.8 + 0.6, 4nwv 4.5 + 8.4 = 13.0 of 13.04 GB -> beside, as before. Concurrency only: what each pass computes is unchanged. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- common/CUDAWrapper.cpp | 41 +++++++++++++++++++++++++++++---- common/CUDAWrapper.h | 25 ++++++++++++-------- rugnux/Rugnux.cpp | 34 +++++++++++++++++++++++----- rugnux/Rugnux.h | 5 ++++ rugnux/RugnuxFirstPass.cpp | 5 +--- rugnux/RugnuxPipeline.h | 4 ++++ rugnux/RugnuxScaleMerge.cpp | 44 ++++++++++++++++++++++++------------ tests/CUDAMemHelpersTest.cpp | 37 ++++++++++++++++++++++-------- 8 files changed, 147 insertions(+), 48 deletions(-) diff --git a/common/CUDAWrapper.cpp b/common/CUDAWrapper.cpp index 722bdc9ae..07a8e24c3 100644 --- a/common/CUDAWrapper.cpp +++ b/common/CUDAWrapper.cpp @@ -34,6 +34,9 @@ namespace { std::mutex gpu_work_m; std::condition_variable gpu_work_changed; int gpu_work_beside_n = 0, gpu_image_passes_n = 0, gpu_merges_n = 0; + // What the merges hold of the card, as they said (GPUMerge::Holds), and how many have not said yet. + size_t gpu_merge_bytes = 0; + int gpu_merges_unsized_n = 0; // A card too small for a probe pass beside the main line's image pass, or beside another probe pass: // measured on a 16 Mpx detector, two of them together held 8.6 GB. On such a card a probe pass waits, @@ -47,6 +50,13 @@ namespace { return small; } + // Whether work holding `bytes` fits beside the merges: within 80% of the first card's total, as the + // GPU budgets of the merge and the model validation count it. With no card there is nothing to share. + bool fits_beside_merges(size_t bytes) { + static const size_t card = get_gpu_count() > 0 ? get_gpu_total_memory(0) : 0; + return card == 0 || (gpu_merges_unsized_n == 0 && bytes + gpu_merge_bytes <= card / 5 * 4); + } + void remove(int &n) { { std::lock_guard lock(gpu_work_m); @@ -60,12 +70,12 @@ bool gpu_takes_turns() { return take_turns(); } -GPUWorkBeside::GPUWorkBeside(bool after_merges) { +GPUWorkBeside::GPUWorkBeside(bool after_merges, size_t bytes) { std::unique_lock lock(gpu_work_m); - if (take_turns()) - gpu_work_changed.wait(lock, [after_merges] { - return gpu_image_passes_n == 0 && gpu_work_beside_n == 0 && (!after_merges || gpu_merges_n == 0); - }); + gpu_work_changed.wait(lock, [after_merges, bytes] { + return (!take_turns() || (gpu_image_passes_n == 0 && gpu_work_beside_n == 0)) + && (!after_merges || gpu_merges_n == 0 || fits_beside_merges(bytes)); + }); ++gpu_work_beside_n; } @@ -92,12 +102,33 @@ GPUImagePass::~GPUImagePass() { GPUMerge::GPUMerge() { std::lock_guard lock(gpu_work_m); ++gpu_merges_n; + ++gpu_merges_unsized_n; } GPUMerge::~GPUMerge() { + { + std::lock_guard lock(gpu_work_m); + if (bytes_) + gpu_merge_bytes -= *bytes_; + else + --gpu_merges_unsized_n; + } remove(gpu_merges_n); } +void GPUMerge::Holds(size_t bytes) { + { + std::lock_guard lock(gpu_work_m); + if (bytes_) + gpu_merge_bytes -= *bytes_; + else + --gpu_merges_unsized_n; + gpu_merge_bytes += bytes; + bytes_ = bytes; + } + gpu_work_changed.notify_all(); +} + void wait_for_gpu_image_passes() { std::unique_lock lock(gpu_work_m); gpu_work_changed.wait(lock, [] { return gpu_image_passes_n == 0; }); diff --git a/common/CUDAWrapper.h b/common/CUDAWrapper.h index 1dd596a82..a7bc51afa 100644 --- a/common/CUDAWrapper.h +++ b/common/CUDAWrapper.h @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -115,11 +116,14 @@ void cuda_throw_if_context_lost(); // GPU work that runs beside the main line of a process and gives all of its device memory back when it // ends: a probe pass run on a copy of the run while the run itself scales and merges. Hold one for as // long as that work runs. On a small card it waits first for the main line's image passes (GPUImagePass) -// and for other work beside to end - and, with after_merges, for the main line's merges (GPUMerge). +// and for other work beside to end. With after_merges it waits also for the main line's merges +// (GPUMerge) - unless `bytes`, what this work holds of the card at its most, and what the merges said +// they hold together fit within 80% of the card's total (on a card that pages what does not fit, like a +// WDDM card, the rest is the margin). Decided on those bytes and the total, never on what is free. // Build-independent - it only counts. class GPUWorkBeside { public: - explicit GPUWorkBeside(bool after_merges = false); + explicit GPUWorkBeside(bool after_merges = false, size_t bytes = 0); ~GPUWorkBeside(); GPUWorkBeside(const GPUWorkBeside &) = delete; GPUWorkBeside &operator=(const GPUWorkBeside &) = delete; @@ -141,21 +145,24 @@ public: }; // The scaling, merging and model validation of a run's main line - not of a probe. A probe that the main -// line never waits for (the speculative geometry probe) waits for it on a small card: the merge holds as -// much of the card as the image pass, and on a card that pages what does not fit rather than failing the -// allocation, the two together would not fail but crawl. It waits for nothing itself, so nothing that the -// main line waits for inside its merge - the rotation-scale walk's probes - can wait in a circle with it. -// Build-independent - it only counts. +// line never waits for (the speculative geometry probe) waits for it where the two do not fit the card +// together: on a card that pages what does not fit rather than failing the allocation, the two would not +// fail but crawl. Until Holds says how much of the card the merge holds, it counts as not leaving room for +// any. It waits for nothing itself, so nothing that the main line waits for inside its merge - the +// rotation-scale walk's probes - can wait in a circle with it. Build-independent - it only counts. class GPUMerge { + std::optional bytes_; public: GPUMerge(); ~GPUMerge(); GPUMerge(const GPUMerge &) = delete; GPUMerge &operator=(const GPUMerge &) = delete; + // What the merge holds of the card from now on, at its most (an estimate fitted as an upper bound). + void Holds(size_t bytes); }; -// Whether the card is too small for a probe pass beside the main line (12 GB, decided on the first card's -// total memory), so that they take turns (GPUWorkBeside). Build-independent. +// Whether the card is too small for a probe pass beside the main line's image pass (12 GB, decided on the +// first card's total memory), so that they take turns (GPUWorkBeside). Build-independent. bool gpu_takes_turns(); // Wait until no GPUImagePass is held - at once if none was. With no timeout: an image pass waits for no diff --git a/rugnux/Rugnux.cpp b/rugnux/Rugnux.cpp index e6e6eb076..5a97c214a 100644 --- a/rugnux/Rugnux.cpp +++ b/rugnux/Rugnux.cpp @@ -540,6 +540,24 @@ int Rugnux::FirstPassIndexerThreads() const { return gpu_work_beside_ && gpu_takes_turns() ? 1 : 2; } +int Rugnux::FirstPassSpotWorkers() const { + const int gpus = get_gpu_count(); + if (gpus == 0) + return config_.nthreads; + return std::min({config_.nthreads, std::max(8, 4 * gpus), GPUWorkersPerCard(8) * gpus}); +} + +size_t Rugnux::IndexingProbeGPUBytes() const { + // A worker's engines as an image worker's (GPUWorkersPerCard), and an FFT indexer as measured: the two + // of a pre-pass held 1.24 GB. On a 16.8 Mpx detector, eight workers and two indexers were measured at + // 4.7-4.8 GB. + constexpr size_t WORKER_BYTES_PER_PIXEL = 24, FFT_INDEXER_BYTES = 650'000'000; + const int gpus = std::max(get_gpu_count(), 1); + const size_t workers_per_card = (FirstPassSpotWorkers() + gpus - 1) / gpus; + return workers_per_card * WORKER_BYTES_PER_PIXEL * experiment_.GetPixelsNum() + + FirstPassIndexerThreads() * FFT_INDEXER_BYTES; +} + void Rugnux::StartSpeculativeGeometryProbe(std::shared_ptr run, const std::array &geometry) { // What the walk's index_at_geometry sets up on its copy of the run before it indexes at this geometry. run->prepass_detector_geometry_ = prepass_detector_geometry_; @@ -560,10 +578,13 @@ void Rugnux::StartSpeculativeGeometryProbe(std::shared_ptr run, const st sp->hand = hand; // A probe that fails leaves no memo, and the walk's own probe then runs it again and meets the // failure itself. It runs beside the merge of the pass that started it, on the same card: a merge - // that does not fit beside it waits for it to end (GPUWorkBeside) - and on a small card it waits for - // that merge to end instead (GPUMerge). - sp->done = std::async(std::launch::async, [run, hand] { - GPUWorkBeside beside(/*after_merges=*/true); + // allocation that does not fit beside it waits for it to end (GPUWorkBeside) - and where the probe's + // bytes and the merge's do not fit the card together, the probe waits for that merge to end instead + // (GPUMerge). Its two passes run one after the other, so it holds at most what one does. + const size_t probe_bytes = run->IndexingProbeGPUBytes(); + Logger("Rugnux").Debug("Speculative geometry probe: {:.2f} GB of the card", probe_bytes / 1e9); + sp->done = std::async(std::launch::async, [run, hand, probe_bytes] { + GPUWorkBeside beside(/*after_merges=*/true, probe_bytes); for (const auto &r : {run, hand}) { try { r->RunPipeline(nullptr, /*write_output=*/false, /*geometry_prepass=*/false); @@ -1075,10 +1096,11 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b if (full && !cancelled_ && (result.indexing_rate.value_or(0.0f) > 0 || result.rotation_lattice_found) && (config_.run_scaling || !config_.reference_data.empty())) { TimingMark mark(logger, "scale, merge and symmetry"); - std::optional gpu_merge; // what the speculative probe waits for on a small card + std::optional gpu_merge; // what the speculative probe waits for where both do not fit if (!gpu_work_beside_) - gpu_merge.emplace(); + p.gpu_merge = &gpu_merge.emplace(); const bool finished = ScaleMergeAndSymmetry(p); + p.gpu_merge = nullptr; gpu_merge.reset(); if (p.postrefine_ahead.valid()) { p.postrefine_ahead.get(); diff --git a/rugnux/Rugnux.h b/rugnux/Rugnux.h index e5cca61d9..6d434c98e 100644 --- a/rugnux/Rugnux.h +++ b/rugnux/Rugnux.h @@ -1279,6 +1279,11 @@ class Rugnux { // An FFT indexer holds 0.3-0.6 GB of the card, and which one indexes a frame does not change what it // finds. [[nodiscard]] int FirstPassIndexerThreads() const; + // The first pass's spot-finding workers, each with GPU engines of its own where there is a card. + [[nodiscard]] int FirstPassSpotWorkers() const; + // What a probe pass that only indexes holds of a card at its most: its first pass's workers and FFT + // indexers (Rugnux.cpp). + [[nodiscard]] size_t IndexingProbeGPUBytes() const; // The pre-scan's workers (RugnuxPreScan.cpp). [[nodiscard]] size_t PrescanWorkers() const; // After the image pass of a rotation sweep: the decisions taken on the sweep's first part diff --git a/rugnux/RugnuxFirstPass.cpp b/rugnux/RugnuxFirstPass.cpp index 2f4840c13..6265ba7ae 100644 --- a/rugnux/RugnuxFirstPass.cpp +++ b/rugnux/RugnuxFirstPass.cpp @@ -468,10 +468,7 @@ Rugnux::FirstPassRun::FirstPassRun(Rugnux &rx, PipelineLocals &p) start_image(p.start_image), early_images(p.prepass_images), dataset(p.dataset), mapping(p.mapping), indexer_pool(p.indexer_pool), indexer(p.indexer), indexing_bound_A(p.indexing_bound_A), census_future(p.census_future), - spot_workers(get_gpu_count() > 0 - ? std::min({rx.config_.nthreads, std::max(8, 4 * get_gpu_count()), - rx.GPUWorkersPerCard(8) * get_gpu_count()}) - : rx.config_.nthreads), + spot_workers(rx.FirstPassSpotWorkers()), engines(std::max(spot_workers, 1)), late_validation(LateValidationFrames(p.prepass_images, p.images_to_process)), validation_settings(rx.config_.spot_finding), diff --git a/rugnux/RugnuxPipeline.h b/rugnux/RugnuxPipeline.h index 62c94127a..53f3996e3 100644 --- a/rugnux/RugnuxPipeline.h +++ b/rugnux/RugnuxPipeline.h @@ -21,6 +21,7 @@ #include #include "Rugnux.h" +#include "../common/CUDAWrapper.h" #include "../common/Logger.h" #include "../reader/JFJochReader.h" #include "../writer/FileWriter.h" @@ -177,6 +178,9 @@ struct PipelineLocals { EndMessage &end_msg; std::optional &unmerged_experiment; std::future &unmerged_mtz; + // What the main line holds through its merge (RunPipeline), for the merge to say how much of the card + // it holds once that is known; null in a probe pass. + GPUMerge *gpu_merge = nullptr; // The canonical pass's post-refinement fit, run beside its merge chain (ScaleMergeAndSymmetry) // and joined by RunPipeline when that returns: its log lines and notes wait in these until then. Logger postrefine_log = Logger::Buffered(); diff --git a/rugnux/RugnuxScaleMerge.cpp b/rugnux/RugnuxScaleMerge.cpp index 658fadb27..6ec378d7e 100644 --- a/rugnux/RugnuxScaleMerge.cpp +++ b/rugnux/RugnuxScaleMerge.cpp @@ -1151,10 +1151,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { guard_log.ReplayInto(logger); } rsm->IngestDevice(); - release_gather(); const int32_t cards = get_gpu_count(); - engine_log.ReplayInto(logger); - rsm->SetLogger(logger); // On a card of its own from three cards up (card 0 has this engine, card 1 the quality guard's // and the speculative passes). Otherwise on the last card, beside the engine already there - // this one, or the guard's, which merges at most as many observations - and only where two @@ -1164,17 +1161,28 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { // holds more, but a merge that does not fit beside it waits for it to end. On a 16 GB card that // is the data sets up to about 90 M observations at high multiplicity; the large ones merge // their arms one after the other. - if (!geometry_prepass && !experiment_.GetGemmiSpaceGroup().has_value() && rsm->GetSearchMinZeta() > 0.0 - && cards > 0 && rsm->OnGPU()) { - const int32_t device = std::min(cards - 1, 2); - constexpr size_t CARD_BYTES_RESERVED = size_t(3) << 30; - if (cards >= 3 - || 2 * rsm->DeviceBytes() + CARD_BYTES_RESERVED <= get_gpu_total_memory(device)) { - rsm_all = rsm->CloneIngest(device, all_arm_log); - rsm_all->SetSearchMinZeta(0.0); - rsm_all->SetExportScaledFulls(false); // as scale_and_merge sets them for a search merge - rsm_all->SetFrenchWilson(false); - } + const int32_t all_arm_device = std::min(cards - 1, 2); + constexpr size_t CARD_BYTES_RESERVED = size_t(3) << 30; + const bool all_arm = !geometry_prepass && !experiment_.GetGemmiSpaceGroup().has_value() + && rsm->GetSearchMinZeta() > 0.0 && cards > 0 && rsm->OnGPU() + && (cards >= 3 || 2 * rsm->DeviceBytes() + CARD_BYTES_RESERVED + <= get_gpu_total_memory(all_arm_device)); + // What the merge holds of the card from here on - this engine and the arm's - said before the + // post-refinement is let go: a speculative probe it starts runs beside the merge only where both + // fit the card (GPUMerge). Counted as if on one card. + if (p.gpu_merge) { + const size_t merge_bytes = rsm->OnGPU() ? (all_arm ? 2 : 1) * rsm->DeviceBytes() : 0; + logger.Debug("Merge on the GPU: {:.2f} GB", merge_bytes / 1e9); + p.gpu_merge->Holds(merge_bytes); + } + release_gather(); + engine_log.ReplayInto(logger); + rsm->SetLogger(logger); + if (all_arm) { + rsm_all = rsm->CloneIngest(all_arm_device, all_arm_log); + rsm_all->SetSearchMinZeta(0.0); + rsm_all->SetExportScaledFulls(false); // as scale_and_merge sets them for a search merge + rsm_all->SetFrenchWilson(false); } if (rsm_all) { // Its observations are copied from this engine's card arrays, not staged from the @@ -4018,6 +4026,14 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { census_future.wait(); } p.indexer_pool.reset(); + // The model's GPU budget is 80% of the card less what the merge still holds, so from here the merge + // holds the card: a speculative probe not started yet waits for it to end (GPUMerge), and one let + // beside it is waited for. That is a probe pass of seconds: this long means it is stuck, and the + // model goes on as it would have without it. + if (p.gpu_merge) + p.gpu_merge->Holds(get_gpu_total_memory(0)); + TimingMark beside_mark(logger, "GPU work beside wait (model)"); + wait_for_gpu_work_beside(std::chrono::minutes(10)); } if (model_run && !model_predicted && !config_.force_mr) { phase("Validating against model"); diff --git a/tests/CUDAMemHelpersTest.cpp b/tests/CUDAMemHelpersTest.cpp index 33b59cb0f..b1aa58319 100644 --- a/tests/CUDAMemHelpersTest.cpp +++ b/tests/CUDAMemHelpersTest.cpp @@ -408,21 +408,38 @@ TEST_CASE("GPUWorkBeside_WaitEndsWithTheWork", "[CUDAMemHelpers]") { ends.join(); } -// The speculative geometry probe waits for the main line's merge on a card too small for both, and on a -// larger one runs beside it; the rest of the work beside never waits for a merge. -TEST_CASE("GPUWorkBeside_AfterMergesTakesTurnsOnASmallCard", "[CUDAMemHelpers]") { - // As take_turns() in CUDAWrapper.cpp. - const bool small = get_gpu_count() > 0 && get_gpu_total_memory(0) < 12'000'000'000ull; +// The speculative geometry probe waits for the main line's merge until the merge has said how much of the +// card it holds, and then only where the two do not fit within 80% of the card's total; the rest of the +// work beside never waits for a merge. With no card there is nothing to wait for. +TEST_CASE("GPUWorkBeside_AfterMergesWaitsWhereTheBytesDoNotFit", "[CUDAMemHelpers]") { + const bool card = get_gpu_count() > 0; + // A probe started on a thread of its own; true once it is past its wait. + const auto start_probe = [](size_t bytes, std::atomic &started) { + return std::thread([bytes, &started] { + GPUWorkBeside beside(/*after_merges=*/true, bytes); + started = true; + }); + }; std::optional merge(std::in_place); { GPUWorkBeside other; } // does not wait + // Not said yet: it waits, and starts once the merge says it holds nothing. std::atomic started = false; - std::thread probe([&started] { - GPUWorkBeside beside(/*after_merges=*/true); - started = true; - }); - if (small) { + std::thread probe = start_probe(1, started); + if (card) { + std::this_thread::sleep_for(std::chrono::milliseconds(200)); + CHECK_FALSE(started); + } + merge->Holds(0); + probe.join(); + CHECK(started); + + // The merge holds the whole card: it waits until the merge ends. + merge->Holds(get_gpu_total_memory(0)); + started = false; + probe = start_probe(1, started); + if (card) { std::this_thread::sleep_for(std::chrono::milliseconds(200)); CHECK_FALSE(started); } -- 2.54.0 From dccbf8b1daaa0159cd1e15f4d1b0c65af6df1310 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 12:42:00 +0200 Subject: [PATCH 26/81] Reflection files: the mmCIF and SHELX numbers formatted with std::to_chars Writing the merged reflections - p.mtz, p.cif, p.hkl, ~250 MB for 4nwv - takes 5.3 s on the Windows laptop against 0.46 s on Linux. The mmCIF rows (twelve "%.4f" fields each) and the HKLF 4 records (two "%.2f") are formatted with snprintf, ~50 M calls for 4nwv; the likely Windows cost is the MSVC runtime's printf (slower float formatting, locale handling per call) - not measured there yet. Fmt and the HKLF 4 number now go through std::to_chars(fixed, precision) where the standard library has it for floating point (__cpp_lib_to_chars: libstdc++ 11+, MSVC); libc++ before macOS 13.3 does not, and keeps snprintf. The same digits: both round the exact binary value correctly, halfway cases to even. Checked against glibc on 20 M float-valued doubles at 4 and 2 decimals and on 8 M exact binary fractions (every tie), 0 differences. On this machine (gcc-toolset-13) 52 against 194 ns a field. p.hkl, the MTZ data and p.cif (apart from its provenance lines) byte-identical. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- image_analysis/WriteReflections.cpp | 31 +++++++++++++++++++---------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/image_analysis/WriteReflections.cpp b/image_analysis/WriteReflections.cpp index faf3b5075..22bfb3e1c 100644 --- a/image_analysis/WriteReflections.cpp +++ b/image_analysis/WriteReflections.cpp @@ -9,6 +9,7 @@ #include "../common/ParallelFor.h" #include +#include #include #include #include @@ -45,16 +46,28 @@ std::string CurrentDateISO() { return buf; } +/// The C locale's "%.*f" of a finite double. std::to_chars where the standard library has it for +/// floating point: the same digits - both round the exact binary value, halfway cases to even - at a +/// quarter of snprintf's time, and with no locale to consult. snprintf elsewhere (libc++ before macOS +/// 13.3). 512 characters hold any finite double. +std::string FixedDigits(double val, int decimals) { + char buf[512]; +#ifdef __cpp_lib_to_chars + const auto r = std::to_chars(buf, buf + sizeof(buf), val, std::chars_format::fixed, decimals); + return std::string(buf, r.ptr); +#else + const int n = std::snprintf(buf, sizeof(buf), "%.*f", decimals, val); + return std::string(buf, n); +#endif +} + /// Format a double with given decimal places; returns "?" for non-finite. -/// snprintf rather than an ostringstream: the reflection loop below calls this twelve times per -/// reflection, and building a stream (and its locale) per call dominated the time spent writing a -/// merged file. Same digits - both go through the C locale's %.*f. +/// Not an ostringstream: the reflection loop below calls this twelve times per reflection, and +/// building a stream (and its locale) per call dominated the time spent writing a merged file. std::string Fmt(double val, int decimals = 4) { if (!std::isfinite(val)) return "?"; - char buf[512]; - const int n = std::snprintf(buf, sizeof(buf), "%.*f", decimals, val); - return std::string(buf, n); + return FixedDigits(val, decimals); } /// Quote a CIF string value; returns "?" for empty. @@ -691,11 +704,7 @@ namespace { if (v.size() < width) s.append(width - v.size(), ' '); s.append(v); }; - const auto num2 = [](double v) { - char b[64]; - const int n = std::snprintf(b, sizeof b, "%.2f", v); - return std::string(b, static_cast(std::clamp(n, 0, static_cast(sizeof b) - 1))); - }; + const auto num2 = [](double v) { return FixedDigits(v, 2); }; column(std::to_string(h), 4); column(std::to_string(k), 4); column(std::to_string(l), 4); -- 2.54.0 From f117484592232ad0ca01991af34a7d0d0164b61e Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 12:43:20 +0200 Subject: [PATCH 27/81] GPU rotation prediction walks only the l of each column that can cross the Ewald sphere bragg_rot_kernel_3d ran one thread for every (h, k, l) of the box on every frame, while the CPU predictor already skips the l of an (h, k) column whose phi solution cannot lie within the rocking-curve test's reach (BraggPredictionRot: f(l) = |p0|^2 + 2 S0.p0 bounded by f_max, at most two intervals of l). The GPU predictor now walks the same l: - RotationColumnRange.h: the CPU predictor's phi limit and column bound, moved into a host/device header shared by both, unchanged in arithmetic except that the four divisions by 2 C*.C* are a product with its reciprocal (each end is widened by a whole index, which covers the rounding). - column_range_kernel: the l range of every column, one thread a column, in double; the column's b and c are evaluated as polynomials in h and k from coefficients set up on the host, and the blocks are 32 threads, because a consumer card runs double at a small fraction of the float rate on a unit the warps of a multiprocessor share (a warp per column with the range on lane 0 was slower than the whole box). - bragg_rot_kernel_columns: a warp per column, its l spread over the lanes; per (h, k, l) the same compute_reflections_rot. The output is sorted afterwards (OrderAndSelect), so the predictions and their order are those of the whole box. Kernel time on the RTX 5080 (nsys, whole run): 4nwv 1968 -> 415 ms (bragg 374 + ranges 41), myob 45.5 -> 49.9 ms (small box: the ranges cost more than they save there, ~4 ms a run). On the Windows laptop bragg_rot_kernel_3d was 9.4 s of 4nwv. BraggPredictionRotGPU_ColumnRangeKeepsEveryReflection: on 300 random lattices, geometries and rocking widths the pruned walk predicts bit for bit what the whole box does (the GPU twin of the CPU test). Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../bragg_prediction/BraggPredictionRot.cpp | 70 +++------- .../bragg_prediction/BraggPredictionRotGPU.cu | 122 ++++++++++++++---- .../bragg_prediction/BraggPredictionRotGPU.h | 11 ++ .../bragg_prediction/RotationColumnRange.h | 71 ++++++++++ tests/CalcBraggPredictionTest.cpp | 84 ++++++++++++ 5 files changed, 279 insertions(+), 79 deletions(-) create mode 100644 image_analysis/bragg_prediction/RotationColumnRange.h diff --git a/image_analysis/bragg_prediction/BraggPredictionRot.cpp b/image_analysis/bragg_prediction/BraggPredictionRot.cpp index 022d9e596..929b90a66 100644 --- a/image_analysis/bragg_prediction/BraggPredictionRot.cpp +++ b/image_analysis/bragg_prediction/BraggPredictionRot.cpp @@ -9,6 +9,7 @@ #include "../SensorAbsorption.h" #include "../bragg_integration/SystematicAbsence.h" #include "RockingSlice.h" +#include "RotationColumnRange.h" int BraggPredictionRot::Calc(const DiffractionExperiment &experiment, const CrystalLattice &lattice, @@ -82,29 +83,12 @@ int BraggPredictionRot::Calc(const DiffractionExperiment &experiment, const Crys geom.GetWavelength_A()); // The phi test after the atan2 below, taken before it: a solution with |phi| above phi_limit fails - // that test whatever its own bandwidth term, since mos_eff_rad is largest at the resolution limit. - // |phi| > phi_limit is cos(phi) < cos(phi_limit), which the (cos, sin) pair answers without the - // angle. phi_limit carries a 1e-3 rad margin, far above float rounding, so every solution rejected - // here is rejected by that test too. -1 = nothing is rejected here. - double cos_phi_limit = -1.0; - double phi_limit = -1.0; - if (settings.min_zeta > 0.0f) { - double mos_max_rad = mos_angle_rad; - if (bandwidth_sigma > 0.0f) { - const double sin_theta = half_wavelength_A * static_cast(one_over_dmax); - const double dphi_bw = sin_theta < 1.0 - ? bandwidth_sigma * sin_theta / std::sqrt(1.0 - sin_theta * sin_theta) - : INFINITY; - mos_max_rad = std::sqrt(mos_max_rad * mos_max_rad + dphi_bw * dphi_bw); - } - phi_limit = half_wedge_angle_rad - + (settings.mosaicity_multiplier * mos_max_rad + 1e-5) / settings.min_zeta - + 1e-3; - if (phi_limit < PI) - cos_phi_limit = std::cos(phi_limit); - else - phi_limit = -1.0; - } + // that test whatever its own bandwidth term (RotationPhiLimit). |phi| > phi_limit is + // cos(phi) < cos(phi_limit), which the (cos, sin) pair answers without the angle, so every solution + // rejected here is rejected by that test too. -1 = nothing is rejected here. + const double phi_limit = RotationPhiLimit(settings.min_zeta, mos_angle_rad, bandwidth_sigma, half_wavelength_A, + one_over_dmax, half_wedge_angle_rad, settings.mosaicity_multiplier); + const double cos_phi_limit = phi_limit > 0.0 ? std::cos(phi_limit) : -1.0; // Which l of an (h, k) column can pass that test at all, so the walk does not visit the rest of // the box. f(p0) = |p0|^2 + 2 S0.p0 is zero where p0 lies on the Ewald sphere, and rotating p0 by @@ -118,11 +102,7 @@ int BraggPredictionRot::Calc(const DiffractionExperiment &experiment, const Crys }; const double S0_perp = std::sqrt(std::max(0.0, dot(S0, S0) - static_cast(m2_S0) * m2_S0)); const double f_max = 1.01 * 2.0 * S0_perp * one_over_dmax * phi_limit; - const double C_C = dot(Cstar, Cstar), S0_C = dot(S0, Cstar); - // A root of the quadratic as an index, held inside the box first so the conversion cannot overflow. - auto to_l = [&](double v) { - return static_cast(std::clamp(v, -settings.max_l - 2.0, settings.max_l + 2.0)); - }; + const double C_C = dot(Cstar, Cstar), S0_C = dot(S0, Cstar), inv_2C_C = 1.0 / (2.0 * C_C); // p0 = A* h + B* k + C* l, evaluated as ((A* h) + (B* k)) + (C* l) exactly as before, with the // terms that do not change in the inner loops taken out of them. @@ -136,31 +116,17 @@ int BraggPredictionRot::Calc(const DiffractionExperiment &experiment, const Crys for (int k = -settings.max_k; k <= settings.max_k; k++) { const Coord AB = Astar_h + Bstar * k; - // The l of this column that can pass (above): f(l) = C_C l^2 + b l + c <= f_max on - // [l_lo, l_hi], and f(l) < -f_max strictly inside (skip_lo, skip_hi). - int l_lo = -settings.max_l, l_hi = settings.max_l; - int skip_lo = settings.max_l + 1, skip_hi = settings.max_l + 1; - if (phi_limit > 0.0 && !enumerate_full_box) { - const double b = 2.0 * (dot(AB, Cstar) + S0_C); - const double c = dot(AB, AB) + 2.0 * dot(S0, AB); - const double disc_hi = b * b - 4.0 * C_C * (c - f_max); - if (!(disc_hi >= 0.0)) - continue; - const double r_hi = std::sqrt(disc_hi); - l_lo = std::max(l_lo, to_l(std::ceil((-b - r_hi) / (2.0 * C_C))) - 1); - l_hi = std::min(l_hi, to_l(std::floor((-b + r_hi) / (2.0 * C_C))) + 1); - const double disc_lo = b * b - 4.0 * C_C * (c + f_max); - if (disc_lo > 0.0) { - const double r_lo = std::sqrt(disc_lo); - skip_lo = to_l(std::floor((-b - r_lo) / (2.0 * C_C))) + 2; - skip_hi = to_l(std::ceil((-b + r_lo) / (2.0 * C_C))) - 2; - } - } + // The l of this column that can pass (above). + RotationColumn col{-settings.max_l, settings.max_l, settings.max_l + 1, settings.max_l + 1}; + if (phi_limit > 0.0 && !enumerate_full_box + && !RotationColumnRange(C_C, inv_2C_C, 2.0 * (dot(AB, Cstar) + S0_C), + dot(AB, AB) + 2.0 * dot(S0, AB), f_max, settings.max_l, col)) + continue; - for (int l = l_lo; l <= l_hi; l++) { - if (l >= skip_lo && l <= skip_hi) - l = skip_hi + 1; - if (l > l_hi) + for (int l = col.l_lo; l <= col.l_hi; l++) { + if (l >= col.skip_lo && l <= col.skip_hi) + l = col.skip_hi + 1; + if (l > col.l_hi) break; if (systematic_absence(h, k, l, settings.centering)) continue; diff --git a/image_analysis/bragg_prediction/BraggPredictionRotGPU.cu b/image_analysis/bragg_prediction/BraggPredictionRotGPU.cu index 1e5d9a39f..0fb5e32a5 100644 --- a/image_analysis/bragg_prediction/BraggPredictionRotGPU.cu +++ b/image_analysis/bragg_prediction/BraggPredictionRotGPU.cu @@ -5,6 +5,7 @@ #include "../../common/JFJochMath.h" #include "BraggPredictionRotGPU.h" #include "RockingSlice.h" +#include "RotationColumnRange.h" #include "../SensorAbsorption.h" #ifdef JFJOCH_USE_CUDA @@ -231,28 +232,61 @@ namespace { return count; } - __global__ void bragg_rot_kernel_3d(const KernelConstsRot *__restrict__ kc, - int max_h, int max_k, int max_l, - int max_reflections, - Reflection *__restrict__ out, - int *__restrict__ counter) { - int hi = blockIdx.x * blockDim.x + threadIdx.x; - int ki = blockIdx.y * blockDim.y + threadIdx.y; - int li = blockIdx.z * blockDim.z + threadIdx.z; - if (hi > 2 * max_h || ki > 2 * max_k || li > 2 * max_l) return; - int h = hi - max_h; - int k = ki - max_k; - int l = li - max_l; + // The l of each (h, k) column that can pass the rocking-curve test (RotationColumnRange, as the CPU + // predictor walks them), one thread a column. In double, which a consumer card runs at a small + // fraction of the float rate and shares between the warps of a multiprocessor: so few operations a + // column, and small blocks to spread the columns over the multiprocessors. phi_limit <= 0 walks every + // l. A column with no l to walk gets l_lo > l_hi; an empty skip interval is moved out of the column. + __global__ void column_range_kernel(const KernelConstsRot *__restrict__ kc, int max_h, int max_k, int max_l, + RotationColumn *__restrict__ columns) { + const int column = blockIdx.x * blockDim.x + threadIdx.x; + if (column >= (2 * max_h + 1) * (2 * max_k + 1)) return; + const KernelConstsRot &C = *kc; + RotationColumn col{-max_l, max_l, max_l + 1, max_l + 1}; + if (C.phi_limit > 0.0) { + const double h = column / (2 * max_k + 1) - max_h; + const double k = column % (2 * max_k + 1) - max_k; + const double b = C.b0 + C.b_h * h + C.b_k * k; + const double c = (C.c_hh * h + C.c_hk * k + C.c_h) * h + (C.c_kk * k + C.c_k) * k; + if (!RotationColumnRange(C.C_C, C.inv_2C_C, b, c, C.f_max, max_l, col)) + col = {max_l + 1, max_l, max_l + 1, max_l + 1}; + if (col.skip_lo > col.skip_hi) + col.skip_lo = col.skip_hi = max_l + 1; + } + columns[column] = col; + } - Reflection r[2]; - int n = compute_reflections_rot(*kc, h, k, l, r); + // One (h, k) column per warp (a row of the block), its l spread over the warp's threads. The order + // the atomics place the reflections in does not matter, as OrderAndSelect sorts them. + __global__ void bragg_rot_kernel_columns(const KernelConstsRot *__restrict__ kc, + const RotationColumn *__restrict__ columns, + int max_h, int max_k, + int max_reflections, + Reflection *__restrict__ out, + int *__restrict__ counter) { + const int column = blockIdx.x * blockDim.y + threadIdx.y; + if (column >= (2 * max_h + 1) * (2 * max_k + 1)) return; + const int h = column / (2 * max_k + 1) - max_h; + const int k = column % (2 * max_k + 1) - max_k; + const RotationColumn col = columns[column]; - for (int i = 0; i < n; ++i) { - // Do NOT clamp the counter back down on overflow: it then saturates at the capacity and the - // host cannot tell a full buffer from an overflowing one. Let it count the true total. - const int pos = atomicAdd(counter, 1); - if (pos < max_reflections) - out[pos] = r[i]; + // The column's l as one list: [l_lo, skip_lo) and then (skip_hi, l_hi]. + const int first_end = min(col.l_hi, col.skip_lo - 1); + const int n_first = max(0, first_end - col.l_lo + 1); + const int second_start = max(col.l_lo, col.skip_hi + 1); + const int n = n_first + max(0, col.l_hi - second_start + 1); + + for (int j = threadIdx.x; j < n; j += blockDim.x) { + const int l = j < n_first ? col.l_lo + j : second_start + (j - n_first); + Reflection r[2]; + const int found = compute_reflections_rot(*kc, h, k, l, r); + for (int i = 0; i < found; ++i) { + // Do NOT clamp the counter back down on overflow: it then saturates at the capacity and the + // host cannot tell a full buffer from an overflowing one. Let it count the true total. + const int pos = atomicAdd(counter, 1); + if (pos < max_reflections) + out[pos] = r[i]; + } } } @@ -384,6 +418,29 @@ namespace { kc.m2_S0 = dot3(m2x, m2y, m2z, kc.S0.x, kc.S0.y, kc.S0.z); kc.m3_S0 = dot3(m3x, m3y, m3z, kc.S0.x, kc.S0.y, kc.S0.z); } + + // The bound on the l of a column, as the CPU predictor sets it up (BraggPredictionRot.cpp), with the + // column's terms as polynomials in h and k: b = 2 (AB.C* + S0.C*), c = AB.AB + 2 S0.AB, AB = h A* + k B*. + inline void BuildColumnBound(const BraggPredictionSettings &settings, KernelConstsRot &kc) { + const float one_over_dmax = 1.0f / settings.high_res_A; + kc.phi_limit = RotationPhiLimit(settings.min_zeta, kc.mos_angle_rad, kc.bandwidth_sigma, kc.half_wavelength_A, + one_over_dmax, kc.wedge_angle_rad / 2.0f, settings.mosaicity_multiplier); + auto dot = [](const Coord &a, const Coord &b) { + return static_cast(a.x) * b.x + static_cast(a.y) * b.y + static_cast(a.z) * b.z; + }; + const double S0_perp = std::sqrt(std::max(0.0, dot(kc.S0, kc.S0) - static_cast(kc.m2_S0) * kc.m2_S0)); + kc.f_max = 1.01 * 2.0 * S0_perp * one_over_dmax * kc.phi_limit; + kc.C_C = dot(kc.Cstar, kc.Cstar); + kc.inv_2C_C = 1.0 / (2.0 * kc.C_C); + kc.b0 = 2.0 * dot(kc.S0, kc.Cstar); + kc.b_h = 2.0 * dot(kc.Astar, kc.Cstar); + kc.b_k = 2.0 * dot(kc.Bstar, kc.Cstar); + kc.c_hh = dot(kc.Astar, kc.Astar); + kc.c_hk = 2.0 * dot(kc.Astar, kc.Bstar); + kc.c_kk = dot(kc.Bstar, kc.Bstar); + kc.c_h = 2.0 * dot(kc.S0, kc.Astar); + kc.c_k = 2.0 * dot(kc.S0, kc.Bstar); + } } // namespace BraggPredictionRotGPU::BraggPredictionRotGPU(int max_reflections) @@ -469,17 +526,28 @@ int BraggPredictionRotGPU::Calc(const DiffractionExperiment &experiment, const BraggPredictionSettings &settings) { KernelConstsRot hK = BuildKernelConstsRot(experiment, lattice, settings); BuildGoniometerBasis(experiment, hK); + BuildColumnBound(settings, hK); + if (enumerate_full_box) + hK.phi_limit = -1.0; cudaMemcpyAsync(dK, &hK, sizeof(KernelConstsRot), cudaMemcpyHostToDevice, stream); cudaMemsetAsync(d_count, 0, sizeof(int), stream); - // Inclusive on both ends, matching the kernel's own bounds and the CPU loops (-max_i .. +max_i). - dim3 block(8, 8, 8); - dim3 grid((2 * settings.max_h + 1 + block.x - 1) / block.x, - (2 * settings.max_k + 1 + block.y - 1) / block.y, - (2 * settings.max_l + 1 + block.z - 1) / block.z); + // Every (h, k) column, inclusive on both ends as the CPU loops (-max_i .. +max_i): the l of each to + // walk first, then a warp's worth of l per column, eight columns per block. + const int columns = (2 * settings.max_h + 1) * (2 * settings.max_k + 1); + if (columns > column_capacity) { + cudaStreamSynchronize(stream); + column_capacity = columns; + d_columns = CudaDevicePtr(columns); + } + column_range_kernel<<<(columns + 31) / 32, 32, 0, stream>>>(dK, settings.max_h, settings.max_k, settings.max_l, + d_columns); + cuda_err(cudaGetLastError()); + dim3 block(32, 8); + dim3 grid((columns + block.y - 1) / block.y); - bragg_rot_kernel_3d<<>>(dK, settings.max_h, settings.max_k, settings.max_l, max_reflections, d_out, d_count); + bragg_rot_kernel_columns<<>>(dK, d_columns, settings.max_h, settings.max_k, max_reflections, d_out, d_count); cuda_err(cudaGetLastError()); cudaMemcpyAsync(h_count, d_count, sizeof(int), cudaMemcpyDeviceToHost, stream); @@ -492,7 +560,7 @@ int BraggPredictionRotGPU::Calc(const DiffractionExperiment &experiment, // so a run pays for this a handful of times at most. GrowCapacity(count); cudaMemsetAsync(d_count, 0, sizeof(int), stream); - bragg_rot_kernel_3d<<>>(dK, settings.max_h, settings.max_k, settings.max_l, max_reflections, d_out, d_count); + bragg_rot_kernel_columns<<>>(dK, d_columns, settings.max_h, settings.max_k, max_reflections, d_out, d_count); cuda_err(cudaGetLastError()); cudaMemcpyAsync(h_count, d_count, sizeof(int), cudaMemcpyDeviceToHost, stream); cudaStreamSynchronize(stream); diff --git a/image_analysis/bragg_prediction/BraggPredictionRotGPU.h b/image_analysis/bragg_prediction/BraggPredictionRotGPU.h index ffafcadea..63ea227cc 100644 --- a/image_analysis/bragg_prediction/BraggPredictionRotGPU.h +++ b/image_analysis/bragg_prediction/BraggPredictionRotGPU.h @@ -6,6 +6,7 @@ #include #include "BraggPrediction.h" +#include "RotationColumnRange.h" #include "../indexing/CUDAMemHelpers.h" struct KernelConstsRot { @@ -34,6 +35,10 @@ struct KernelConstsRot { float m3_S0; float rot[9]; char centering; + // Which l of a column the kernel walks (RotationColumnRange): phi_limit <= 0 walks them all. The + // column's b(h, k) = b0 + b_h h + b_k k and c(h, k) = c_hh h^2 + c_hk h k + c_kk k^2 + c_h h + c_k k. + double phi_limit, f_max, C_C, inv_2C_C; + double b0, b_h, b_k, c_hh, c_hk, c_kk, c_h, c_k; }; class BraggPredictionRotGPU : public BraggPrediction { @@ -53,6 +58,10 @@ class BraggPredictionRotGPU : public BraggPrediction { CudaDevicePtr d_sort_temp; size_t sort_temp_bytes = 0; + // Which l of each (h, k) column the kernel walks (column_range_kernel). + CudaDevicePtr d_columns; + int column_capacity = 0; + // Dedicated stream CudaStream stream; @@ -74,6 +83,8 @@ public: protected: void GrowCapacity(int count) override; + // Walk every l of every column, as BraggPredictionRot's flag of the same name - for the test. + bool enumerate_full_box = false; public: int Calc(const DiffractionExperiment &experiment, diff --git a/image_analysis/bragg_prediction/RotationColumnRange.h b/image_analysis/bragg_prediction/RotationColumnRange.h new file mode 100644 index 000000000..c97a573df --- /dev/null +++ b/image_analysis/bragg_prediction/RotationColumnRange.h @@ -0,0 +1,71 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +// Which l of an (h, k) column a rotation predictor needs to walk, shared by the CPU and the GPU predictor +// (BraggPredictionRot.cpp explains the bound) so that both walk the same l. + +#include + +#include "../../common/JFJochMath.h" + +#ifdef __CUDACC__ +#define ROTATION_COLUMN_HD __host__ __device__ inline +#else +#define ROTATION_COLUMN_HD inline +#endif + +// The largest |phi| at which a solution can still pass the rocking-curve test: a solution further from +// the frame has zeta (|phi| - half wedge) above the test's limit for every zeta >= min_zeta, the rocking +// width being largest at the resolution limit. With a 1e-3 rad margin, far above float rounding. +// -1 = nothing is bounded (no min_zeta, or a bound past pi). +ROTATION_COLUMN_HD double RotationPhiLimit(float min_zeta, float mos_angle_rad, float bandwidth_sigma, + float half_wavelength_A, float one_over_dmax, + float half_wedge_angle_rad, float mosaicity_multiplier) { + if (!(min_zeta > 0.0f)) + return -1.0; + double mos_max_rad = mos_angle_rad; + if (bandwidth_sigma > 0.0f) { + const double sin_theta = half_wavelength_A * static_cast(one_over_dmax); + const double dphi_bw = sin_theta < 1.0 + ? bandwidth_sigma * sin_theta / sqrt(1.0 - sin_theta * sin_theta) + : INFINITY; + mos_max_rad = sqrt(mos_max_rad * mos_max_rad + dphi_bw * dphi_bw); + } + const double phi_limit = half_wedge_angle_rad + (mosaicity_multiplier * mos_max_rad + 1e-5) / min_zeta + 1e-3; + return phi_limit < PI ? phi_limit : -1.0; +} + +// The l of a column to walk: f(l) = C_C l^2 + b l + c <= f_max on [l_lo, l_hi], and f(l) < -f_max strictly +// inside (skip_lo, skip_hi), which may be empty. False where no l of the column can pass. inv_2C_C is +// 1 / (2 C_C): a product rather than four divisions, which on a GPU are each a sequence of double +// operations; the whole-index widening of each end covers the difference in rounding. +struct RotationColumn { + int l_lo, l_hi, skip_lo, skip_hi; +}; + +ROTATION_COLUMN_HD bool RotationColumnRange(double C_C, double inv_2C_C, double b, double c, double f_max, + int max_l, RotationColumn &col) { + // A root of the quadratic as an index, held inside the box first so the conversion cannot overflow. + const auto to_l = [max_l](double v) { + const double lo = -max_l - 2.0, hi = max_l + 2.0; + return static_cast(v < lo ? lo : (v > hi ? hi : v)); + }; + col = {-max_l, max_l, max_l + 1, max_l + 1}; + const double disc_hi = b * b - 4.0 * C_C * (c - f_max); + if (!(disc_hi >= 0.0)) + return false; + const double r_hi = sqrt(disc_hi); + const int lo = to_l(ceil((-b - r_hi) * inv_2C_C)) - 1; + const int hi = to_l(floor((-b + r_hi) * inv_2C_C)) + 1; + col.l_lo = lo > col.l_lo ? lo : col.l_lo; + col.l_hi = hi < col.l_hi ? hi : col.l_hi; + const double disc_lo = b * b - 4.0 * C_C * (c + f_max); + if (disc_lo > 0.0) { + const double r_lo = sqrt(disc_lo); + col.skip_lo = to_l(floor((-b - r_lo) * inv_2C_C)) + 2; + col.skip_hi = to_l(ceil((-b + r_lo) * inv_2C_C)) - 2; + } + return true; +} diff --git a/tests/CalcBraggPredictionTest.cpp b/tests/CalcBraggPredictionTest.cpp index d9ef3bb74..918ef1abd 100644 --- a/tests/CalcBraggPredictionTest.cpp +++ b/tests/CalcBraggPredictionTest.cpp @@ -877,6 +877,90 @@ TEST_CASE("BraggPrediction_CPU_GPU_consistency_large_cell") { } } +namespace { + class BraggPredictionRotGPUFullBox : public BraggPredictionRotGPU { + public: + BraggPredictionRotGPUFullBox() { enumerate_full_box = true; } + }; +} + +TEST_CASE("BraggPredictionRotGPU_ColumnRangeKeepsEveryReflection") { + if (get_gpu_count() == 0) + SKIP("No CUDA GPU present"); + // The GPU counterpart of BraggPredictionRot_ColumnRangeKeepsEveryReflection: the kernel walking only + // the l of each column that can pass predicts bit for bit what it does walking the whole box. + std::mt19937 rng(20261017); + std::uniform_real_distribution u(0.0f, 1.0f); + auto unit = [&] { + while (true) { + const Coord v(2 * u(rng) - 1, 2 * u(rng) - 1, 2 * u(rng) - 1); + if (v.Length() > 0.1f && v.Length() < 1.0f) return v.Normalize(); + } + }; + const char centerings[] = {'P', 'I', 'C', 'F', 'R', 'A'}; + BraggPredictionRotGPU pred; + BraggPredictionRotGPUFullBox full; + pred.output_limit = full.output_limit = 1000000; + int cases = 0, predicted = 0; + while (cases < 300) { + const Coord a = unit() * (5.0f + 195.0f * u(rng)); + const Coord b = unit() * (5.0f + 195.0f * u(rng)); + const Coord c = unit() * (5.0f + 195.0f * u(rng)); + if (std::fabs(a * (b % c)) < 0.3f * a.Length() * b.Length() * c.Length()) + continue; // too flat a cell + const CrystalLattice lattice(a, b, c); + + DiffractionExperiment experiment(DetJF4M()); + experiment.DetectorDistance_mm(50.0f + 350.0f * u(rng)) + .BeamX_pxl(2068.0f * u(rng)).BeamY_pxl(2164.0f * u(rng)) + .PoniRot1_rad(0.3f * (u(rng) - 0.5f)).PoniRot2_rad(0.3f * (u(rng) - 0.5f)) + .IncidentEnergy_keV(6.0f + 19.0f * u(rng)); + const float wedge_deg = 0.01f + 2.0f * u(rng); + experiment.Goniometer(GoniometerAxis("omega", 360.0f * u(rng), wedge_deg, unit(), {})); + + const float longest = std::max({a.Length(), b.Length(), c.Length()}); + BraggPredictionSettings settings{ + .high_res_A = std::max(0.7f + 3.0f * u(rng), longest / 100.0f), + .max_h = 0, .max_k = 0, .max_l = 0, + .centering = centerings[rng() % 6], + .wedge_deg = wedge_deg, + .mosaicity_deg = 0.01f + u(rng), + .min_zeta = u(rng) < 0.2f ? 0.0f : 0.01f + 0.2f * u(rng), + .mosaicity_multiplier = 2.0f + 4.0f * u(rng), + .bandwidth_sigma = u(rng) < 0.5f ? 0.0f : 0.01f * u(rng) + }; + settings.max_h = static_cast(std::ceil(a.Length() / settings.high_res_A)); + settings.max_k = static_cast(std::ceil(b.Length() / settings.high_res_A)); + settings.max_l = static_cast(std::ceil(c.Length() / settings.high_res_A)); + + const int n = pred.Calc(experiment, lattice, settings); + const int n_full = full.Calc(experiment, lattice, settings); + INFO("case " << cases); + REQUIRE(n == n_full); + for (int i = 0; i < n; i++) { + const auto &x = pred.GetReflections()[i]; + const auto &y = full.GetReflections()[i]; + REQUIRE(x.h == y.h); + REQUIRE(x.k == y.k); + REQUIRE(x.l == y.l); + REQUIRE(x.delta_phi_deg == y.delta_phi_deg); + REQUIRE(x.predicted_x == y.predicted_x); + REQUIRE(x.predicted_y == y.predicted_y); + REQUIRE(x.d == y.d); + REQUIRE(x.dist_ewald == y.dist_ewald); + REQUIRE(x.prescaling_corr == y.prescaling_corr); + REQUIRE(x.qe_corr == y.qe_corr); + REQUIRE(x.flight_corr == y.flight_corr); + REQUIRE(x.partiality == y.partiality); + REQUIRE(x.zeta == y.zeta); + REQUIRE(x.image_scale_corr == y.image_scale_corr); + } + predicted += n; + cases++; + } + CHECK(predicted > 0); +} + TEST_CASE("BraggPredictionRotGPU_DeviceOrderMatchesHost") { if (get_gpu_count() == 0) SKIP("No CUDA GPU present"); -- 2.54.0 From 7c1befd4848b1f6004ea22f0f0e47caac2693b11 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 13:01:11 +0200 Subject: [PATCH 28/81] SearchSpaceGroup: ask the twin-immune zone of a lattice-holohedral candidate too, and do not read centring absences as screws RESULT-CHANGING. A tetragonal crystal in 4 twinned ~0.3 by k,h,-l (3r6o, I4_1) was merged in I4_122. Since the beam-stop fix both search arms passed 422 (H ratio 1.51 < 1.85); before it the Lorentz-filtered arm refused at 2.13x and was overridden by the all-observation arm. Either way the twin-immune zone - the one reading a twin cannot fake - was never asked: the Stage A zone gate skipped any candidate that holds every rotation of its lattice, on the argument that no twin law exists for such a group. But the subgroup's twin law is one of the candidate's own operators, so the holohedral promotion is exactly the commonest merohedral-twin case (4 -> 422, 3 -> 32 on a rhombohedral lattice, 321 -> 622), and the L-test-under-merge gate leaves such a twin in the higher group by design. The gate now runs whenever the P1 merge reads twinned (<|L|> in [0.375, 0.44)), holohedral or not. 3r6o reads 422 over 4 at -58 nats (acentric). With 422 refused, the all-observation arm took 222 over 4: the same-order tie-break credits a group's axial two-folds with the screw evidence of their rows, and on a body-centred crystal the I centring kills the odd class of every principal row (30 nats each), so a 222 of the real 2-fold plus two twin laws beat the crystal's own 4. Rows whose odd class a centring extinguishes are no longer counted where the merge reads that centring on its general reflections (the centring class at < 0.25 of the rest's mean E^2; measured 0.11-0.13 for I on 3r6o, 0.97-1.00 for the absent centrings). Changed (CPU screen of 53 sets against the kept rc175 run 20261016-0057, plus 3r6o): - 3r6o: I4_122 -> I4_1 (deposited I4_1), TWINNING INDICATED, twin law h,-k,-l ~0.32; ISa 4.15 -> 7.77, R_meas 0.218 -> 0.146, CC1/2 0.989 -> 0.993. - 8c3e: P622 -> P321 with P3_121 | P3_221 as alternatives, screw on c undetermined (deposited P3_121, twinned): 622 refused at -70.8 nats; ISa 5.69 -> 6.91. Unchanged: 3mc4, 5j23, 6toc, 6oww, 6iu5/6/9, 2wnn, 2xfw, 4bwl, 5ebi, 2wnq, 6vww, 7k1l, 6pxb, 8xte, 8xtg, 9i80, 5uth, 6h5t, 8k1g, 6moj, 7kcn, 5vml, 3p85, 7rji, 8xtf, 9h0q, 7l84, 6v2r, 7t5t, 5m17, 6p8p, 3meb, 5cc8, 9lxl, 8v4j, 6zqr, 9fcf, 5src, 11if, cuhf2, lyso_x06da_ref, lyso_x10sa_90deg_1, thau_x10sa_16keV, thau_bl1a_6p5keV, insu_H_x06da_twin/notwin, insu_I_x06da_ref, cytc_x06da_1, myob_x06da_split, kdp_x10sa_20keV (space group identical, ISa within run noise; 7l84/5src/11if differ only by the model-adopted enantiomorph label). Test: a body-centred 4 twinned at 0.45, given its cell, stays in 4 (222 without the centring rule). [SearchSpaceGroup], [twinning], [twin] pass. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- docs/CPU_DATA_ANALYSIS_DECISIONS.md | 2 +- .../scale_merge/SearchSpaceGroup.cpp | 58 ++++++++++++++++--- tests/SearchSpaceGroupTwinTest.cpp | 23 ++++++++ 3 files changed, 75 insertions(+), 8 deletions(-) diff --git a/docs/CPU_DATA_ANALYSIS_DECISIONS.md b/docs/CPU_DATA_ANALYSIS_DECISIONS.md index 4909193e1..08c19ca5b 100644 --- a/docs/CPU_DATA_ANALYSIS_DECISIONS.md +++ b/docs/CPU_DATA_ANALYSIS_DECISIONS.md @@ -50,7 +50,7 @@ Both search merges also drop the **frames whose fitted per-frame scale came out **A confirmed promotion that is refused is decided by the twin-immune zone of its added operators, and only where that is undecided by merging under it.** The zone (§13.2) is the one reading that does not depend on the per-frame scales or on a reference operator: read on the all-observation P1 merge where the two search arms disagree, and on the adopted group's own merge at the remerge, an index-2 promotion whose calibrated zone evidence is acentric by 20 nats stays refused — on all observations, and the first added operator is recorded as the twin law — and one whose zone is centric by 20 nats is taken. Where the zone cannot decide (a higher index, no zone reflections in the shells with signal, within the margin), the merge is asked. Every gate that refuses a *confirmed* higher point group is a **ratio** — the added operators' disagreement against the parent's, or their $R$ against the best-agreeing operator anywhere — and both references are properties of how the crystal was mounted rather than of its symmetry. A 2-fold within a degree of the spindle records its mates on the same detector pixel half a turn later, so it carries no geometry-dependent systematic at all, and by being that clean it makes every other operator look bad against it; the best-agreeing operator can also be one of the operators under test, which collapses the ratio on worse data and raises it on better. So where a promotion is confirmed and then refused, the **merge** is asked instead of the ratio. Both groups are scaled and merged over one pinned resolution range — the adopted group's own cut — and the promotion is taken only if **neither $R_\mathrm{meas}$ nor ISa gets worse**. $R_\mathrm{meas}$ is multiplicity-corrected, so folding non-equivalent reflections together has to inflate it, and the error model is refitted per merge, so ISa says whether the extra multiplicity was bought with systematic disagreement. $CC_{1/2}$ and $\langle I/\sigma\rangle$ cannot arbitrate this: both *rise* on a false promotion too. Two details the comparison turns on: the refused point group's representative is primitive and symmorphic, so the arm merged under it takes the **adopted group's centring** — merged in the bare representative, a centred crystal is handed its centring-absent class as data, which inverts the decision — and the absence stage is asked of the adopted merge, so both arms carry the same absence classes and differ by the added rotations alone. That merge no longer holds the adopted group's screw-absent axial reflections, so the higher group also **keeps the screws the adopted group decided** — among the higher candidates the merge cannot separate, the one that predicts every such axial absence is taken — rather than the lowest-numbered one, which claims none. The cost is two extra merges, and only on a run that records a refusal, which is a few in a hundred. -**On a merge that reads twinned, the search asks the zone itself.** A twin of an index-2 subgroup by exactly the operators a promotion adds defeats every agreement gate once its fraction is high — the added operators then agree like real ones — so where the P1 merge's $\langle|L|\rangle$ lies in the partial-twin band (0.375 to 0.44) and the candidate does not hold every rotation of its lattice (so a twin law outside it is possible), the candidate is refused when the twin-immune zone of one of its index-2 subgroups reads acentric by 20 nats. Below 0.375 something other than a twin compresses the intensities, the zones with them, and they are not read. A $P3_1$ crystal twinned at $\alpha \ge 0.4$ by its 321 law, whose 32 promotion every agreement gate passed, reads −230 nats there. +**On a merge that reads twinned, the search asks the zone itself.** A twin of an index-2 subgroup by exactly the operators a promotion adds defeats every agreement gate once its fraction is high — the added operators then agree like real ones — so where the P1 merge's $\langle|L|\rangle$ lies in the partial-twin band (0.375 to 0.44), the candidate is refused when the twin-immune zone of one of its index-2 subgroups reads acentric by 20 nats. That holds for a candidate that is the whole symmetry of its lattice too: the subgroup's twin law is one of the candidate's own operators, so a crystal in 4 twinned by $k,h,\bar{l}$ is exactly such a twin of 422. Below 0.375 something other than a twin compresses the intensities, the zones with them, and they are not read. A $P3_1$ crystal twinned at $\alpha \ge 0.4$ by its 321 law, whose 32 promotion every agreement gate passed, reads −230 nats there; a body-centred crystal in 4 twinned at about 0.3, promoted to 422 at an $H$ ratio of 1.51, −58 nats. Between two candidates of the same order the one whose own two-folds carry screw absences is preferred, but an axial row whose odd class a lattice centring extinguishes is not counted where the merge reads that centring in its general reflections: on a body-centred crystal every principal row reads extinct whatever the two-folds are, which would hand 222 the tie over 4. **A point group's own operators must agree with each other.** A point group is the claim that all of its operators are symmetries of one crystal, and a mixture of real and false operators has a specific shape: the real ones form a subgroup — the true group's intersection with the candidate — and everything outside it is false. The gate therefore reads the operators sorted by their $R$ against the merge, finds every prefix that closes into a subgroup, and takes the largest factor by which every operator outside such a subgroup reads worse than every operator inside it; above 3.2 the candidate is refused. A genuine group whose operators merely spread over a continuum — anisotropic systematic error spreads a cubic crystal's operators twofold — has no such gap. The earlier form, worst-agreeing over best-agreeing operator, divided by an extreme order statistic and refused a genuine $432$ as soon as one of its operators happened to agree unusually well. diff --git a/image_analysis/scale_merge/SearchSpaceGroup.cpp b/image_analysis/scale_merge/SearchSpaceGroup.cpp index 59a9c3630..7625c9d39 100644 --- a/image_analysis/scale_merge/SearchSpaceGroup.cpp +++ b/image_analysis/scale_merge/SearchSpaceGroup.cpp @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -1693,6 +1694,46 @@ SearchSpaceGroupResult SearchSpaceGroup( // row is the crystal's and the other is the twin law that out-correlated it. // Only a row whose axis is a two-fold and nothing more: on a 3-, 4- or 6-fold axis the odd class // is not what the screw extinguishes (a 3_1 keeps l = 3, 9, ... strong), so it says nothing here. + // Nor a row a lattice centring extinguishes, where the merge reads that centring: an I lattice + // kills the odd class of all three principal rows whatever the two-folds are, so on a primitive + // merge of a body-centred crystal every two-fold along an axis read "screwed", and a 222 made of + // a real 2-fold and two twin laws out-scored the crystal's own 4 (a tetragonal twin, 30 nats on + // each row). The centring is read on the general reflections, where no screw reaches. + using Extinction = bool (*)(int, int, int); + std::optional> centrings_read; + const auto row_extinct_by_centring = [&](const AxialRow& row) { + if (!centrings_read) { + const Extinction centrings[] = { + [](int h, int k, int l) { return (h + k + l) % 2 != 0; }, // I + [](int, int k, int l) { return (k + l) % 2 != 0; }, // A + [](int h, int, int l) { return (h + l) % 2 != 0; }, // B + [](int h, int k, int) { return (h + k) % 2 != 0; }, // C + [](int h, int k, int l) { return (h + k) % 2 != 0 || (h + l) % 2 != 0; }}; // F + centrings_read.emplace(); + for (const auto& absent : centrings) { + double sum_absent = 0.0, sum_present = 0.0; + int n_absent = 0, n_present = 0; + for (size_t i = 0; i < n; ++i) { + if (!pass_absence[i] || (H[i] == 0) + (K[i] == 0) + (L[i] == 0) >= 2) + continue; + if (absent(H[i], K[i], L[i])) { + sum_absent += Esq[i]; + ++n_absent; + } else { + sum_present += Esq[i]; + ++n_present; + } + } + // A primitive lattice leaves the class at the mean of the rest (0.97-1.00 measured); a + // real centring at noise, which a weak, high-background body-centred crystal still + // reads at 0.11-0.13 of it. + if (n_absent >= 50 && n_present >= 50 && sum_absent / n_absent < 0.25 * (sum_present / n_present)) + centrings_read->push_back(absent); + } + } + return std::any_of(centrings_read->begin(), centrings_read->end(), + [&](const auto& absent) { return absent(row[0], row[1], row[2]); }); + }; const auto screwed_two_folds = [&](const PointGroupInfo& pg) { const auto is_two_fold = [](const gemmi::Op& op) { return op.rot != gemmi::Op::identity().rot && op.combine(op).rot == gemmi::Op::identity().rot; @@ -1704,7 +1745,7 @@ SearchSpaceGroupResult SearchSpaceGroup( for (const auto& rot : pg.rotations) if (rot.rot != gemmi::Op::identity().rot && rot.apply_to_hkl(hkl) == hkl) (is_two_fold(rot) ? two_fold : higher) = true; - if (two_fold && !higher) + if (two_fold && !higher && !row_extinct_by_centring(row)) total += row_screw_evidence(row); } return total; @@ -1959,10 +2000,12 @@ SearchSpaceGroupResult SearchSpaceGroup( if (l_refused) consistent = false; - // Twin-immune zone test, for a group that is NOT the whole symmetry of its lattice, on a merge - // that reads twinned: the other half of the twin argument. Where a lattice operation lies - // outside the candidate, a twin of one of its index-2 subgroups by exactly the operators the - // candidate adds over it is possible, and at a high twin fraction it defeats every gate above - + // Twin-immune zone test, on a merge that reads twinned: the other half of the twin argument. A + // twin of one of the candidate's index-2 subgroups by exactly the operators the candidate adds + // over it is possible wherever those operators are lattice operations - which they always are, + // the whole symmetry of the lattice included: a tetragonal crystal in 4 twinned by k,h,-l is the + // commonest case of all, and the L-test gate above leaves it in 422 by design (a twin of the + // subgroup closes 0.19-0.30 of the gap). At a high twin fraction such a twin defeats every gate above - // the added operators then agree like real ones (H, R, chi^2 all read "real"), which is the // theorem that no statistic of the operators' agreement separates a near-perfect twin from the // higher group. What it cannot fake are the reflections centric in the candidate but not in the @@ -1975,7 +2018,8 @@ SearchSpaceGroupResult SearchSpaceGroup( // - Measured: a P3_1 crystal twinned at 0.4 or more by its 321 law, whose 32 promotion every // gate above passed (contrast 0.87, H ratio 0.97), reads -230 nats; a genuine P3_121 // crystal twinned by a 622 law, read at its other law's fraction 0.07, +209 (-206 read - // untwinned, which is why the fraction is read). + // untwinned, which is why the fraction is read). A body-centred tetragonal crystal in 4 + // twinned ~0.3 by k,h,-l, promoted to 422 at an H ratio of 1.51, reads -58 nats over 4. // - Only on a merge whose L-test reads twinned (merge_reads_twinned, on the P1 merge before any // promotion): without twinning a twin law cannot pass the gates above, and a crystal that is // not twinned is not asked a twin's question. Below the perfect twin's 0.375 something other @@ -1987,7 +2031,7 @@ SearchSpaceGroupResult SearchSpaceGroup( std::string zone_operators; double zone_evidence = 0.0; if (consistent && !c.pg->rotations.empty() && c.pg->representative && opt.cell.has_value() - && lattice_rotations && !holds_lattice && merge_reads_twinned()) { + && lattice_rotations && merge_reads_twinned()) { const auto zones = AnalyzeTwinImmuneZones(merged, *opt.cell, *c.pg->representative, nullptr, opt.nthreads, twin_fraction_outside(*c.pg)); if (!zones.zones_ambiguous) diff --git a/tests/SearchSpaceGroupTwinTest.cpp b/tests/SearchSpaceGroupTwinTest.cpp index acc533344..33ead7c2f 100644 --- a/tests/SearchSpaceGroupTwinTest.cpp +++ b/tests/SearchSpaceGroupTwinTest.cpp @@ -239,6 +239,29 @@ TEST_CASE("SearchSpaceGroup keeps a partially twinned crystal in its true subgro } } +// A body-centred crystal in 4, twinned near-perfectly by a 2-fold of 422, given its cell as rugnux +// gives it. The agreement gates pass 422 at this fraction and only the twin-immune zone refuses it; +// what remains is a tie of order 4 between 4 and a 222 made of the crystal's 2-fold and two twin laws. +// The I centring extinguishes the odd class of every principal row, and that must not be read as +// three screw axes for the 222. +TEST_CASE("SearchSpaceGroup keeps a near-perfectly twinned body-centred 4 in 4", "[SearchSpaceGroup][twin]") { + SyntheticMergeParams p; + p.true_space_group = "I 4"; + p.twin_supergroup = "I 4 2 2"; + p.twin_fraction = 0.45; + p.multiplicity = 6; + p.seed = 20260727; + const auto merged = jfjoch_test::GenerateSyntheticMerged(p); + + SearchSpaceGroupOptions opt; + opt.merge_friedel = true; + opt.lattice_system = gemmi::CrystalSystem::Tetragonal; + opt.cell = jfjoch_test::SyntheticCellFor(gemmi::get_spacegroup_by_name("I 4")); + const auto result = SearchSpaceGroup(merged, opt); + INFO(SearchSpaceGroupResultToText(result)); + CHECK(result.point_group_hm == "4"); +} + // A PERFECT (alpha = 0.5) merohedral twin produces intensities that are exactly invariant under the // twin law: I_obs(h) = I_obs(twin h) for every reflection. No intensity statistic can tell it from a // crystal that genuinely has the higher symmetry - the information is not in the data (it takes a -- 2.54.0 From 9c4e22465a0e0beb1b39c0794fbb6a653b923fc4 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 13:18:19 +0200 Subject: [PATCH 29/81] ImageSpotFinderGPU: the local-box test is the CPU's to the bit (RESULT-CHANGING) RESULT-CHANGING for the GPU spot finder (classic and adaptive, which shares this kernel for its local-box passes) - only on pixels where the two used to disagree. Two differences between pixel_result and the CPU's StrongInWindow: - SNR test. Both form T = float(var) * strong2 in float. The CPU compares the int64 square (in_minus_mean)^2 with (int64) ceil(T); the GPU compared it with T directly, which converts the square to float. Below 2^24 the two differ only when the square equals ceil(T) with T not an integer (an exact-integer strong2 such as 9 or 16 never gives that); past 2^24, where T is an integer, the GPU's rounded square can land on T and fail a pixel the CPU accepts. The GPU now uses the CPU's integer-vs-ceil comparison. - Count threshold. At photon_count_threshold = 0 the CPU still requires val > 0; the GPU took 0 as "no threshold". It matters only for a pixel <= 0 above a negative local mean (a pedestal-subtracted detector); the adaptive finder always runs this pass with threshold 0. The GPU now applies val > threshold unconditionally, with the threshold carried as int64 like the setting. Measured: a diagnostic build evaluating both semantics in every pixel_result found zero disagreements in ~2e10 first-pass and ~2.9e7 candidate tests over lyso_x06da_ref, cytc_x10sa, myob_x10sa, yag_x10sa_20keV, 4nwv and thau_bl1a_3p8keV (JUNGFRAU); the battery GPU runs before and after give bit-identical p.hkl on all six sets. The new knife-edge test constructs both cases (a checkerboard window whose square is var * 25 exactly and rounds onto the float threshold; a 0 above a negative checkerboard) and failed on the GPU before this change. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../spot_finding/ImageSpotFinderGPU.cu | 10 +++- tests/ImageSpotFinderGPUTest.cpp | 58 +++++++++++++++++++ 2 files changed, 65 insertions(+), 3 deletions(-) diff --git a/image_analysis/spot_finding/ImageSpotFinderGPU.cu b/image_analysis/spot_finding/ImageSpotFinderGPU.cu index 72abcfe2d..4d8ece36c 100644 --- a/image_analysis/spot_finding/ImageSpotFinderGPU.cu +++ b/image_analysis/spot_finding/ImageSpotFinderGPU.cu @@ -11,7 +11,7 @@ struct spot_parameters { int32_t width; int32_t height; float strong_pixel_threshold2; - int32_t count_threshold; + int64_t count_threshold; }; // input X x Y pixels array @@ -66,6 +66,8 @@ __device__ __forceinline__ uint8_t pixel_result(const spot_parameters& params, c const int64_t var = count * sum2 - (sum * sum); // This should be divided by ((2*NBX+1) * (2*NBY+1)-1)*((2*NBX+1) * (2*NBY+1)) const int64_t in_minus_mean = val * count - sum; // Should be divided by ((2*NBX+1) * (2*NBY+1)); + // The CPU's test (StrongInWindow in ImageSpotFinderCPU.cpp), to the bit: the square stays an + // integer and meets the ceiling of the float threshold. Compared as float, it rounded past 2^24. const int64_t tmp1 = in_minus_mean * in_minus_mean; const float tmp2 = var * params.strong_pixel_threshold2; bool snr_criterion; @@ -73,9 +75,11 @@ __device__ __forceinline__ uint8_t pixel_result(const spot_parameters& params, c if (params.strong_pixel_threshold2 == 0.0f) snr_criterion = true; else - snr_criterion = (count > ImageSpotFinder::MIN_VALID_PIXELS) && (in_minus_mean > 0) && (tmp1 > tmp2); + snr_criterion = (count > ImageSpotFinder::MIN_VALID_PIXELS) && (in_minus_mean > 0) + && (tmp1 > static_cast(ceilf(tmp2))); - bool count_criterion = (params.count_threshold == 0.0f) || (val > params.count_threshold); + // As on the CPU, a threshold of 0 still asks for a positive value. + bool count_criterion = val > params.count_threshold; bool strong_pixel = snr_criterion && count_criterion; if (val == INT32_MAX) diff --git a/tests/ImageSpotFinderGPUTest.cpp b/tests/ImageSpotFinderGPUTest.cpp index 280af1c2c..9b4a409ff 100644 --- a/tests/ImageSpotFinderGPUTest.cpp +++ b/tests/ImageSpotFinderGPUTest.cpp @@ -280,4 +280,62 @@ TEST_CASE("ImageSpotFinder_CPU_GPU_Parity_TallImage", "[ImageSpotFinder]") { } } + +// The local-box SNR test on the knife edge, where the GPU used to answer differently from the CPU. +// Both compare (in_minus_mean)^2 against var * strong2 computed in float; the CPU compares the +// integer square with the ceiling of that float, the GPU compared the square converted to float - +// which, for squares past 2^24, can round onto the threshold and fail a pixel the CPU accepts. +// +// The centre of a checkerboard of 0 and 57 holding 171 is such a pixel at 5 sigma: its 960 +// neighbours are 480 zeros and 480 of 57, so var = 748569600 and in_minus_mean = 136800, whose +// square 18714240000 is var * 25 exactly. var * 25 rounds down in float to 18714238976, 1024 below +// the square - half a float spacing - so the square rounds onto the threshold too. The CPU takes +// the pixel (18714240000 > 18714238976), the GPU used not to. +// +// The second image is the count threshold: at photon_count_threshold = 0 the CPU still asks for a +// positive value, the GPU took 0 to mean no threshold. A 0 above a negative background (the +// checkerboard of -3 and -1, as a pedestal-subtracted detector gives) is 2 sigma above its mean. +TEST_CASE("ImageSpotFinder_CPU_GPU_Parity_KnifeEdge", "[ImageSpotFinder]") { + if (get_gpu_count() == 0) + SKIP("No CUDA GPU present"); + + const size_t width = 64, height = 64; + const std::vector res_mask(width * height, false); + + auto run_both = [&](int32_t even, int32_t odd, int32_t centre, float snr, size_t expected) { + ImagePreprocessorBufferGPU gpu_buffer(width * height); + ImagePreprocessorBuffer cpu_buffer(width * height); + for (size_t row = 0; row < height; row++) + for (size_t col = 0; col < width; col++) { + const int32_t v = ((row + col) % 2 == 0) ? even : odd; + gpu_buffer[row * width + col] = v; + cpu_buffer[row * width + col] = v; + } + gpu_buffer[32 * width + 32] = centre; + cpu_buffer[32 * width + 32] = centre; + + SpotFindingSettings settings{ + .signal_to_noise_threshold = snr, + .photon_count_threshold = 0, + .min_pix_per_spot = 1, + .max_pix_per_spot = 1000, + .high_resolution_limit = 0.5, + .low_resolution_limit = 3.0, + }; + ImageSpotFinderCPU cpu(static_cast(width), static_cast(height)); + cpu.SetResolutionMask(res_mask); + const auto cpu_spots = cpu.Run(cpu_buffer, settings); + const auto gpu_spots = run_gpu_and_collect_spots(gpu_buffer, width, height, settings, res_mask); + CHECK(cpu_spots.size() == expected); + CHECK(gpu_spots.size() == cpu_spots.size()); + }; + + SECTION("SNR test with the square past 2^24") { + run_both(0, 57, 171, 5.0f, 1); + } + SECTION("Zero count threshold on a negative background") { + run_both(-3, -1, 0, 1.5f, 0); + } +} + #endif -- 2.54.0 From 2df46872c5433ab5ca21597f722157113aa4d7c4 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 13:37:55 +0200 Subject: [PATCH 30/81] battery report: the plain R_free ratio says when the deposited R_free is a SHELXL one The plain R_free ratio sets the R_free of rugnux's --model placement against the R_free the depositor published; for an entry refined only in SHELXL (anisotropic, riding H, often atomic resolution) that published number is lower for reasons of program, not data, so the ratio reads high (1.69 on the 0.6 A Z-DNA entry, where the like-for-like REFMAC ratio is ~1.07). The deposition's refinement program (_software, classification 'refinement') is now recorded per set, and such a row's note and its point in the R_free ratio plot say the ratio is not like-for-like and point at the REFMAC ratio. An entry naming SHELXL beside another refinement program gets no note. In the open arm this marks 6cdl, 6jgh, 6jgj and 7atg; nothing is excluded or re-scored. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- tools/battery/battery.py | 2 ++ tools/battery/model_check.py | 14 ++++++++++++-- tools/battery/report.py | 16 ++++++++++++++-- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/tools/battery/battery.py b/tools/battery/battery.py index fdac9f0c9..7dad22167 100644 --- a/tools/battery/battery.py +++ b/tools/battery/battery.py @@ -444,6 +444,7 @@ def run_one(run_dir, binary, e, opts): os.makedirs(wd) row = {"set": e["id"], "arm": e["arm"], "tags": e.get("tags", []), "input": e["input_path"], "gpu_others": gpu_others(), "model": None, "model_note": None, "rfree_deposited": None, + "rfree_deposited_program": None, "rfree_ratio": None, "cmd": None, "exit_code": None, "elapsed_s": None, "wall_s": None} row.update({k: None for k in REFMAC_KEYS + depdata_check.KEYS + shelx_check.KEYS}) if not os.path.exists(e["input_path"]): @@ -455,6 +456,7 @@ def run_one(run_dir, binary, e, opts): meta, row["model_note"] = deposited_model(e, opts) if meta: row["model"], row["rfree_deposited"] = meta["xyz"], meta["rfree"] + row["rfree_deposited_program"] = meta.get("program") reference = row["model"] if e.get("timing"): # the timing benchmark: rugnux starts from a model it has to place, and the set's own model diff --git a/tools/battery/model_check.py b/tools/battery/model_check.py index 547b36241..59d1f7a7a 100644 --- a/tools/battery/model_check.py +++ b/tools/battery/model_check.py @@ -96,7 +96,10 @@ def deposition(pdb_id, cache_dir): return None if os.path.exists(meta_path): # the coordinates where this cache is now: a cache copied elsewhere keeps the old path in its json - return dict(json.load(open(meta_path)), xyz=xyz) + meta = dict(json.load(open(meta_path)), xyz=xyz) + if "program" not in meta: # a cache written before the program was recorded + meta["program"] = refinement_program(gemmi.cif.read(xyz).sole_block()) + return meta meta = refinement_record(pdb_id, xyz) json.dump(meta, open(meta_path, "w"), indent=1) return meta @@ -114,7 +117,14 @@ def refinement_record(name, xyz): ref = {k: (float(row[i]) if row.has(i) and gemmi.cif.is_null(row[i]) is False else None) for k, i in (("rfree", 1), ("rwork", 2), ("dmin", 3))} return {"id": name, "methods": methods, "rfree": ref.get("rfree"), "rwork": ref.get("rwork"), - "dmin": ref.get("dmin"), "xyz": xyz} + "dmin": ref.get("dmin"), "program": refinement_program(block), "xyz": xyz} + + +def refinement_program(block): + """The refinement program(s) the entry names (_software, classification 'refinement'), or None.""" + names = [row.str(1) for row in block.find("_software.", ["classification", "name"]) + if row.str(0).lower() == "refinement"] + return " ".join(names) or None # ------------------------------------------------------------------ lattice / setting matching diff --git a/tools/battery/report.py b/tools/battery/report.py index 06ea151bf..0cde7b9b3 100644 --- a/tools/battery/report.py +++ b/tools/battery/report.py @@ -508,7 +508,8 @@ def build(run_dir, baseline=None, allow_incomplete=False): doc.svg(ratio_dots(pts, f"{arm}: reference-range {what} ratio"), f"{arm}: {cap}. One point per set, sorted.") pts = [(r["set"], r["rfree_ratio"], r["verdict"], - f"R_free {r['rfree']:.3f} vs deposited {r['rfree_deposited']:.3f}") + f"R_free {r['rfree']:.3f} vs deposited {r['rfree_deposited']:.3f}" + + (f" ({shelx_rfree_note(r)})" if shelx_rfree_note(r) else "")) for r in res if r.get("rfree_ratio")] if pts: doc.svg(ratio_dots(pts, "R_free ratio"), @@ -667,7 +668,8 @@ def build(run_dir, baseline=None, allow_incomplete=False): [h for h, _ in model] + (["model fit"] if model else []) + ["time s", "note"] rows = [] for r in sorted(res, key=lambda r: (order.get(r["arm"], 9), r["set"])): - note = "; ".join(x for x in (r.get("reason"), r.get("sg_label") and f"labelled {r['sg_label']} from the model") + note = "; ".join(x for x in (r.get("reason"), r.get("sg_label") and f"labelled {r['sg_label']} from the model", + shelx_rfree_note(r)) if x) rows.append([r["set"], r["arm"], r["verdict"], r.get("sg") or "-", r.get("sg_ref") or "-", f(r.get("cell_dev_pct")), f(r.get("volume_ratio"), "{:.3f}"), @@ -707,6 +709,16 @@ def lowres_cell(r): + f" ({f(r.get('refres_lowres_d'))} / {f(r.get('lowres_d_ref'))})") +def shelx_rfree_note(r): + """The plain R_free ratio sets our number (REFMAC-like scaling, isotropic) against the depositor's + published R-free; a SHELXL R-free (anisotropic, riding H, often at atomic resolution) is lower for + reasons of program, not data, so the ratio is not like-for-like there. The REFMAC ratio is.""" + prog = r.get("rfree_deposited_program") or "" + if r.get("rfree_ratio") and prog and all("SHELX" in x.upper() for x in prog.split()): # not "SHELXL PHENIX" + return f"deposited R_free from {prog}: the R_free ratio is not like-for-like, read the REFMAC ratio" + return None + + def refres_note(r): """How to read a row of the reference-range table.""" if r.get("refres_shells_past_limit"): -- 2.54.0 From c346597a4815c843bbcdff8b774fd4dabea84b82 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 13:45:50 +0200 Subject: [PATCH 31/81] battery: reference_mismatch is an annotation, not a skip Owner decision: an outlier that has an explanation stays in the battery, because it tells something; removing it makes the results opaque. So 3mc4 and 3r6o run the REFMAC and depositor-data checks like every other set again, and their numbers count in the plots and statistics. The manifest's reference_mismatch note (the frames are a ~30% twinned crystal, the deposition another, untwinned one) is printed in the per-set table's note column and under the REFMAC R_free ratio plot. battery.py is back to its state before 52025483d. Checked: battery recheck of 20261017-1139_e25876_twin-isa-mismatch - REFMAC ran on both (R_free ratio 1.362 / 1.363, dep_cc_delta_all -0.163 / -0.319) and the report shows the note beside both rows; test_score.py OK. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- tools/battery/README.md | 7 +++---- tools/battery/battery.py | 24 +++--------------------- tools/battery/report.py | 23 ++++++++++++++++------- 3 files changed, 22 insertions(+), 32 deletions(-) diff --git a/tools/battery/README.md b/tools/battery/README.md index 5629ef4b1..1e4783e24 100644 --- a/tools/battery/README.md +++ b/tools/battery/README.md @@ -860,10 +860,9 @@ whole range; the manifest keeps the rule used as `dmin_rule`. reference (`sg`, `sgno`, `cell`, `dmin`) and tags. Set `"pinned": true` when the choice between sweeps was deliberate. Record the source and DOI in `docs/EXTERNAL_TEST_DATA.md`. A set whose frames are not the crystal the deposited data came from (checked independently, - e.g. with XDS on the same frames) gets `"reference_mismatch": ""`: the REFMAC check and the - depositor-data comparison are skipped (`refmac_status` / `dep_status` `skipped`, the reason in - `refmac_reason` / `dep_reason` and in the report), while space group, cell and d_min are still - scored against the deposition. + e.g. with XDS on the same frames) gets `"reference_mismatch": ""`. It is an annotation only: + every check still runs and every number still counts; the report prints the note beside the set's + row and under the REFMAC plot, so an outlier that has an explanation stays visible with it. - **Small molecules** carry `"cod": ""`, the published structure the SHELXL check refines (pick an entry whose Niggli-reduced cell and space group match the row's reference; prefer a modern, ordered, low-R one). diff --git a/tools/battery/battery.py b/tools/battery/battery.py index a7df13e9f..0c1dc3934 100644 --- a/tools/battery/battery.py +++ b/tools/battery/battery.py @@ -477,7 +477,7 @@ def run_one(run_dir, binary, e, opts): if e.get("timing"): row.update(timing.check(e["timing"], row, wd, reference)) elif e["reference"] == "deposition" and row["model"] and os.path.exists(os.path.join(wd, "p.mtz")): - row.update(check_depdata(e, wd, opts["pdb_cache"])) + row.update(depdata_check.check_set(wd, e["id"], opts["pdb_cache"])) if opts["model_check"] and e["arm"] == "open": row.update(check_model(e, wd)) if e.get("cod"): @@ -496,20 +496,6 @@ REFMAC_KEYS = ("refmac_rfree", "refmac_rwork", "refmac_rfree_depflags", "refmac_ "refmac_reason", "refmac_refined_ratio") + tuple("refmac_" + k for k in REFMAC_REFINED) -def mismatch_reason(e): - """Why the deposited data are not a reference for this set's frames (open.json's - `reference_mismatch`), or None: the REFMAC and depositor-data checks are then skipped.""" - return e.get("reference_mismatch") and "reference mismatch: " + e["reference_mismatch"] - - -def check_depdata(e, wd, pdb_cache): - """Our merge against the depositor's data (depdata_check.py), unless the manifest says the - deposition is not a reference for these frames.""" - if mismatch_reason(e): - return dict({k: None for k in depdata_check.KEYS}, dep_status="skipped", dep_reason=mismatch_reason(e)) - return depdata_check.check_set(wd, e["id"], pdb_cache) - - def check_model(e, wd): """R-free of the deposited model against this run's merge, by REFMAC (model_check.py).""" out = {k: None for k in REFMAC_KEYS} @@ -517,8 +503,6 @@ def check_model(e, wd): mtz = os.path.join(wd, "p.mtz") if not PDB_ID.match(pdb): return dict(out, refmac_status="skipped", refmac_reason="not a PDB entry") - if mismatch_reason(e): - return dict(out, refmac_status="skipped", refmac_reason=mismatch_reason(e)) if not os.path.exists(mtz): return dict(out, refmac_status="skipped", refmac_reason="no merged MTZ") try: @@ -1005,7 +989,7 @@ def recheck_one(e, wd, pdb_cache): """The post-processing checks of one open-arm row, on the run's own p.mtz (a worker process).""" out = {} if e["model"] and os.path.exists(os.path.join(wd, "p.mtz")): - out.update(check_depdata(e, wd, pdb_cache)) + out.update(depdata_check.check_set(wd, e["id"], pdb_cache)) out.update(check_model(e, wd)) return out @@ -1047,10 +1031,8 @@ def cmd_recheck(a, site): set_writable([os.path.join(wd, "model_check")]) os.rename(os.path.join(wd, "model_check"), os.path.join(wd, "model_check.pre-recheck-" + stamp)) shutil.copy2(os.path.join(run, "results.json"), os.path.join(run, "results.json.pre-recheck-" + stamp)) - mismatch = {e["id"]: e.get("reference_mismatch") for e in load_sets(site, "open")} with concurrent.futures.ProcessPoolExecutor(a.jobs) as pool: - futures = {pool.submit(recheck_one, {"id": r["set"], "model": r.get("model"), - "reference_mismatch": mismatch.get(r["set"])}, wd, pdb_cache): r + futures = {pool.submit(recheck_one, {"id": r["set"], "model": r.get("model")}, wd, pdb_cache): r for r, wd in zip(rows, wds)} for n, fut in enumerate(concurrent.futures.as_completed(futures), 1): r = futures[fut] diff --git a/tools/battery/report.py b/tools/battery/report.py index c9475c4bd..e31e9841d 100644 --- a/tools/battery/report.py +++ b/tools/battery/report.py @@ -201,6 +201,14 @@ ALIASES = {} # {arm: {set id: manifest row}} of today's manifests (battery.py sets it); rescore() scores with them MANIFESTS = {} + +def reference_note(r): + """The manifest's reference_mismatch note for a row (why its deposition is a poor reference for + these frames), or None. An annotation only: the row is scored and plotted as any other.""" + note = (MANIFESTS.get(r["arm"], {}).get(r["set"]) or {}).get("reference_mismatch") + return note and "reference mismatch: " + note + + # the site's cache of deposited models and structure factors (battery.py sets it) PDB_CACHE = None @@ -523,9 +531,9 @@ def build(run_dir, baseline=None, allow_incomplete=False): "REFMAC check (--model-check): R_free of the deposited model against our merge / against " "the deposited structure factors, both on the depositor's free set with the same protocol, " "one point per set, sorted; below 1 = our data fit the model better") - skipped = [r for r in res if r.get("refmac_status") == "skipped" and r["arm"] == "open"] - if skipped: - doc.p("REFMAC check skipped: " + "; ".join(f"{r['set']} ({r['refmac_reason']})" for r in skipped)) + notes = [r for r in res if reference_note(r)] + if notes: + doc.p("Read with the manifest's note: " + "; ".join(f"{r['set']} - {reference_note(r)}" for r in notes)) dep = [r for r in res if r.get("dep_status") == "ok"] if dep: @@ -547,9 +555,9 @@ def build(run_dir, baseline=None, allow_incomplete=False): doc.table(["set", "dep. data", "our d_min", "dep. d_min", "common refl.", "dCC all", "dCC outer 2", "CC past limit", "to d A", "REFMAC ratio", "ISa", "tags"], rows, num=range(2, 11)) - other = [r for r in res if r.get("dep_status") not in (None, "ok")] - if other: - doc.p("No depositor-data comparison: " + "; ".join(f"{r['set']} ({r['dep_reason']})" for r in other)) + other = [r for r in res if r.get("dep_status") not in (None, "ok")] + if other: + doc.p("No comparison: " + "; ".join(f"{r['set']} ({r['dep_reason']})" for r in other)) xds = [r for r in res if r.get("refres_range")] if xds: @@ -670,7 +678,8 @@ def build(run_dir, baseline=None, allow_incomplete=False): [h for h, _ in model] + (["model fit"] if model else []) + ["time s", "note"] rows = [] for r in sorted(res, key=lambda r: (order.get(r["arm"], 9), r["set"])): - note = "; ".join(x for x in (r.get("reason"), r.get("sg_label") and f"labelled {r['sg_label']} from the model") + note = "; ".join(x for x in (r.get("reason"), r.get("sg_label") and f"labelled {r['sg_label']} from the model", + reference_note(r)) if x) rows.append([r["set"], r["arm"], r["verdict"], r.get("sg") or "-", r.get("sg_ref") or "-", f(r.get("cell_dev_pct")), f(r.get("volume_ratio"), "{:.3f}"), -- 2.54.0 From f215300a07942c95b18d2c0432a288cd22b15e23 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 14:27:10 +0200 Subject: [PATCH 32/81] ImageBuffer reader: give up on an image MAX_IMAGE_LAG (100) behind the newest, and a unit test Images reach the buffer in order give or take a few, so one still missing when the buffer holds an image 100 past it is lost, not late: the read returns false instead of waiting for the end of the collection. The newest image number comes from ImageBuffer::GetStatus, which scans every slot under the buffer's lock, so it is asked only every 100 polls (~10 Hz). The test puts CBOR images into an ImageBuffer the way the receiver does and checks read-back of the pixels, waiting for an image not yet there, the lag limit, the end of the collection and the bounds. Co-Authored-By: Claude Opus 5.5 --- reader/JFJochImageBufferReader.cpp | 7 +- reader/JFJochImageBufferReader.h | 5 +- tests/CMakeLists.txt | 1 + tests/JFJochImageBufferReaderTest.cpp | 97 +++++++++++++++++++++++++++ 4 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 tests/JFJochImageBufferReaderTest.cpp diff --git a/reader/JFJochImageBufferReader.cpp b/reader/JFJochImageBufferReader.cpp index a7ca4e2cc..67d6f687e 100644 --- a/reader/JFJochImageBufferReader.cpp +++ b/reader/JFJochImageBufferReader.cpp @@ -34,9 +34,14 @@ bool JFJochImageBufferReader::WaitForMessage(int64_t image_number, std::vector(image_number) >= number_of_images_) throw JFJochException(JFJochExceptionCategory::ArrayOutOfBounds, "Image out of bounds"); // The buffer has no notification of its own; at 100 Hz a millisecond's poll costs nothing. - while (!buffer_.GetImage(cbor, image_number)) { + for (int poll = 1; !buffer_.GetImage(cbor, image_number); poll++) { if (ended_) return buffer_.GetImage(cbor, image_number); // one that came in just before the end + // Images arrive in order, give or take a few: one still missing when the buffer already holds + // an image MAX_IMAGE_LAG past it is lost, not late. GetStatus scans every slot under the + // buffer's lock, so it is asked only every 100 polls. + if (poll % 100 == 0 && buffer_.GetStatus().max_image_number >= image_number + MAX_IMAGE_LAG) + return buffer_.GetImage(cbor, image_number); std::this_thread::sleep_for(std::chrono::milliseconds(1)); } return true; diff --git a/reader/JFJochImageBufferReader.h b/reader/JFJochImageBufferReader.h index 5a7c5203d..7acf60aa8 100644 --- a/reader/JFJochImageBufferReader.h +++ b/reader/JFJochImageBufferReader.h @@ -13,10 +13,13 @@ // Reads a collection inside the broker while it arrives: the dataset comes from its start message, // the images from the broker's image buffer, where the receiver puts each one as it forwards it. A // read of an image not there yet waits for it; after Ended it returns false for an image that never -// came. The buffer must hold the whole collection (slots >= images) - a slot taken again for a later +// came, and so does a read of an image still missing when one MAX_IMAGE_LAG past it is there. The +// buffer must hold the whole collection (slots >= images) - a slot taken again for a later // image would hand out that image instead. class JFJochImageBufferReader : public JFJochReader { public: + constexpr static int64_t MAX_IMAGE_LAG = 100; + explicit JFJochImageBufferReader(ImageBuffer &buffer); void Open(const StartMessage &start); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5f5c4b207..0866355a7 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -87,6 +87,7 @@ ADD_EXECUTABLE(jfjoch_test SpotTilesTest.cpp LossyFilterTest.cpp ImageBufferTest.cpp + JFJochImageBufferReaderTest.cpp PixelMaskTest.cpp RegressionTest.cpp FPGAHLSModulesTest.cpp diff --git a/tests/JFJochImageBufferReaderTest.cpp b/tests/JFJochImageBufferReaderTest.cpp new file mode 100644 index 000000000..41abe0b31 --- /dev/null +++ b/tests/JFJochImageBufferReaderTest.cpp @@ -0,0 +1,97 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include +#include +#include +#include + +#include "../reader/JFJochImageBufferReader.h" +#include "../common/ZeroCopyReturnValue.h" +#include "../frame_serialize/CBORStream2Serializer.h" + +// The receiver's way of putting an image in the buffer: serialize the message into a slot, hand it out. +static void PutImage(ImageBuffer &buffer, const DiffractionExperiment &experiment, int64_t number, + const std::vector &pixels) { + DataMessage msg{}; + msg.number = number; + msg.image = CompressedImage(pixels, experiment.GetXPixelsNum(), experiment.GetYPixelsNum()); + auto loc = buffer.GetImageSlot(); + REQUIRE(loc != nullptr); + CBORStream2Serializer serializer((uint8_t *) loc->GetImage(), experiment.GetImageBufferLocationSize()); + serializer.SerializeImage(msg); + loc->SetImageNumber(number); + loc->SetImageSize(serializer.GetBufferSize()); + loc->SetIndexed(false); + loc->ReadyToSend(); + loc->release(); +} + +TEST_CASE("JFJochImageBufferReader", "[JFJochReader]") { + DiffractionExperiment experiment(DetJF(1)); + experiment.ImagesPerTrigger(200); + + ImageBuffer buffer(4 * experiment.GetImageBufferLocationSize()); + buffer.StartMeasurement(experiment); + + StartMessage start{}; + experiment.FillMessage(start); + REQUIRE(start.number_of_images == 200); + + JFJochImageBufferReader reader(buffer); + reader.Open(start); + REQUIRE(reader.GetNumberOfImages() == 200); + REQUIRE(reader.GetDataset()); + + const size_t npixel = experiment.GetXPixelsNum() * experiment.GetYPixelsNum(); + std::vector pixels(npixel, 7); + pixels[123] = 4567; + PutImage(buffer, experiment, 0, pixels); + + JFJochReaderRawImage raw; + REQUIRE(reader.ReadRawImage(0, raw)); + REQUIRE(raw.image.GetWidth() == experiment.GetXPixelsNum()); + REQUIRE(raw.image.GetHeight() == experiment.GetYPixelsNum()); + REQUIRE(raw.image_buffer.size() == npixel * sizeof(int32_t)); + int32_t value; + memcpy(&value, raw.image.GetCompressed() + 123 * sizeof(int32_t), sizeof(int32_t)); + REQUIRE(value == 4567); + + auto image = reader.LoadImage(0); + REQUIRE(image); + REQUIRE(image->ImageData().number == 0); + + REQUIRE_THROWS(reader.ReadRawImage(200, raw)); + + // An image not there yet is waited for: the read returns once the receiver puts it in. + auto pending = std::async(std::launch::async, [&] { + JFJochReaderRawImage r; + return reader.ReadRawImage(1, r); + }); + REQUIRE(pending.wait_for(std::chrono::milliseconds(50)) == std::future_status::timeout); + PutImage(buffer, experiment, 1, pixels); + REQUIRE(pending.wait_for(std::chrono::seconds(5)) == std::future_status::ready); + REQUIRE(pending.get()); + + // Images arrive in order, give or take a few: one still missing when an image MAX_IMAGE_LAG past + // it is there is lost, while one nearer may still come. + PutImage(buffer, experiment, 150, pixels); + auto lost = std::async(std::launch::async, [&] { + JFJochReaderRawImage r; + return reader.ReadRawImage(150 - JFJochImageBufferReader::MAX_IMAGE_LAG, r); + }); + REQUIRE(lost.wait_for(std::chrono::seconds(5)) == std::future_status::ready); + REQUIRE(!lost.get()); + + // After the end, an image that never came is not waited for. + auto missing = std::async(std::launch::async, [&] { + JFJochReaderRawImage r; + return reader.ReadRawImage(150 - JFJochImageBufferReader::MAX_IMAGE_LAG + 1, r); + }); + REQUIRE(missing.wait_for(std::chrono::milliseconds(300)) == std::future_status::timeout); + reader.Ended(); + REQUIRE(missing.wait_for(std::chrono::seconds(5)) == std::future_status::ready); + REQUIRE(!missing.get()); + + REQUIRE(buffer.Finalize(std::chrono::microseconds(1))); +} -- 2.54.0 From af1bad8f47e331602d7c105a0a33dc9e0e392ba1 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 14:40:41 +0200 Subject: [PATCH 33/81] MR on the CPU: placement refinements reserve their grids against the host worker pool The first copies' placements are refined side by side, one thread each, and without a GPU each makes its structure factors and rigid body on the CPU - about a gigabyte of grids on a large cell, five at once at the 4nwv molecular-replacement peak (14.9 GiB live with a 16 GB machine's budget). Each now reserves 32 B per point of its grid before it starts, as a null replicate does. What each computes, and where its score goes, does not change. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- .../structure_refinement/MolecularReplacement.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/image_analysis/structure_refinement/MolecularReplacement.cpp b/image_analysis/structure_refinement/MolecularReplacement.cpp index 64d0ca0c1..aadd6eab8 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.cpp +++ b/image_analysis/structure_refinement/MolecularReplacement.cpp @@ -2797,8 +2797,15 @@ MolecularReplacementResult search_model(const SearchModel &model, const std::vec to_refine.push_back(&f); if (!to_refine.empty()) { std::vector> running; + // Without a GPU each placement's structure factors and rigid body are made on the CPU, a + // gigabyte or more of grids on a large cell, so each reserves them against the host's worker + // pool first (HostWorkerPool), as a null replicate does. + const size_t placement_bytes = get_gpu_count() == 0 + ? MODEL_FACTORS_BYTES_PER_GRID_POINT * ModelGridPoints(cell, &sg, d_min) + : 0; for (First *f : to_refine) running.push_back(std::async(std::launch::async, [&, f] { + const HostWorkerPool::Reservation reserved(HostWorkerPool::Instance(), placement_bytes); f->score = refine_placement(*f->placed, sg, *merge.merged, d_min, engines, nthreads, &scorers, &f->moved); f->clash = ClashFraction(*f->placed); -- 2.54.0 From e3f6dade6db29efba3bade50a9a06d501e44ce64 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 15:27:37 +0200 Subject: [PATCH 34/81] battery: a --no-gpu run does not wait for the GPU lock --gpulock serialises rugnux runs on the shared card; a run given --no-gpu (in --extra) has no card to share, but queued behind every GPU run all the same. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- tools/battery/battery.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/battery/battery.py b/tools/battery/battery.py index 7dad22167..e3205d925 100644 --- a/tools/battery/battery.py +++ b/tools/battery/battery.py @@ -378,7 +378,7 @@ def command(binary, e, opts, model=None): cmd += ["--model", model] cmd += opts["extra_args"] cmd.append(e["input_path"]) - if opts["gpulock"]: + if opts["gpulock"] and "--no-gpu" not in cmd: # a CPU run has no card to share cmd = [opts["gpulock"]] + cmd return cmd -- 2.54.0 From 7539f216dd95c805a4f1d3a70fcabf315ec5be15 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 16:06:58 +0200 Subject: [PATCH 35/81] AdaptiveSpotFinderGPU: sigma-clip bounds rounded as the CPU rounds them (RESULT-CHANGING) RESULT-CHANGING for the GPU adaptive spot finder, only where a clip bound sat within its last bit of an integer. clip_keep formed mean -/+ clip_k * sigma as one fused multiply-add each; AdaptiveSpotFinderCPU::ClipRings computes the product and then the sum (contraction is off project-wide). The two bounds differ in the last bit, and where that crosses an integer pixel value every pixel of that value in the ring moves in or out of the clip, so the ring mean/sigma - and the ring's threshold - differ. clip_keep now rounds product then sum (__fmul_rn, __fsub_rn / __fadd_rn), still in one place for every kernel. Measured: a diagnostic build evaluating both forms in every clip_keep found 2 differing tests each on lyso_x06da_ref (of 4.7e7), yag_x10sa_20keV (of 2.2e8) and 4nwv (of 7.0e7), none on cytc_x10sa, myob_x10sa and thau_bl1a_3p8keV. The battery GPU runs before and after give bit-identical p.hkl on all six sets. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01PXc1zD1yxHqaR1DGdCTHL4 --- image_analysis/spot_finding/AdaptiveSpotFinderGPU.cu | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/image_analysis/spot_finding/AdaptiveSpotFinderGPU.cu b/image_analysis/spot_finding/AdaptiveSpotFinderGPU.cu index 1c9123f23..7dc5e36b0 100644 --- a/image_analysis/spot_finding/AdaptiveSpotFinderGPU.cu +++ b/image_analysis/spot_finding/AdaptiveSpotFinderGPU.cu @@ -44,12 +44,14 @@ __device__ __forceinline__ void flush_ring(unsigned long long *s_sum, unsigned l } } -// The sigma-clip test, with both bounds as single fused multiply-adds. Written out rather than left to -// the compiler, which fuses `mean - clip_k * sigma` in one kernel and may not in another - and the -// histogram clip below must draw exactly the line the image pass draws. +// The sigma-clip test, with both bounds rounded as AdaptiveSpotFinderCPU::ClipRings rounds them: the +// product, then the sum, never fused. Written out rather than left to the compiler, so that every +// kernel - the histogram clip below and the image passes - draws exactly the CPU's line. A fused +// bound differs in the last bit, and where that crosses an integer every pixel of that value in the +// ring moves in or out of the clip. __device__ __forceinline__ bool clip_keep(float fv, float mean, float sigma, float clip_k) { - const float lo = __fmaf_rn(-clip_k, sigma, mean); - const float hi = __fmaf_rn(clip_k, sigma, mean); + const float lo = __fsub_rn(mean, __fmul_rn(clip_k, sigma)); + const float hi = __fadd_rn(mean, __fmul_rn(clip_k, sigma)); return !(fv < lo || fv > hi); } -- 2.54.0 From 4bf41983ed13bd71ed304029a7dbc837249b6bb2 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 16:11:58 +0200 Subject: [PATCH 36/81] rugnux: the model is parsed by the caller and handed in as RugnuxModel The analysis read the --model file itself, four to five times per run (the model kind, every validation, molecular replacement, the stills reference intensities) and located the PAE sidecar from the file name. The library is to do no file I/O, so the model now arrives in memory: - RugnuxModel (image_analysis/structure_refinement/RugnuxModel.h): the gemmi structure as read, whether it is ModelCIF, the PAE matrix where a prediction came with one, and the name the report gives it. - ParseRugnuxModel / ReadRugnuxModelFile (writer/RugnuxModelFile.h, in JFJochRugnuxFiles): bytes in, gzip by magic, PDB/mmCIF by content, _ma_qa_metric detection as before; the file reader takes the PAE JSON from the same place PaePathFor named. - ProcessConfig::model replaces model_path; PrepareSearchModel, RunMolecularReplacement, ValidateAgainstModel and ModelReferenceIntensities take the model; result fields name it by model_name. - rugnux reads the model before the run starts and stops with an error where the file holds no model (it used to run and report the model as not validated). The viewer reads it when the job is set up. - The broker parses an uploaded model at once and answers 400 where it is not one; it keeps the parsed model in memory, with no temporary directory or file. It takes no PAE. Co-Authored-By: Claude Opus 5.5 --- broker/JFJochBrokerHttp.cpp | 20 ++-- broker/JFJochServices.cpp | 33 +------ broker/JFJochServices.h | 6 +- broker/JFJochStateMachine.cpp | 4 +- broker/JFJochStateMachine.h | 2 +- .../structure_refinement/CMakeLists.txt | 1 + .../structure_refinement/ModelValidation.cpp | 53 +++++----- .../structure_refinement/ModelValidation.h | 16 +-- .../MolecularReplacement.cpp | 64 +++--------- .../MolecularReplacement.h | 20 ++-- .../structure_refinement/RugnuxModel.h | 20 ++++ receiver/JFJochReceiverRugnux.cpp | 8 +- receiver/JFJochReceiverRugnux.h | 4 +- receiver/JFJochReceiverService.cpp | 6 +- receiver/JFJochReceiverService.h | 6 +- rugnux/ResultReport.cpp | 4 +- rugnux/Rugnux.cpp | 4 +- rugnux/Rugnux.h | 8 +- rugnux/RugnuxCommandLine.cpp | 4 +- rugnux/RugnuxLive.cpp | 4 +- rugnux/RugnuxLive.h | 2 +- rugnux/RugnuxScaleMerge.cpp | 20 ++-- rugnux/rugnux_cli.cpp | 17 +++- tests/ModelScaleGPUTest.cpp | 3 +- tests/ModelValidationTest.cpp | 79 ++++++++------- tests/MolecularReplacementTest.cpp | 32 +++--- tests/ResultReportTest.cpp | 6 +- tests/RugnuxTest.cpp | 4 +- viewer/windows/JFJochProcessingJobsWindow.cpp | 15 ++- writer/CMakeLists.txt | 8 +- writer/RugnuxModelFile.cpp | 98 +++++++++++++++++++ writer/RugnuxModelFile.h | 23 +++++ 32 files changed, 352 insertions(+), 242 deletions(-) create mode 100644 image_analysis/structure_refinement/RugnuxModel.h create mode 100644 writer/RugnuxModelFile.cpp create mode 100644 writer/RugnuxModelFile.h diff --git a/broker/JFJochBrokerHttp.cpp b/broker/JFJochBrokerHttp.cpp index 88cd13b6c..f0b638ba3 100644 --- a/broker/JFJochBrokerHttp.cpp +++ b/broker/JFJochBrokerHttp.cpp @@ -7,7 +7,6 @@ #include #include -#include #include #include #include @@ -17,6 +16,7 @@ #include "../preview/JFJochTIFF.h" #include "OpenAPIConvert.h" #include "../image_pusher/LiveCollection.h" +#include "../writer/RugnuxModelFile.h" #include #include "gen/model/Error_message.h" @@ -978,9 +978,9 @@ void JFJochBrokerHttp::config_rugnux_get(httplib::Response &response) { ret.setEnable(s.enable); ret.setReservedCpus(s.reserved_cpus); ret.setDeadlineS(s.deadline_s); - ret.setModelLoaded(!s.model_path.empty()); - if (!s.model_path.empty()) - ret.setModelSizeBytes(static_cast(std::filesystem::file_size(s.model_path))); + ret.setModelLoaded(s.model != nullptr); + if (s.model) + ret.setModelSizeBytes(s.model_size_bytes); ProcessOutput(ret, response); } @@ -1003,13 +1003,21 @@ void JFJochBrokerHttp::config_rugnux_model_put(const httplib::Request &request, response.set_content("Model cannot be larger than 64 MiB", "text/plain"); return; } - state_machine.SetRugnuxModel(request.body); + std::shared_ptr model; + try { + model = std::make_shared(ParseRugnuxModel(request.body, "model")); + } catch (const std::exception &e) { + response.status = 400; + response.set_content(std::string("Not an atomic model: ") + e.what(), "text/plain"); + return; + } + state_machine.SetRugnuxModel(std::move(model), static_cast(request.body.size())); logger.Info("Rugnux model uploaded ({} bytes)", request.body.size()); response.status = 200; } void JFJochBrokerHttp::config_rugnux_model_delete(httplib::Response &response) { - state_machine.SetRugnuxModel(""); + state_machine.SetRugnuxModel(nullptr, 0); logger.Info("Rugnux model removed"); response.status = 200; } diff --git a/broker/JFJochServices.cpp b/broker/JFJochServices.cpp index 8bd4ff15c..31dfaee5f 100644 --- a/broker/JFJochServices.cpp +++ b/broker/JFJochServices.cpp @@ -3,9 +3,6 @@ #include "JFJochServices.h" -#include -#include -#include #include "../common/JFJochException.h" #include "../detector_control/SLSDetectorWrapper.h" #include "../detector_control/DectrisDetectorWrapper.h" @@ -376,7 +373,7 @@ void JFJochServices::SetupIndexing(const IndexingSettings &input) { void JFJochServices::SetRugnuxLive(const RugnuxLiveSettings &input) { if (receiver) - receiver->RugnuxLive(input.enable, input.model_path, input.reserved_cpus, input.deadline_s); + receiver->RugnuxLive(input.enable, input.model, input.reserved_cpus, input.deadline_s); rugnux = input; } @@ -390,32 +387,10 @@ RugnuxLiveSnapshot JFJochServices::GetRugnuxStatus() const { return {}; } -void JFJochServices::SetRugnuxModel(const std::string &model) { +void JFJochServices::SetRugnuxModel(std::shared_ptr model, int64_t size_bytes) { RugnuxLiveSettings s = rugnux; - if (!s.model_path.empty()) - std::filesystem::remove(s.model_path); - s.model_path.clear(); - - if (!model.empty()) { - if (rugnux_model_dir.empty()) { - char dir[] = "/tmp/jfjoch_rugnux_XXXXXX"; // mkdtemp creates it 0700 - if (mkdtemp(dir) == nullptr) - throw JFJochException(JFJochExceptionCategory::FileWriteError, - "Cannot create directory for the rugnux model"); - rugnux_model_dir = dir; - } - // gemmi detects PDB/mmCIF from the content, but gzip only from the extension - const bool gzipped = model.size() >= 2 && model[0] == '\x1f' && model[1] == '\x8b'; - s.model_path = rugnux_model_dir + (gzipped ? "/model.gz" : "/model"); - { - std::ofstream f(s.model_path, std::ios::binary); - f.write(model.data(), static_cast(model.size())); - if (!f) - throw JFJochException(JFJochExceptionCategory::FileWriteError, "Cannot write the rugnux model"); - } - std::filesystem::permissions(s.model_path, - std::filesystem::perms::owner_read | std::filesystem::perms::owner_write); - } + s.model = std::move(model); + s.model_size_bytes = s.model ? size_bytes : 0; SetRugnuxLive(s); } diff --git a/broker/JFJochServices.h b/broker/JFJochServices.h index 3a732c20d..c232ff5b9 100644 --- a/broker/JFJochServices.h +++ b/broker/JFJochServices.h @@ -18,7 +18,8 @@ struct RugnuxLiveSettings { bool enable = false; int64_t reserved_cpus = 4; double deadline_s = 0; // the analysis is cut this long after the last image (0 = never) - std::string model_path; // empty = no model + std::shared_ptr model; // null = no model + int64_t model_size_bytes = 0; // as uploaded }; class JFJochServices { @@ -31,7 +32,6 @@ class JFJochServices { std::atomic cannot_stop_detector = false; RugnuxLiveSettings rugnux; - std::string rugnux_model_dir; // private directory, created at the first model upload Logger &logger; public: explicit JFJochServices(Logger &in_logger); @@ -89,7 +89,7 @@ public: void SetRugnuxLive(const RugnuxLiveSettings &input); RugnuxLiveSettings GetRugnuxLive() const; // The model file is written 0600 into a private directory; an empty model removes it - void SetRugnuxModel(const std::string &model); + void SetRugnuxModel(std::shared_ptr model, int64_t size_bytes); RugnuxLiveSnapshot GetRugnuxStatus() const; ImagePusherStatus GetImagePusherStatus() const; diff --git a/broker/JFJochStateMachine.cpp b/broker/JFJochStateMachine.cpp index 47dacea7f..97c880ded 100644 --- a/broker/JFJochStateMachine.cpp +++ b/broker/JFJochStateMachine.cpp @@ -1221,12 +1221,12 @@ void JFJochStateMachine::SetRugnuxLive(bool enable, int64_t reserved_cpus, doubl services.SetRugnuxLive(s); } -void JFJochStateMachine::SetRugnuxModel(const std::string &model) { +void JFJochStateMachine::SetRugnuxModel(std::shared_ptr model, int64_t size_bytes) { std::unique_lock ul(m); if (IsRunning()) throw WrongDAQStateException("Cannot change rugnux model during data collection"); std::unique_lock ul2(rugnux_mutex); - services.SetRugnuxModel(model); + services.SetRugnuxModel(std::move(model), size_bytes); } RugnuxLiveSettings JFJochStateMachine::GetRugnuxLive() const { diff --git a/broker/JFJochStateMachine.h b/broker/JFJochStateMachine.h index ca053658a..ed494dcaf 100644 --- a/broker/JFJochStateMachine.h +++ b/broker/JFJochStateMachine.h @@ -249,7 +249,7 @@ public: IndexingSettings GetIndexingSettings() const; void SetRugnuxLive(bool enable, int64_t reserved_cpus, double deadline_s); - void SetRugnuxModel(const std::string &model); // empty = remove the model + void SetRugnuxModel(std::shared_ptr model, int64_t size_bytes); // null = remove the model RugnuxLiveSettings GetRugnuxLive() const; RugnuxLiveSnapshot GetRugnuxStatus() const; diff --git a/image_analysis/structure_refinement/CMakeLists.txt b/image_analysis/structure_refinement/CMakeLists.txt index aacd1211b..0644f809d 100644 --- a/image_analysis/structure_refinement/CMakeLists.txt +++ b/image_analysis/structure_refinement/CMakeLists.txt @@ -5,6 +5,7 @@ ADD_LIBRARY(JFJochStructureRefinement STATIC MolecularReplacement.cpp MolecularReplacement.h $<$:MolecularReplacementGPU.cu> MolecularReplacementGPU.h ModelValidation.cpp ModelValidation.h + RugnuxModel.h RigidBodyRefine.cpp RigidBodyRefine.h $<$:RigidBodyGPU.cpp> $<$:RigidBodyGPU.cu> diff --git a/image_analysis/structure_refinement/ModelValidation.cpp b/image_analysis/structure_refinement/ModelValidation.cpp index a79dd085d..0497730c2 100644 --- a/image_analysis/structure_refinement/ModelValidation.cpp +++ b/image_analysis/structure_refinement/ModelValidation.cpp @@ -21,9 +21,7 @@ #include #include -#include // read_structure_gz #include // expand_ncs -#include // MaybeGzipped #include // IT92 x-ray form factors #include // DensityCalculator #include // get_size_for_hkl, get_f_phi_on_grid (the maps) @@ -537,7 +535,7 @@ namespace { // validation either way. ModelValidationResult Validate(const std::vector &merged, const UnitCell &cell, - const std::string &model_path, + const RugnuxModel &model, const std::string &output_prefix, Logger &logger, const gemmi::SpaceGroup *data_space_group, @@ -548,32 +546,29 @@ ModelValidationResult Validate(const std::vector &merged, const ModelValidationSchedule &schedule, const gemmi::Op *twin_law, bool rigid_body_gpu, - const gemmi::Structure *model) { + const gemmi::Structure *placed) { ModelValidationResult result; - result.model_path = model_path; + result.model_name = model.name; - // --- read the atomic model --- + // --- the atomic model --- ModelState mdl; gemmi::Structure &st = mdl.st; // the real model, the one the maps and the report describe try { - // Detect, not the default: without it GEMMI picks the format from the extension and only - // falls back to the content when it does not recognise one. A model arrives named however - // whoever produced it named it, so the file itself is the better authority. - st = model != nullptr ? *model : gemmi::read_structure_gz(model_path, gemmi::CoorFormat::Detect); + st = placed != nullptr ? *placed : model.structure; expand_strict_ncs(st); } catch (const std::exception &e) { - result.failure_reason = fmt::format("cannot read model {}: {}", model_path, e.what()); + result.failure_reason = fmt::format("cannot read model {}: {}", model.name, e.what()); logger.Error("Model validation: {}", result.failure_reason); return result; } if (st.models.empty() || !st.cell.is_crystal()) { - result.failure_reason = fmt::format("model {} has no atoms or no unit cell", model_path); + result.failure_reason = fmt::format("model {} has no atoms or no unit cell", model.name); logger.Error("Model validation: {}", result.failure_reason); return result; } const gemmi::SpaceGroup *sg = st.find_spacegroup(); if (!sg) { - result.failure_reason = fmt::format("model {} has no usable space group", model_path); + result.failure_reason = fmt::format("model {} has no usable space group", model.name); logger.Error("Model validation: {}", result.failure_reason); return result; } @@ -659,7 +654,7 @@ ModelValidationResult Validate(const std::vector &merged, // and their maps and reflection files can be compared directly. Moving the model would leave // each dataset in whichever indexing its own run happened to pick. // A model handed over already placed in the data's cell (molecular replacement) is on the data's axes. - if (data_cell.is_crystal() && model == nullptr) { + if (data_cell.is_crystal() && placed == nullptr) { const gemmi::GroupOps model_gops = sg->operations(); const bool same_point_group = data_space_group != nullptr && same_rotations(data_space_group->operations(), model_gops); @@ -1921,7 +1916,7 @@ ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need ModelValidationResult ValidateAgainstModel(const std::vector &merged, const UnitCell &cell, - const std::string &model_path, + const RugnuxModel &model, const std::string &output_prefix, Logger &logger, const gemmi::SpaceGroup *data_space_group, @@ -1931,18 +1926,18 @@ ModelValidationResult ValidateAgainstModel(const std::vector & const std::vector &report_shell_d_min, const ModelValidationSchedule &schedule, const gemmi::Op *twin_law, - const gemmi::Structure *model) { + const gemmi::Structure *placed) { #ifdef JFJOCH_USE_CUDA // A CUDA failure ends the validation, not the run, and nothing is moved to the CPU part way through: // the validation reports why it did not finish, and a validation that did not finish decides nothing, // so the reflection files are those of a run without a model. try { - return Validate(merged, cell, model_path, output_prefix, logger, data_space_group, + return Validate(merged, cell, model, output_prefix, logger, data_space_group, probe_indexing_ambiguity, nthreads, wavelength_A, report_shell_d_min, schedule, twin_law, - true, model); + true, placed); } catch (const RigidBodyGPUFailure &e) { ModelValidationResult failed; - failed.model_path = model_path; + failed.model_name = model.name; failed.failure_reason = fmt::format("the GPU failed during the validation ({})", e.what()); logger.Error("Model validation: {}", failed.failure_reason); cuda_throw_if_context_lost(); // a lost device ends the run here, not at its next user @@ -1950,8 +1945,8 @@ ModelValidationResult ValidateAgainstModel(const std::vector & return failed; } #else - return Validate(merged, cell, model_path, output_prefix, logger, data_space_group, probe_indexing_ambiguity, - nthreads, wavelength_A, report_shell_d_min, schedule, twin_law, false, model); + return Validate(merged, cell, model, output_prefix, logger, data_space_group, probe_indexing_ambiguity, + nthreads, wavelength_A, report_shell_d_min, schedule, twin_law, false, placed); #endif } @@ -2107,7 +2102,7 @@ void KeepModelVerdict(ModelValidationResult &remade, const ModelValidationResult remade.model_space_group_number = decided.model_space_group_number; } -std::vector ModelReferenceIntensities(const std::string &model_path, +std::vector ModelReferenceIntensities(const RugnuxModel &model, const std::optional &cell, const gemmi::SpaceGroup *space_group, double d_min, @@ -2118,19 +2113,15 @@ std::vector ModelReferenceIntensities(const std::string &model return out; } - gemmi::Structure st; + gemmi::Structure st = model.structure; try { - // Detect, not the default: without it GEMMI picks the format from the extension and only - // falls back to the content when it does not recognise one. A model arrives named however - // whoever produced it named it, so the file itself is the better authority. - st = gemmi::read_structure_gz(model_path, gemmi::CoorFormat::Detect); expand_strict_ncs(st); } catch (const std::exception &e) { - logger.Error("Model reference: cannot read model {}: {}", model_path, e.what()); + logger.Error("Model reference: cannot read model {}: {}", model.name, e.what()); return out; } if (st.models.empty() || !st.cell.is_crystal()) { - logger.Error("Model reference: model {} has no atoms or no unit cell", model_path); + logger.Error("Model reference: model {} has no atoms or no unit cell", model.name); return out; } @@ -2153,7 +2144,7 @@ std::vector ModelReferenceIntensities(const std::string &model st.spacegroup_hm = space_group->xhm(); const gemmi::SpaceGroup *sg = st.find_spacegroup(); if (!sg) { - logger.Error("Model reference: model {} has no usable space group", model_path); + logger.Error("Model reference: model {} has no usable space group", model.name); return out; } st.setup_cell_images(); @@ -2203,6 +2194,6 @@ std::vector ModelReferenceIntensities(const std::string &model } logger.Info("Model reference: {} intensities computed from {} to {:.2f} A, space group {}", - out.size(), model_path, d_min, sg->short_name()); + out.size(), model.name, d_min, sg->short_name()); return out; } diff --git a/image_analysis/structure_refinement/ModelValidation.h b/image_analysis/structure_refinement/ModelValidation.h index 4bc05dff7..594c3fb65 100644 --- a/image_analysis/structure_refinement/ModelValidation.h +++ b/image_analysis/structure_refinement/ModelValidation.h @@ -15,6 +15,7 @@ #include "../../common/Reflection.h" // MergedReflection #include "../../common/UnitCell.h" +#include "RugnuxModel.h" class Logger; namespace gemmi { struct Structure; } @@ -22,7 +23,7 @@ namespace gemmi { struct Structure; } // Result of validating merged intensities against an atomic model. struct ModelValidationResult { bool ok = false; - std::string model_path; // the file that was asked for, so the report can name it + std::string model_name; // RugnuxModel::name, so the report can name the model that was asked for // Why it did not run, when ok is false: the file could not be read, had no atoms, no cell or no // usable space group. A caller that asked for a model must be able to say so rather than finish // quietly with no R-free and no maps, which reads exactly like a run that was never asked. @@ -208,8 +209,7 @@ struct ModelValidationResult { std::shared_ptr placed_model; }; -// Given merged intensities and an atomic model (PDB or mmCIF, gzipped or not - the format is taken -// from the file's content), scale the model structure factors (with an +// Given merged intensities and an atomic model, scale the model structure factors (with an // optimized flat bulk-solvent contribution and an overall anisotropic B) to the WORKING observed // amplitudes, then report R-work / R-free and write 2Fo-Fc and Fo-Fc electron-density maps // (CCP4) plus an MTZ of map coefficients next to output_prefix. Nothing the reported R-free is @@ -242,8 +242,8 @@ struct ModelValidationResult { // twin_law, where given, is a twin law of the data's group (a Miller-index operator in the data's // basis): the model is then also scored against the data as twinned by it (twin_target and below). // -// model, where given, is the model itself - one already placed in the data's cell, by molecular -// replacement - and model_path only names it; no other setting is then probed for it. +// placed, where given, is the model itself - one already placed in the data's cell, by molecular +// replacement - and `model` only names it; no other setting is then probed for it. // // report_shell_d_min is the merge statistics' own shell bounds, coarse to fine, and it is what // cc_model_shells is binned on. Sharing the grid is the point: a reader has to be able to put a @@ -329,7 +329,7 @@ ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need ModelValidationResult ValidateAgainstModel(const std::vector &merged, const UnitCell &cell, - const std::string &model_path, + const RugnuxModel &model, const std::string &output_prefix, Logger &logger, const gemmi::SpaceGroup *data_space_group = nullptr, @@ -339,7 +339,7 @@ ModelValidationResult ValidateAgainstModel(const std::vector & const std::vector &report_shell_d_min = {}, const ModelValidationSchedule &schedule = {}, const gemmi::Op *twin_law = nullptr, - const gemmi::Structure *model = nullptr); + const gemmi::Structure *placed = nullptr); // Reindex `merged` into the frame ValidateAgainstModel reported, so the reflection files that are // written describe the same indexing as the R-factors and the maps. Returns the space group they are @@ -378,7 +378,7 @@ ModelValidationResult ReadModelAnomalousMap(const std::vector // serial-stills run: there the ambiguity has to be broken per image, at integration time, long before // there is a merge to fit a model to. `cell` and `space_group` override the model's own, where // the run already knows them. Empty on any failure (which is logged). -std::vector ModelReferenceIntensities(const std::string &model_path, +std::vector ModelReferenceIntensities(const RugnuxModel &model, const std::optional &cell, const gemmi::SpaceGroup *space_group, double d_min, diff --git a/image_analysis/structure_refinement/MolecularReplacement.cpp b/image_analysis/structure_refinement/MolecularReplacement.cpp index 47d165261..fdb9d6f15 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.cpp +++ b/image_analysis/structure_refinement/MolecularReplacement.cpp @@ -18,15 +18,11 @@ #include #include #include -#include #include -#include -#include // read_structure_gz #include // remove_hydrogens, remove_alternative_conformations #include // setup_entities, remove_ligands_and_waters -#include // read_cif_gz #include // DensityCalculator #include // IT92 x-ray form factors #include // Scaling (bulk solvent + anisotropic B) @@ -892,19 +888,10 @@ void finish_search_model(SearchModel &m) { } // namespace -SearchModel PrepareSearchModel(const std::string &path) { +SearchModel PrepareSearchModel(const RugnuxModel &model_in) { SearchModel out; - bool modelcif = false; - try { - out.st = gemmi::read_structure_gz(path, gemmi::CoorFormat::Detect); - if (out.st.input_format == gemmi::CoorFormat::Mmcif) { - const gemmi::cif::Document doc = gemmi::read_cif_gz(path); - modelcif = !doc.blocks.empty() && doc.blocks[0].has_mmcif_category("_ma_qa_metric"); - } - } catch (const std::exception &e) { - out.failure_reason = std::string("cannot read the model: ") + e.what(); - return out; - } + const bool modelcif = model_in.modelcif; + out.st = model_in.structure; if (out.st.models.empty()) { out.failure_reason = "the model has no atoms"; return out; @@ -978,39 +965,15 @@ SearchModel PrepareSearchModel(const std::string &path) { // --- domains from the predicted aligned error --- -std::string PaePathFor(const std::string &model_path) { - const size_t slash = model_path.find_last_of("/\\"); - const std::string dir = slash == std::string::npos ? std::string() : model_path.substr(0, slash + 1); - const std::string name = model_path.substr(dir.size()); - const size_t at = name.rfind("-model_v"); - if (at == std::string::npos) - return {}; - const size_t dot = name.find('.', at); - const std::string version = name.substr(at + 8, dot == std::string::npos ? std::string::npos : dot - at - 8); - return dir + name.substr(0, at) + "-predicted_aligned_error_v" + version + ".json"; -} - // A prediction cut into domains by its predicted aligned error before molecular replacement, as Oeffner et // al. (2022) Acta Cryst. D78, 1303-1314 do; here by average linkage. -std::vector> PaeDomains(const std::string &pae_path, const SearchModel &model) { +std::vector> PaeDomains(const std::vector> &pae, const SearchModel &model) { // Two domains a prediction does not place relative to each other with confidence are this far apart in // mean PAE (within one domain it is a few angstroms); a domain is at least this many residues. constexpr double PAE_DOMAIN_A = 10.0; constexpr int DOMAIN_MIN_RESIDUES = 40; // The clustering starts from runs of this many consecutive residues kept. constexpr int PIECE = 5; - std::vector> pae; - try { - std::ifstream in(pae_path); - if (!in) - return {}; - const nlohmann::json j = nlohmann::json::parse(in); - const nlohmann::json &m = j.is_array() ? j.at(0).at("predicted_aligned_error") : j.at("predicted_aligned_error"); - for (const auto &row : m) - pae.push_back(row.get>()); - } catch (const std::exception &) { - return {}; - } const size_t n = pae.size(); if (n != static_cast(model.residues_read) || std::any_of(pae.begin(), pae.end(), [n](const std::vector &r) { return r.size() != n; })) @@ -3323,7 +3286,7 @@ MolecularReplacementGPUPlan PlanMolecularReplacementGPU(const MolecularReplaceme return plan; } -MolecularReplacementResult RunMolecularReplacement(const std::string &model_path, const std::vector &merges, +MolecularReplacementResult RunMolecularReplacement(const RugnuxModel &input, const std::vector &merges, Logger &logger, size_t nthreads, size_t gpu_resident_bytes) { const auto t0 = std::chrono::steady_clock::now(); // What the search may hold on the card: the budget model validation keeps to. What the stream-ordered pool @@ -3338,25 +3301,24 @@ MolecularReplacementResult RunMolecularReplacement(const std::string &model_path #else (void) gpu_resident_bytes; #endif - SearchModel model = PrepareSearchModel(model_path); + SearchModel model = PrepareSearchModel(input); if (!model.failure_reason.empty()) { MolecularReplacementResult result; - result.model_path = model_path; + result.model_name = input.name; result.residues_read = model.residues_read; result.failure_reason = model.failure_reason; return result; } model.description = "the whole model"; // Only a prediction has a predicted aligned error. - const std::string pae_path = model.predicted ? PaePathFor(model_path) : std::string(); - const std::vector> domains = pae_path.empty() ? std::vector>() - : PaeDomains(pae_path, model); + const bool pae = model.predicted && input.pae.has_value(); + const std::vector> domains = pae ? PaeDomains(*input.pae, model) : std::vector>(); const double t_model = seconds_since(t0); - if (!pae_path.empty()) - logger.Info("Molecular replacement: {} rigid domain(s) in the predicted aligned error {}", domains.size(), pae_path); + if (pae) + logger.Info("Molecular replacement: {} rigid domain(s) in the predicted aligned error", domains.size()); MolecularReplacementResult result = search_model(model, merges, logger, nthreads, gpu_budget); - result.model_path = model_path; + result.model_name = input.name; result.pae_domains = static_cast(domains.size()); result.t_model += t_model; // Where the whole model is placed nowhere and its prediction falls apart into domains whose relative @@ -3403,7 +3365,7 @@ MolecularReplacementResult RunMolecularReplacement(const std::string &model_path found[best].candidates[found[best].chosen].space_group.xhm()); } else if (best >= 0 && agree) { MolecularReplacementResult chosen = std::move(found[best]); - chosen.model_path = model_path; + chosen.model_name = input.name; chosen.pae_domains = result.pae_domains; chosen.t_model = result.t_model; chosen.t_transform = result.t_transform; diff --git a/image_analysis/structure_refinement/MolecularReplacement.h b/image_analysis/structure_refinement/MolecularReplacement.h index ea163349a..29105a330 100644 --- a/image_analysis/structure_refinement/MolecularReplacement.h +++ b/image_analysis/structure_refinement/MolecularReplacement.h @@ -35,6 +35,7 @@ #include "../../common/Reflection.h" // MergedReflection #include "../../common/UnitCell.h" +#include "RugnuxModel.h" class Logger; @@ -55,19 +56,16 @@ struct SearchModel { }; // A prediction where the file says so - ModelCIF's _ma_qa_metric - or where it has no cell and its B column // holds one value per residue, from 0 to 100; an experimental structure otherwise. -SearchModel PrepareSearchModel(const std::string &path); +SearchModel PrepareSearchModel(const RugnuxModel &model); -// The rigid domains of a prediction from its predicted aligned error (PAE, the AlphaFold DB's JSON: a matrix +// The rigid domains of a prediction from its predicted aligned error (PAE, the AlphaFold DB's matrix // "predicted_aligned_error" over the residues of the whole prediction): the kept residues clustered by average // linkage on the symmetrised PAE until every two clusters are a mean PAE_DOMAIN_A apart; clusters of at least -// DOMAIN_MIN_RESIDUES, largest first, each a list of positions in the prediction. Empty where the file cannot -// be read or does not match the model. -std::vector> PaeDomains(const std::string &pae_path, const SearchModel &model); +// DOMAIN_MIN_RESIDUES, largest first, each a list of positions in the prediction. Empty where the matrix does +// not match the model. +std::vector> PaeDomains(const std::vector> &pae, const SearchModel &model); // The search model of one domain: the residues of `model` at those positions, recentred. SearchModel DomainModel(const SearchModel &model, const std::vector &residues); -// The PAE file the AlphaFold DB puts beside a model: AF--F1-model_v.cif -> -// AF--F1-predicted_aligned_error_v.json in the same directory; empty where the name does not follow it. -std::string PaePathFor(const std::string &model_path); // Rotations covering SO(3) with neighbours about `step_deg` apart: the identity, then shells of // rotation angle kappa = step, 2 step, ... 180 deg, each with its axes on a golden-spiral lattice of @@ -341,7 +339,7 @@ struct MRCandidate { struct MolecularReplacementResult { bool ok = false; std::string failure_reason; - std::string model_path; + std::string model_name; // RugnuxModel::name int residues_read = 0, residues_kept = 0; double mass_da = 0; std::string search_model; // the whole model, or the PAE domain the decision was made with @@ -405,7 +403,7 @@ struct MolecularReplacementGPUPlan { // to be done rather than spilling past it. MolecularReplacementGPUPlan PlanMolecularReplacementGPU(const MolecularReplacementGPUNeed &need); -// Search `merges` (the answer's first) for the predicted model at `model_path`, in every space group with +// Search `merges` (the answer's first) for the predicted `model`, in every space group with // the rotations of each merge's group - one copy, then further copies one at a time while each new one // stands out, packs and lowers R-free - and decide. A candidate is PLACED where a copy's translation // function stands out (TF Z >= 8), the copies pack, one copy fits the cell, and its R-work beats its own @@ -413,7 +411,7 @@ MolecularReplacementGPUPlan PlanMolecularReplacementGPU(const MolecularReplaceme // every other by an R-free margin; it chooses the twin hypothesis' merge only where none of the // answer's groups can hold the model at all (Matthews, packing) and a group of the subgroup can. // `gpu_resident_bytes`: what is held on the card meanwhile by what came before (a merge engine still at work). -MolecularReplacementResult RunMolecularReplacement(const std::string &model_path, const std::vector &merges, +MolecularReplacementResult RunMolecularReplacement(const RugnuxModel &model, const std::vector &merges, Logger &logger, size_t nthreads, size_t gpu_resident_bytes = 0); // The hand check of an ENANTIOMORPH decision, filled into result.hand_check: taken into the answer by diff --git a/image_analysis/structure_refinement/RugnuxModel.h b/image_analysis/structure_refinement/RugnuxModel.h new file mode 100644 index 000000000..92253b2f7 --- /dev/null +++ b/image_analysis/structure_refinement/RugnuxModel.h @@ -0,0 +1,20 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include +#include + +#include "gemmi/model.hpp" + +// An atomic model handed to a run (rugnux --model / --mr, the broker's upload), as its file held it. The +// caller parses it (ParseRugnuxModel, writer/RugnuxModelFile.h); the analysis reads no file. +struct RugnuxModel { + std::string name; // what the report calls it: the file it was given as + gemmi::Structure structure; // as read, input_format kept + bool modelcif = false; // a ModelCIF file (_ma_qa_metric): a prediction, whatever its B column holds + // A prediction's predicted aligned error over the residues of the whole prediction, where it came with one. + std::optional>> pae; +}; diff --git a/receiver/JFJochReceiverRugnux.cpp b/receiver/JFJochReceiverRugnux.cpp index 2254855ca..ec3084643 100644 --- a/receiver/JFJochReceiverRugnux.cpp +++ b/receiver/JFJochReceiverRugnux.cpp @@ -86,7 +86,7 @@ JFJochReceiverRugnux::JFJochReceiverRugnux(const DiffractionExperiment &in_exper Logger &in_logger, int64_t in_forward_nthreads, int in_rugnux_nthreads, - const std::string &in_model_path, + std::shared_ptr in_model, double in_deadline_s, RugnuxLiveStatus &in_live_status, const SpotFindingSettings &in_spot_finding_settings, @@ -102,7 +102,7 @@ JFJochReceiverRugnux::JFJochReceiverRugnux(const DiffractionExperiment &in_exper reader(in_image_buffer), forward_nthreads(JFJochReceiverLite::NumberOfDataAnalysisThreads(in_forward_nthreads, in_experiment)), rugnux_nthreads(in_rugnux_nthreads), - model_path(in_model_path), + model(std::move(in_model)), deadline_s(in_deadline_s), live_status(in_live_status), measurement_started(1), @@ -246,7 +246,7 @@ void JFJochReceiverRugnux::RugnuxThread() { parallel_detail::WorkerPool::Instance().SetNice(10); try { const auto dataset = reader.GetDataset(); - const RugnuxLiveSetup setup = MakeRugnuxLiveSetup(*dataset, rugnux_nthreads, scratch_dir + "/p", model_path); + const RugnuxLiveSetup setup = MakeRugnuxLiveSetup(*dataset, rugnux_nthreads, scratch_dir + "/p", model); LiveObserver observer(plots, scan_result, *az_int_mapping, live_status, logger); ProcessResult result; { @@ -288,7 +288,7 @@ void JFJochReceiverRugnux::ProbeThread() { const int64_t frames = std::lround(PROBE_DEG / std::abs(gonio->GetIncrement_deg())); if (2 * frames > static_cast(reader.GetNumberOfImages())) return; // a sweep this short is decided on soon enough by the run itself - RugnuxLiveSetup setup = MakeRugnuxLiveSetup(*dataset, rugnux_nthreads, "", ""); + RugnuxLiveSetup setup = MakeRugnuxLiveSetup(*dataset, rugnux_nthreads, "", nullptr); setup.config.end_image = static_cast(frames); setup.config.rotation_postrefine_geometry = false; setup.config.run_scaling = false; diff --git a/receiver/JFJochReceiverRugnux.h b/receiver/JFJochReceiverRugnux.h index 1e480e4df..22a3e9742 100644 --- a/receiver/JFJochReceiverRugnux.h +++ b/receiver/JFJochReceiverRugnux.h @@ -29,7 +29,7 @@ class JFJochReceiverRugnux : public JFJochReceiver { const int64_t forward_nthreads; const int rugnux_nthreads; - const std::string model_path; + const std::shared_ptr model; const double deadline_s; // after the last image, the analysis is cut (0 = never) std::string scratch_dir; // rugnux's own output, read back into the end message RugnuxLiveStatus &live_status; @@ -66,7 +66,7 @@ public: Logger &logger, int64_t forward_nthreads, int rugnux_nthreads, - const std::string &model_path, + std::shared_ptr model, double deadline_s, RugnuxLiveStatus &live_status, const SpotFindingSettings &spot_finding_settings, diff --git a/receiver/JFJochReceiverService.cpp b/receiver/JFJochReceiverService.cpp index ce0c633c3..36a65245d 100644 --- a/receiver/JFJochReceiverService.cpp +++ b/receiver/JFJochReceiverService.cpp @@ -20,14 +20,14 @@ JFJochReceiverService::JFJochReceiverService(AcquisitionDeviceGroup &in_aq_devic spot_finding_settings(DiffractionExperiment::DefaultDataProcessingSettings()) { } -JFJochReceiverService &JFJochReceiverService::RugnuxLive(bool enable, const std::string &model_path, +JFJochReceiverService &JFJochReceiverService::RugnuxLive(bool enable, std::shared_ptr model, int reserved_cpus, double deadline_s) { std::unique_lock ul_state(state_mutex); if (state != ReceiverState::Idle) throw JFJochException(JFJochExceptionCategory::WrongDAQState, "Cannot change rugnux settings during data collection"); rugnux_enable = enable; - rugnux_model_path = model_path; + rugnux_model = std::move(model); rugnux_reserved_cpus = reserved_cpus; rugnux_deadline_s = deadline_s; return *this; @@ -127,7 +127,7 @@ void JFJochReceiverService::Start(const DiffractionExperiment &experiment, receiver = std::make_unique( experiment, pixel_mask, *image_puller, image_pusher, logger, nthreads_local, std::max(1, static_cast(AvailableCpus()) - rugnux_reserved_cpus), - rugnux_model_path, rugnux_deadline_s, rugnux_status, spot_finding_settings, receiver_status, plots, image_buffer, + rugnux_model, rugnux_deadline_s, rugnux_status, spot_finding_settings, receiver_status, plots, image_buffer, zmq_preview_socket.get(), zmq_metadata_socket.get()); break; } diff --git a/receiver/JFJochReceiverService.h b/receiver/JFJochReceiverService.h index 57a9985a5..1eb6d4df6 100644 --- a/receiver/JFJochReceiverService.h +++ b/receiver/JFJochReceiverService.h @@ -14,6 +14,8 @@ #include "../preview/ZMQMetadataSocket.h" #include "../preview/ZMQPreviewSocket.h" +struct RugnuxModel; + class JFJochReceiverService { std::unique_ptr receiver; AcquisitionDeviceGroup &aq_devices; @@ -26,7 +28,7 @@ class JFJochReceiverService { // Rotation collections from a DECTRIS detector analysed by rugnux while they arrive // (JFJochReceiverRugnux), instead of image by image. Off unless asked for. bool rugnux_enable = false; - std::string rugnux_model_path; + std::shared_ptr rugnux_model; int rugnux_reserved_cpus = 4; // left to the forward threads and the pusher double rugnux_deadline_s = 0; // the analysis is cut this long after the last image (0 = never) RugnuxLiveStatus rugnux_status; // of the last collection, kept after it ends @@ -53,7 +55,7 @@ public: ImagePusher &pusher, size_t send_buffer_size_MiB = 512); JFJochReceiverService& NumThreads(int64_t input); - JFJochReceiverService& RugnuxLive(bool enable, const std::string &model_path, int reserved_cpus, + JFJochReceiverService& RugnuxLive(bool enable, std::shared_ptr model, int reserved_cpus, double deadline_s); RugnuxLiveSnapshot GetRugnuxStatus() const; JFJochReceiverService& PreviewSocket(const std::string &addr, const std::optional &watermark = {}); diff --git a/rugnux/ResultReport.cpp b/rugnux/ResultReport.cpp index bda044f24..9e56e7da6 100644 --- a/rugnux/ResultReport.cpp +++ b/rugnux/ResultReport.cpp @@ -2329,7 +2329,7 @@ ReportDocument BuildReportDocument(const std::string &output_prefix, ModelValidationResult unplaced; if (!result.model_validation) { const auto &mp = *result.model_prior; - unplaced.model_path = mp.model_path; + unplaced.model_name = mp.model_name; unplaced.failure_reason = mp.ok ? "molecular replacement did not place the model" : "the model could not be searched for: " + mp.failure_reason; } @@ -2338,7 +2338,7 @@ ReportDocument BuildReportDocument(const std::string &output_prefix, const bool mr_hand = by_mr && result.model_prior->hand_check.adopted; ReportSection s; s.title = "5. MODEL VALIDATION"; - Add(s, KeyText("MODEL_FILE", mv.model_path)); + Add(s, KeyText("MODEL_FILE", mv.model_name)); if (!result.model_placement.empty()) Add(s, KeyEnum("MODEL_PLACEMENT", result.model_placement, {"RIGID_BODY", "MR", "NOT_PLACED"})); if (!mv.ok) { diff --git a/rugnux/Rugnux.cpp b/rugnux/Rugnux.cpp index a7c231288..23c1dfedb 100644 --- a/rugnux/Rugnux.cpp +++ b/rugnux/Rugnux.cpp @@ -967,12 +967,12 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b std::vector model_reference; if (!config_.reference_data.empty()) { indexer->ReferenceIntensities(config_.reference_data); - } else if (!config_.model_path.empty() && !experiment_.IsRotationIndexing() + } else if (config_.model && !experiment_.IsRotationIndexing() && experiment_.GetUnitCell().has_value() && experiment_.GetGemmiSpaceGroup().has_value()) { const auto d_min = experiment_.GetScalingSettings().GetHighResolutionLimit_A() .value_or(experiment_.GetDetectorMaxResolution_A()); model_reference = ModelReferenceIntensities( - config_.model_path, experiment_.GetUnitCell(), + *config_.model, experiment_.GetUnitCell(), &experiment_.GetSpaceGroupOrP1(), d_min, logger); if (!model_reference.empty()) { indexer->ReferenceIntensities(model_reference); diff --git a/rugnux/Rugnux.h b/rugnux/Rugnux.h index afbdca2aa..c70acc7da 100644 --- a/rugnux/Rugnux.h +++ b/rugnux/Rugnux.h @@ -207,10 +207,10 @@ struct ProcessConfig { // run can write both. bool export_unmerged_partials = false; - // If set, after merging, validate the merged intensities against this atomic model (PDB or - // mmCIF, gzipped or not): compute R-free with an optimized bulk solvent and write 2Fo-Fc / - // Fo-Fc maps (--model). - std::string model_path; + // If set, after merging, validate the merged intensities against this atomic model: compute + // R-free with an optimized bulk solvent and write 2Fo-Fc / Fo-Fc maps (--model). The caller parses + // it (ParseRugnuxModel, writer/RugnuxModelFile.h). + std::shared_ptr model; // --mr: the model is searched for by molecular replacement straight away, without the rigid-body // placement first. Without it a --model that is a prediction, or an experimental structure the rigid body diff --git a/rugnux/RugnuxCommandLine.cpp b/rugnux/RugnuxCommandLine.cpp index 1de2ddb02..4dd6d6dc7 100644 --- a/rugnux/RugnuxCommandLine.cpp +++ b/rugnux/RugnuxCommandLine.cpp @@ -82,8 +82,8 @@ std::string RugnuxCommandLine(const ProcessConfig &config, if (!config.reference_column.empty()) add("--reference-column", config.reference_column); } - if (!config.model_path.empty()) - add(config.force_mr ? "--mr" : "--model", config.model_path); + if (config.model) + add(config.force_mr ? "--mr" : "--model", config.model->name); } if (config.start_image != 0) add("-s", std::to_string(config.start_image)); diff --git a/rugnux/RugnuxLive.cpp b/rugnux/RugnuxLive.cpp index afd1bc3f1..b05cf60b8 100644 --- a/rugnux/RugnuxLive.cpp +++ b/rugnux/RugnuxLive.cpp @@ -6,7 +6,7 @@ #include "RugnuxDefaults.h" RugnuxLiveSetup MakeRugnuxLiveSetup(const JFJochReaderDataset &dataset, int nthreads, - const std::string &output_prefix, const std::string &model_path) { + const std::string &output_prefix, std::shared_ptr model) { RugnuxLiveSetup s; // The experiment as rugnux_cli.cpp sets it up for a rotation sweep with no options given. @@ -48,7 +48,7 @@ RugnuxLiveSetup MakeRugnuxLiveSetup(const JFJochReaderDataset &dataset, int nthr c.beam_center_check = true; c.measure_spot_budget = true; c.run_scaling = true; - c.model_path = model_path; + c.model = std::move(model); c.live = true; c.fast_live = true; // Decided late, on the whole sweep, as it re-checks its radius there - which fast_live does not. diff --git a/rugnux/RugnuxLive.h b/rugnux/RugnuxLive.h index c4aba1297..c1e0820e8 100644 --- a/rugnux/RugnuxLive.h +++ b/rugnux/RugnuxLive.h @@ -18,4 +18,4 @@ struct RugnuxLiveSetup { }; RugnuxLiveSetup MakeRugnuxLiveSetup(const JFJochReaderDataset &dataset, int nthreads, - const std::string &output_prefix, const std::string &model_path); + const std::string &output_prefix, std::shared_ptr model); diff --git a/rugnux/RugnuxScaleMerge.cpp b/rugnux/RugnuxScaleMerge.cpp index 78ea9d081..6cb1ff152 100644 --- a/rugnux/RugnuxScaleMerge.cpp +++ b/rugnux/RugnuxScaleMerge.cpp @@ -1571,8 +1571,8 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { size_t model_rotations = 0; std::optional model_group; gemmi::UnitCell model_cell; - if (!config_.model_path.empty() && write_files && !geometry_prepass) { - const SearchModel m = PrepareSearchModel(config_.model_path); + if (config_.model && write_files && !geometry_prepass) { + const SearchModel m = PrepareSearchModel(*config_.model); model_predicted = m.failure_reason.empty() && m.predicted; if (const gemmi::SpaceGroup *sg = m.st.find_spacegroup(); sg != nullptr && m.st.cell.is_crystal()) { model_rotations = sg->operations().sym_ops.size(); @@ -3073,7 +3073,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { // comparison), so with one the merge in the subgroup is made wherever a metric re-ask promoted from the // indexed lattice's group, or the model is in a group with fewer rotations than the adopted one. const bool model_tests_twin = - !config_.model_path.empty() + config_.model && (twin_metric_subgroup.has_value() || (!model_predicted && model_rotations > 0 && model_rotations < result.space_group->operations().sym_ops.size())); @@ -4000,7 +4000,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { Note("cut: the model is left out"); return true; }; - const bool model_run = result.consensus_cell && write_files && !config_.model_path.empty() && !geometry_prepass + const bool model_run = result.consensus_cell && write_files && config_.model && !geometry_prepass && !superseded && !model_cut(); // The twin hypothesis the model is asked about: its own subgroup's merge where it has one, the data's // otherwise - and whether that merge was made only for the model, so is written only where it chooses it. @@ -4096,7 +4096,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { schedule.gpu_resident_bytes = merge_on_card; schedule.gpu_beside_bytes = beside; ahead.merged = std::move(merged); - return ValidateAgainstModel(ahead.merged, cell, config_.model_path, config_.output_prefix, ahead.log, + return ValidateAgainstModel(ahead.merged, cell, *config_.model, config_.output_prefix, ahead.log, in, /*probe_indexing_ambiguity=*/false, static_cast(config_.nthreads), wavelength, report_shell_d_min, schedule); @@ -4115,7 +4115,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { // validation decides: relabelling the outcomes and the group is what it must not see happen. // Every such relabelling reaches the P1 merge afterwards, through merge_to_written. ModelValidationResult validation = - ValidateAgainstModel(sm.merged, *result.consensus_cell, config_.model_path, + ValidateAgainstModel(sm.merged, *result.consensus_cell, *config_.model, config_.output_prefix, logger, data_sg ? &*data_sg : nullptr, /*probe_indexing_ambiguity=*/config_.reference_data.empty(), static_cast(config_.nthreads), experiment_.GetWavelength_A(), @@ -4199,7 +4199,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { ModelValidationSchedule kept_verdict; kept_verdict.fit_test = false; kept_verdict.gpu_resident_bytes = merge_on_card; - remade = ValidateAgainstModel(sm.merged, *result.consensus_cell, config_.model_path, + remade = ValidateAgainstModel(sm.merged, *result.consensus_cell, *config_.model, config_.output_prefix, logger, sg_now ? &*sg_now : nullptr, /*probe_indexing_ambiguity=*/false, @@ -4246,7 +4246,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { twin_schedule.maps_superseded = [&](const ModelValidationResult &v) { return !maps_from(v); }; phase("Validating against model (twin hypothesis)"); auto twin_validation = ValidateAgainstModel( - mt.merged, mt.cell, config_.model_path, config_.output_prefix, logger, + mt.merged, mt.cell, *config_.model, config_.output_prefix, logger, &mt.space_group, /*probe_indexing_ambiguity=*/config_.reference_data.empty(), static_cast(config_.nthreads), experiment_.GetWavelength_A(), {}, twin_schedule, &mt.law); @@ -4328,7 +4328,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { if (model_twin) merges.push_back({"TWIN_SUBGROUP_MERGE", &model_twin->merged, model_twin->cell, model_twin->space_group, model_twin->law}); - MolecularReplacementResult mr = RunMolecularReplacement(config_.model_path, merges, logger, + MolecularReplacementResult mr = RunMolecularReplacement(*config_.model, merges, logger, static_cast(config_.nthreads), merge_on_card); if (mr.chosen >= 0) { const MRCandidate &c = mr.candidates[mr.chosen]; @@ -4371,7 +4371,7 @@ bool Rugnux::ScaleMergeAndSymmetry(PipelineLocals &p) { placed_elsewhere.gpu_resident_bytes = merge_on_card; phase("Validating against model (molecular replacement)"); ModelValidationResult v = ValidateAgainstModel( - own ? own->merged : sm.merged, cell, config_.model_path, + own ? own->merged : sm.merged, cell, *config_.model, own ? result.model_prior_file_prefix : config_.output_prefix, logger, &data_sg, /*probe_indexing_ambiguity=*/false, static_cast(config_.nthreads), experiment_.GetWavelength_A(), report_shell_d_min, placed_elsewhere, nullptr, c.placed.get()); diff --git a/rugnux/rugnux_cli.cpp b/rugnux/rugnux_cli.cpp index e218c8a70..c77b05cb1 100644 --- a/rugnux/rugnux_cli.cpp +++ b/rugnux/rugnux_cli.cpp @@ -70,6 +70,7 @@ #include "RugnuxDefaults.h" #include "../image_analysis/structure_refinement/ModelValidation.h" #include "../writer/WriteModel.h" +#include "../writer/RugnuxModelFile.h" #include "ResultReport.h" #include "RugnuxConsole.h" #ifdef __APPLE__ @@ -1609,6 +1610,16 @@ static int RunRugnux(int argc, char **argv, bool no_gpu) { logger.Error("--model and --mr both name the model; give one"); exit(EXIT_FAILURE); } + // Read before anything runs: a file that holds no model ends the run here rather than after it. + std::shared_ptr model; + if (const std::string path = mr_model.empty() ? model_pdb : mr_model; !path.empty()) { + try { + model = std::make_shared(ReadRugnuxModelFile(path)); + } catch (const std::exception &e) { + logger.Error("Cannot read the model {}: {}", path, e.what()); + exit(EXIT_FAILURE); + } + } if ((indexing_algorithm == IndexingAlgorithmEnum::FFT || indexing_algorithm == IndexingAlgorithmEnum::FFBIDX) && get_gpu_count() == 0) { @@ -2300,7 +2311,7 @@ static int RunRugnux(int argc, char **argv, bool no_gpu) { // looking exactly like one that was never given --model. std::string model_validation_failure; std::optional model_validation; - if (!output_prefix.empty() && !model_pdb.empty()) { + if (!output_prefix.empty() && model) { console->OnStep("Model validation"); const auto data_sg = experiment.GetGemmiSpaceGroup(); // With a reference MTZ the merohedral indexing was already resolved (stills per-image @@ -2310,7 +2321,7 @@ static int RunRugnux(int argc, char **argv, bool no_gpu) { for (const auto &sh : merged_statistics.shells) report_shell_d_min.push_back(sh.d_min); const auto validation = - ValidateAgainstModel(merged_reflections, *experiment.GetUnitCell(), model_pdb, + ValidateAgainstModel(merged_reflections, *experiment.GetUnitCell(), *model, output_prefix, logger, data_sg ? &*data_sg : nullptr, /*probe_indexing_ambiguity=*/reference_data.empty(), @@ -3135,7 +3146,7 @@ static int RunRugnux(int argc, char **argv, bool no_gpu) { config.observation_dump_path = dump_observations; config.export_unmerged = export_unmerged; config.export_unmerged_partials = export_unmerged_partials; - config.model_path = mr_model.empty() ? model_pdb : mr_model; + config.model = model; config.force_mr = !mr_model.empty(); // When merging, the merged reflections (.mtz/.cif) are the wanted output; skip the large // _process.h5 unless explicitly requested. Without merging, the _process.h5 is the only output. diff --git a/tests/ModelScaleGPUTest.cpp b/tests/ModelScaleGPUTest.cpp index 86c167f83..90a3230b1 100644 --- a/tests/ModelScaleGPUTest.cpp +++ b/tests/ModelScaleGPUTest.cpp @@ -30,6 +30,7 @@ #include "../image_analysis/structure_refinement/ModelScaleGPU.h" #include "../image_analysis/structure_refinement/ModelValidation.h" #include "../image_analysis/structure_refinement/RigidBodyRefine.h" +#include "../writer/RugnuxModelFile.h" namespace { @@ -104,7 +105,7 @@ gemmi::Scaling ModelPoints(const char *cryst, double zone) { const std::string path = "model_scale_gpu_test.pdb"; std::ofstream(path) << pdb; Logger logger("ModelScaleGPUTest"); - const auto reference = ModelReferenceIntensities(path, {}, {}, 3.0, logger); + const auto reference = ModelReferenceIntensities(ReadRugnuxModelFile(path), {}, {}, 3.0, logger); gemmi::Structure st = gemmi::read_structure_gz(path, gemmi::CoorFormat::Detect); std::filesystem::remove(path); st.setup_cell_images(); diff --git a/tests/ModelValidationTest.cpp b/tests/ModelValidationTest.cpp index cec04d31d..131ef6712 100644 --- a/tests/ModelValidationTest.cpp +++ b/tests/ModelValidationTest.cpp @@ -31,6 +31,7 @@ #endif #include "../image_analysis/structure_refinement/SigmaA.h" #include "../writer/WriteModel.h" +#include "../writer/RugnuxModelFile.h" #include "../image_analysis/scale_merge/ReindexAmbiguity.h" namespace { @@ -107,6 +108,10 @@ ATOM 2 C . CB GLY A 1 12.000 14.000 16.000 1.00 20.00 f.close(); return name; } + + RugnuxModel ReadModel(const std::string &path) { + return ReadRugnuxModelFile(path); + } } // --model used to call gemmi::read_pdb unconditionally, so a deposited model handed over as mmCIF - @@ -212,8 +217,8 @@ TEST_CASE("ModelValidation_ReadsPdbAndMmcif", "[ModelValidation]") { const auto pdb = WriteTemp("model_validation_test.pdb", kPdb); const auto cif = WriteTemp("model_validation_test.cif", kMmcif); - const auto from_pdb = ModelReferenceIntensities(pdb, {}, {}, 4.0, logger); - const auto from_cif = ModelReferenceIntensities(cif, {}, {}, 4.0, logger); + const auto from_pdb = ModelReferenceIntensities(ReadModel(pdb), {}, {}, 4.0, logger); + const auto from_cif = ModelReferenceIntensities(ReadModel(cif), {}, {}, 4.0, logger); REQUIRE_FALSE(from_pdb.empty()); REQUIRE_FALSE(from_cif.empty()); @@ -222,7 +227,7 @@ TEST_CASE("ModelValidation_ReadsPdbAndMmcif", "[ModelValidation]") { // The extension is not what decides: the same mmCIF under a .pdb name still reads. const auto misnamed = WriteTemp("model_validation_test_misnamed.pdb", kMmcif); - CHECK_FALSE(ModelReferenceIntensities(misnamed, {}, {}, 4.0, logger).empty()); + CHECK_FALSE(ModelReferenceIntensities(ReadModel(misnamed), {}, {}, 4.0, logger).empty()); std::filesystem::remove(pdb); std::filesystem::remove(cif); @@ -256,8 +261,8 @@ TEST_CASE("ModelValidation_ExpandsStrictNcs", "[ModelValidation]") { const auto ncs_path = WriteTemp("model_validation_test_ncs.pdb", with_ncs); const auto full_path = WriteTemp("model_validation_test_ncs_full.pdb", expanded); - const auto from_ncs = ModelReferenceIntensities(ncs_path, {}, {}, 4.0, logger); - const auto from_full = ModelReferenceIntensities(full_path, {}, {}, 4.0, logger); + const auto from_ncs = ModelReferenceIntensities(ReadModel(ncs_path), {}, {}, 4.0, logger); + const auto from_full = ModelReferenceIntensities(ReadModel(full_path), {}, {}, 4.0, logger); REQUIRE(from_ncs.size() == from_full.size()); REQUIRE_FALSE(from_ncs.empty()); for (size_t i = 0; i < from_ncs.size(); i++) { @@ -275,22 +280,22 @@ TEST_CASE("ModelValidation_ExpandsStrictNcs", "[ModelValidation]") { TEST_CASE("ModelValidation_UnusableModelGivesAReason", "[ModelValidation]") { Logger logger("ModelValidation_UnusableModelGivesAReason"); + // A file that holds no model is refused where it is read, before anything runs. const auto empty_file = WriteTemp("model_validation_test_bogus.pdb", "not a coordinate file\n"); + CHECK_THROWS(ReadModel(empty_file)); + CHECK_THROWS(ReadModel("model_validation_test_does_not_exist.pdb")); + std::filesystem::remove(empty_file); + // A model with atoms but no crystal cell to put them in. + RugnuxModel no_cell; + no_cell.name = "no_cell.pdb"; + no_cell.structure.models.emplace_back(1); const auto result = ValidateAgainstModel({}, UnitCell{.a = 40, .b = 50, .c = 60, .alpha = 90, .beta = 90, .gamma = 90}, - empty_file, "", logger); + no_cell, "", logger); CHECK_FALSE(result.ok); CHECK_FALSE(result.failure_reason.empty()); - CHECK_THAT(result.failure_reason, Catch::Matchers::ContainsSubstring(empty_file)); - - const auto missing = ValidateAgainstModel({}, UnitCell{.a = 40, .b = 50, .c = 60, - .alpha = 90, .beta = 90, .gamma = 90}, - "model_validation_test_does_not_exist.pdb", "", logger); - CHECK_FALSE(missing.ok); - CHECK_FALSE(missing.failure_reason.empty()); - - std::filesystem::remove(empty_file); + CHECK_THAT(result.failure_reason, Catch::Matchers::ContainsSubstring("no_cell.pdb")); } // A rigid-body step is only worth taking if it can find a shift it was not told about. The check is @@ -306,7 +311,7 @@ TEST_CASE("ModelValidation_RigidBodyRecoversASmallShift", "[ModelValidation]") { // "Observed" amplitudes: the model's own structure factors, so the target's minimum is exactly // where the model started. - const auto ref = ModelReferenceIntensities(path, {}, {}, 3.0, logger); + const auto ref = ModelReferenceIntensities(ReadModel(path), {}, {}, 3.0, logger); REQUIRE_FALSE(ref.empty()); gemmi::AsuData> fobs; fobs.unit_cell_ = st.cell; @@ -353,7 +358,7 @@ TEST_CASE("ModelValidation_RigidBodyLeavesThePolarDirectionAlone", "[ModelValida REQUIRE(sg != nullptr); st.setup_cell_images(); - const auto ref = ModelReferenceIntensities(path, {}, {}, 3.0, logger); + const auto ref = ModelReferenceIntensities(ReadModel(path), {}, {}, 3.0, logger); REQUIRE_FALSE(ref.empty()); gemmi::AsuData> fobs; fobs.unit_cell_ = st.cell; @@ -400,7 +405,7 @@ TEST_CASE("ModelValidation_RigidBodySolventStaysPhysical", "[ModelValidation]") REQUIRE(sg != nullptr); st.setup_cell_images(); - const auto ref = ModelReferenceIntensities(path, {}, {}, 3.0, logger); + const auto ref = ModelReferenceIntensities(ReadModel(path), {}, {}, 3.0, logger); REQUIRE_FALSE(ref.empty()); gemmi::AsuData> fobs; fobs.unit_cell_ = st.cell; @@ -487,7 +492,7 @@ TEST_CASE("ModelValidation_FindsTheDatasDescriptionOfTheLattice", "[ModelValidat // The data: the cluster's own |F|^2 in its own frame, 30 x 34 x 38, P 21 21 21. const auto data_model = WriteTemp("cob_data_test.pdb", ClusterPdb().c_str()); - auto obs = ModelReferenceIntensities(data_model, {}, {}, 2.5, logger); + auto obs = ModelReferenceIntensities(ReadModel(data_model), {}, {}, 2.5, logger); REQUIRE(obs.size() > 500); for (size_t i = 0; i < obs.size(); i++) { obs[i].F = std::sqrt(std::max(0.0f, obs[i].I)); @@ -518,7 +523,7 @@ TEST_CASE("ModelValidation_FindsTheDatasDescriptionOfTheLattice", "[ModelValidat } const auto other_setting = WriteTemp("cob_model_test.pdb", permuted.c_str()); - const auto moved = ValidateAgainstModel(obs, data_cell, other_setting, prefix, logger, data_sg, + const auto moved = ValidateAgainstModel(obs, data_cell, ReadModel(other_setting), prefix, logger, data_sg, /*probe_indexing_ambiguity=*/false, 1, 1.0); REQUIRE(moved.ok); logger.Info("Change of basis test: took {} out of {}, R-work {:.4f}", @@ -529,7 +534,7 @@ TEST_CASE("ModelValidation_FindsTheDatasDescriptionOfTheLattice", "[ModelValidat // The isomorphous case, which is what nearly every run is: the model already describes the // lattice the way the data do, the only operators that map its cell are its own symmetry, and // nothing is scored or moved. - const auto same = ValidateAgainstModel(obs, data_cell, data_model, prefix, logger, data_sg, + const auto same = ValidateAgainstModel(obs, data_cell, ReadModel(data_model), prefix, logger, data_sg, false, 1, 1.0); REQUIRE(same.ok); CHECK(same.change_of_basis_op == gemmi::Op::identity()); @@ -551,7 +556,7 @@ TEST_CASE("ModelValidation_ReindexesTheDataIntoTheModelsIndexing", "[ModelValida // Point group 4 on a tetragonal lattice (4/mmm): one alternative indexing. const auto model = WriteTemp("reidx_model_test.pdb", ClusterPdb("CRYST1 34.000 34.000 38.000 90.00 90.00 90.00 P 4 4\n").c_str()); - auto own = ModelReferenceIntensities(model, {}, {}, 2.5, logger); + auto own = ModelReferenceIntensities(ReadModel(model), {}, {}, 2.5, logger); REQUIRE(own.size() > 500); for (size_t i = 0; i < own.size(); i++) { own[i].F = std::sqrt(std::max(0.0f, own[i].I)); @@ -566,7 +571,7 @@ TEST_CASE("ModelValidation_ReindexesTheDataIntoTheModelsIndexing", "[ModelValida // The data as a run that picked the other indexing would have merged them. const auto obs = ReindexReflections(own, laws.front()); - const auto to_model = ValidateAgainstModel(obs, cell, model, prefix, logger, p4, + const auto to_model = ValidateAgainstModel(obs, cell, ReadModel(model), prefix, logger, p4, /*probe_indexing_ambiguity=*/true, 1, 1.0); REQUIRE(to_model.ok); CHECK(to_model.change_of_basis_op == gemmi::Op::identity()); @@ -575,7 +580,7 @@ TEST_CASE("ModelValidation_ReindexesTheDataIntoTheModelsIndexing", "[ModelValida CHECK(to_model.r_work < 0.15); // A reference already fixed the data's indexing: the data stay, and the model is moved. - const auto fixed = ValidateAgainstModel(obs, cell, model, prefix, logger, p4, false, 1, 1.0); + const auto fixed = ValidateAgainstModel(obs, cell, ReadModel(model), prefix, logger, p4, false, 1, 1.0); REQUIRE(fixed.ok); CHECK_FALSE(fixed.change_of_basis_op == gemmi::Op::identity()); CHECK(fixed.indexing_op == gemmi::Op::identity()); @@ -599,7 +604,7 @@ TEST_CASE("ModelValidation_ReindexesTheDataIntoTheModelsIndexing", "[ModelValida r.F = std::sqrt(std::max(0.0f, r.I)); } } - const auto twin = ValidateAgainstModel(twinned, cell, model, prefix, logger, p4, true, 1, 1.0); + const auto twin = ValidateAgainstModel(twinned, cell, ReadModel(model), prefix, logger, p4, true, 1, 1.0); REQUIRE(twin.ok); CHECK_FALSE(twin.indexing_decided); CHECK(twin.indexing_op == gemmi::Op::identity()); @@ -607,7 +612,7 @@ TEST_CASE("ModelValidation_ReindexesTheDataIntoTheModelsIndexing", "[ModelValida // Data already in the model's indexing: nothing moves. The null is run all the same, as on every // validation that judges its model (ModelValidationSchedule::fit_test), and the model fits. - const auto same = ValidateAgainstModel(own, cell, model, prefix, logger, p4, true, 1, 1.0); + const auto same = ValidateAgainstModel(own, cell, ReadModel(model), prefix, logger, p4, true, 1, 1.0); REQUIRE(same.ok); CHECK(same.change_of_basis_op == gemmi::Op::identity()); CHECK(same.indexing_op == gemmi::Op::identity()); @@ -736,7 +741,7 @@ TEST_CASE("ModelValidation_CCModelFollowsTheSignalByShell", "[ModelValidation]") Logger logger("ModelValidation_CCModelFollowsTheSignalByShell"); const auto path = WriteTemp("cc_model_test.pdb", ClusterPdb().c_str()); - auto obs = ModelReferenceIntensities(path, {}, {}, 2.5, logger); + auto obs = ModelReferenceIntensities(ReadModel(path), {}, {}, 2.5, logger); REQUIRE(obs.size() > 1000); // The shells the correlation is reported on, coarse to fine, and the noise each one gets as a @@ -777,7 +782,7 @@ TEST_CASE("ModelValidation_CCModelFollowsTheSignalByShell", "[ModelValidation]") const auto result = ValidateAgainstModel(obs, UnitCell{.a = 30, .b = 34, .c = 38, .alpha = 90, .beta = 90, .gamma = 90}, - path, prefix, logger, gemmi::find_spacegroup_by_name("P 21 21 21"), + ReadModel(path), prefix, logger, gemmi::find_spacegroup_by_name("P 21 21 21"), /*probe_indexing_ambiguity=*/false, 1, 1.0, shells); REQUIRE(result.ok); REQUIRE(result.cc_model_shells.size() == shells.size()); @@ -805,7 +810,7 @@ TEST_CASE("ModelValidation_CCModelFollowsTheSignalByShell", "[ModelValidation]") const auto no_shells = ValidateAgainstModel(obs, UnitCell{.a = 30, .b = 34, .c = 38, .alpha = 90, .beta = 90, .gamma = 90}, - path, prefix, logger, gemmi::find_spacegroup_by_name("P 21 21 21"), + ReadModel(path), prefix, logger, gemmi::find_spacegroup_by_name("P 21 21 21"), false, 1, 1.0); CHECK(no_shells.ok); CHECK(no_shells.cc_model_shells.empty()); @@ -827,7 +832,7 @@ TEST_CASE("ModelValidation_WrongModelInAGroupOffTheDataMetric", "[ModelValidatio const auto data_path = WriteTemp("off_metric_data.pdb", ClusterPdb().c_str()); const auto wrong_path = WriteTemp("off_metric_wrong.pdb", ClusterPdb("CRYST1 40.000 40.000 40.000 90.00 90.00 90.00 I 21 3 24\n", 7).c_str()); - auto obs = ModelReferenceIntensities(data_path, {}, {}, 2.0, logger); + auto obs = ModelReferenceIntensities(ReadModel(data_path), {}, {}, 2.0, logger); REQUIRE(obs.size() > 1000); for (size_t i = 0; i < obs.size(); i++) { obs[i].sigma = std::max(1.0f, 0.05f * obs[i].I); @@ -837,7 +842,7 @@ TEST_CASE("ModelValidation_WrongModelInAGroupOffTheDataMetric", "[ModelValidatio const std::string prefix = (std::filesystem::temp_directory_path() / "off_metric_test").string(); const auto result = ValidateAgainstModel(obs, UnitCell{.a = 30, .b = 34, .c = 38, .alpha = 90, .beta = 90, .gamma = 90}, - wrong_path, prefix, logger, gemmi::find_spacegroup_by_name("P 21 21 21")); + ReadModel(wrong_path), prefix, logger, gemmi::find_spacegroup_by_name("P 21 21 21")); CHECK(result.ok); CHECK(!result.adopted_model_enantiomorph); @@ -854,7 +859,7 @@ TEST_CASE("ModelValidation_CCModelUnrelatedModelConfirmsNothing", "[ModelValidat Logger logger("ModelValidation_CCModelUnrelatedModelConfirmsNothing"); const auto data_path = WriteTemp("cc_null_data.pdb", ClusterPdb().c_str()); const auto wrong_path = WriteTemp("cc_null_wrong.pdb", ClusterPdb(kCryst, 7).c_str()); - auto obs = ModelReferenceIntensities(data_path, {}, {}, 2.0, logger); + auto obs = ModelReferenceIntensities(ReadModel(data_path), {}, {}, 2.0, logger); std::erase_if(obs, [](const MergedReflection &r) { return r.d > 8.0f; }); REQUIRE(obs.size() > 1000); for (size_t i = 0; i < obs.size(); i++) { @@ -870,7 +875,7 @@ TEST_CASE("ModelValidation_CCModelUnrelatedModelConfirmsNothing", "[ModelValidat const std::string prefix = (std::filesystem::temp_directory_path() / "cc_null_test").string(); const auto result = ValidateAgainstModel(obs, UnitCell{.a = 30, .b = 34, .c = 38, .alpha = 90, .beta = 90, .gamma = 90}, - wrong_path, prefix, logger, gemmi::find_spacegroup_by_name("P 21 21 21"), + ReadModel(wrong_path), prefix, logger, gemmi::find_spacegroup_by_name("P 21 21 21"), /*probe_indexing_ambiguity=*/false, 1, 1.0, shells); REQUIRE(result.ok); REQUIRE(result.cc_model_shells.size() == shells.size()); @@ -1003,7 +1008,7 @@ TEST_CASE("ModelValidation_RigidBodySameOnAnyNumberOfThreads", "[ModelValidation REQUIRE(sg != nullptr); st.setup_cell_images(); - const auto ref = ModelReferenceIntensities(path, {}, {}, 3.0, logger); + const auto ref = ModelReferenceIntensities(ReadModel(path), {}, {}, 3.0, logger); REQUIRE_FALSE(ref.empty()); gemmi::AsuData> fobs; fobs.unit_cell_ = st.cell; @@ -1298,7 +1303,7 @@ namespace { gemmi::AsuData> OwnAmplitudes(const char *cryst, const gemmi::Structure &st, double d_min, Logger &logger) { const auto path = WriteTemp("rigid_body_own_amplitudes.pdb", ClusterPdb(cryst).c_str()); - const auto ref = ModelReferenceIntensities(path, {}, {}, 3.0, logger); + const auto ref = ModelReferenceIntensities(ReadModel(path), {}, {}, 3.0, logger); std::filesystem::remove(path); gemmi::AsuData> fobs; fobs.unit_cell_ = st.cell; @@ -1327,7 +1332,7 @@ namespace { const gemmi::SpaceGroup *sg = st.find_spacegroup(); // "Observed" amplitudes: the model's own, as placed at q = 0. const auto path = WriteTemp("rigid_body_jacobian_test.pdb", ClusterPdb(cryst).c_str()); - const auto ref = ModelReferenceIntensities(path, {}, {}, 3.0, logger); + const auto ref = ModelReferenceIntensities(ReadModel(path), {}, {}, 3.0, logger); std::filesystem::remove(path); REQUIRE_FALSE(ref.empty()); @@ -1455,7 +1460,7 @@ TEST_CASE("ModelValidation_RigidBodyReportsTheRotationItApplied", "[ModelValidat const gemmi::SpaceGroup *sg = st.find_spacegroup(); REQUIRE(sg != nullptr); st.setup_cell_images(); - const auto ref = ModelReferenceIntensities(path, {}, {}, 3.0, logger); + const auto ref = ModelReferenceIntensities(ReadModel(path), {}, {}, 3.0, logger); std::filesystem::remove(path); REQUIRE_FALSE(ref.empty()); gemmi::AsuData> fobs; diff --git a/tests/MolecularReplacementTest.cpp b/tests/MolecularReplacementTest.cpp index e03353a9f..078755225 100644 --- a/tests/MolecularReplacementTest.cpp +++ b/tests/MolecularReplacementTest.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -15,6 +16,7 @@ #include "../image_analysis/structure_refinement/MolecularReplacement.h" #include "../image_analysis/structure_refinement/RigidBodyRefine.h" #include "../common/Logger.h" +#include "../writer/RugnuxModelFile.h" #ifdef JFJOCH_USE_CUDA #include "../common/CUDAWrapper.h" #include "../image_analysis/structure_refinement/MolecularReplacementGPU.h" @@ -322,7 +324,7 @@ TEST_CASE("MolecularReplacement_ModelKind", "[MolecularReplacement]") { const float plddt[3] = {90, 85, 95}; write("MolecularReplacement_ModelKind_af.pdb", "CRYST1 1.000 1.000 1.000 90.00 90.00 90.00 P 1 1", plddt, false, false); - const SearchModel af = PrepareSearchModel("MolecularReplacement_ModelKind_af.pdb"); + const SearchModel af = PrepareSearchModel(ReadRugnuxModelFile("MolecularReplacement_ModelKind_af.pdb")); CHECK(af.failure_reason.empty()); CHECK(af.predicted); CHECK(af.residues_kept == 3); @@ -331,7 +333,7 @@ TEST_CASE("MolecularReplacement_ModelKind", "[MolecularReplacement]") { const float refined[3] = {25, 112, 40}; write("MolecularReplacement_ModelKind_xtal.pdb", "CRYST1 50.000 60.000 70.000 90.00 90.00 90.00 P 21 21 21 4", refined, true, true); - const SearchModel x = PrepareSearchModel("MolecularReplacement_ModelKind_xtal.pdb"); + const SearchModel x = PrepareSearchModel(ReadRugnuxModelFile("MolecularReplacement_ModelKind_xtal.pdb")); CHECK(x.failure_reason.empty()); CHECK(!x.predicted); CHECK(x.residues_kept == 3); @@ -375,19 +377,20 @@ TEST_CASE("MolecularReplacement_PaeDomains", "[MolecularReplacement]") { m.st.models.push_back(model); m.residues_read = 120; m.residues_kept = 110; - const std::string path = "MolecularReplacement_PaeDomains.json"; - { - std::ofstream out(path); - out << "[{\"predicted_aligned_error\":["; - for (int i = 0; i < 120; i++) { - out << (i ? "," : "") << "["; - for (int j = 0; j < 120; j++) - out << (j ? "," : "") << ((i < 55) == (j < 55) ? 2 : 25); - out << "]"; - } - out << "],\"max_predicted_aligned_error\":31.75}]"; + std::ostringstream json; + json << "[{\"predicted_aligned_error\":["; + for (int i = 0; i < 120; i++) { + json << (i ? "," : "") << "["; + for (int j = 0; j < 120; j++) + json << (j ? "," : "") << ((i < 55) == (j < 55) ? 2 : 25); + json << "]"; } - const auto domains = PaeDomains(path, m); + json << "],\"max_predicted_aligned_error\":31.75}]"; + const RugnuxModel parsed = ParseRugnuxModel( + "ATOM 1 CA ALA A 1 0.000 0.000 0.000 1.00 90.00 C\nEND\n", + "AF-P12345-F1-model_v6.pdb", json.str()); + REQUIRE(parsed.pae); + const auto domains = PaeDomains(*parsed.pae, m); REQUIRE(domains.size() == 2); CHECK(domains[0].size() == 60); CHECK(domains[0].front() == 60); @@ -395,7 +398,6 @@ TEST_CASE("MolecularReplacement_PaeDomains", "[MolecularReplacement]") { const SearchModel d = DomainModel(m, domains[1]); CHECK(d.residues_kept == 50); CHECK(d.description == "PAE domain of 50 residues (1-50)"); - std::remove(path.c_str()); } // A placement of a group carried into a subgroup's merge: in P 21 21 21 read as P 1 21 1 on the same cell each diff --git a/tests/ResultReportTest.cpp b/tests/ResultReportTest.cpp index d70ea191f..5d94e077d 100644 --- a/tests/ResultReportTest.cpp +++ b/tests/ResultReportTest.cpp @@ -383,7 +383,7 @@ TEST_CASE("ResultReport_ModelValidationSection", "[Diagnostics]") { ModelValidationResult good; good.ok = true; - good.model_path = "model.cif"; + good.model_name = "model.cif"; good.model_space_group_number = 96; good.r_work = 0.1823; good.r_free = 0.2145; @@ -468,7 +468,7 @@ TEST_CASE("ResultReport_ModelValidationSection", "[Diagnostics]") { mr_result.model_placement = "MR"; MolecularReplacementResult mr; mr.ok = true; - mr.model_path = "model.cif"; + mr.model_name = "model.cif"; mr.predicted_model = false; mr.decision = "ENANTIOMORPH"; MRCandidate c; @@ -568,7 +568,7 @@ TEST_CASE("ResultReport_ModelValidationSection", "[Diagnostics]") { result.model_validation = good; ModelValidationResult failed; - failed.model_path = "broken.pdb"; + failed.model_name = "broken.pdb"; failed.failure_reason = "model broken.pdb has no atoms or no unit cell"; result.model_validation = failed; diff --git a/tests/RugnuxTest.cpp b/tests/RugnuxTest.cpp index 74bf4c128..f6855eab4 100644 --- a/tests/RugnuxTest.cpp +++ b/tests/RugnuxTest.cpp @@ -274,7 +274,9 @@ TEST_CASE("RugnuxCommandLine_Full", "[process]") { CHECK(cmd.find("--model") == std::string::npos); // --mr is --model with the search forced, and is given back as itself. - config.model_path = "model.cif"; + auto model = std::make_shared(); + model->name = "model.cif"; + config.model = model; CHECK(RugnuxCommandLine(config, x, "in.h5").find("--model model.cif") != std::string::npos); config.force_mr = true; const std::string mr_cmd = RugnuxCommandLine(config, x, "in.h5"); diff --git a/viewer/windows/JFJochProcessingJobsWindow.cpp b/viewer/windows/JFJochProcessingJobsWindow.cpp index 0ba1ddbe4..b24a566e7 100644 --- a/viewer/windows/JFJochProcessingJobsWindow.cpp +++ b/viewer/windows/JFJochProcessingJobsWindow.cpp @@ -6,6 +6,7 @@ #include "JFJochMergeStatsWindow.h" #include "../widgets/ToolbarIcons.h" #include "../../rugnux/RugnuxCommandLine.h" +#include "../../writer/RugnuxModelFile.h" #include "../../common/ThreadAffinity.h" #include @@ -396,8 +397,6 @@ ProcessConfig JFJochProcessingJobsWindow::buildConfig(const JobSpec &spec, const config.reference_space_group = inputs.reference_space_group; config.reference_path = inputs.reference_path.toStdString(); config.reference_column = inputs.reference_column.toStdString(); - // Validated at the end of the job, when there is an output to write the maps beside. - config.model_path = inputs.model_path.toStdString(); // Stills geometry-refinement two-pass. The dialog only offers it for a stills-with-cell run // (Rugnux no-ops it otherwise), so honour it whenever set; unset leaves the pass off. if (spec.refine_geometry) @@ -422,7 +421,17 @@ void JFJochProcessingJobsWindow::newJob(ProcessMode mode, CalibrationSelection c if (action == 0) return; - const ProcessConfig config = buildConfig(spec, inputs); + ProcessConfig config = buildConfig(spec, inputs); + // Validated at the end of the job, against the merge. Read here, so that a file holding no model is + // said at once rather than after the run. + if (spec.mode == ProcessMode::FullAnalysis && !inputs.model_path.isEmpty()) { + try { + config.model = std::make_shared(ReadRugnuxModelFile(inputs.model_path.toStdString())); + } catch (const std::exception &e) { + QMessageBox::warning(this, "Processing", QString("Cannot read the model: %1").arg(e.what())); + return; + } + } // The experiment carries the panel's indexing settings — including RotationIndexing set by the // rotation axis (needed so IndexAndRefine builds a rotation indexer). On top of that it gets diff --git a/writer/CMakeLists.txt b/writer/CMakeLists.txt index c96b830b7..ad4a0a3fa 100644 --- a/writer/CMakeLists.txt +++ b/writer/CMakeLists.txt @@ -36,10 +36,12 @@ ADD_LIBRARY(JFJochModelWriter STATIC WriteModel.cpp WriteModel.h) TARGET_LINK_LIBRARIES(JFJochModelWriter JFJochLogger gemmi) # rugnux's merged MTZ, map-coefficient MTZ and placed model, to and from the structured END-message -# blocks, so that jfjoch_writer writes them with gemmi alone and no analysis library. +# blocks, so that jfjoch_writer writes them with gemmi alone and no analysis library; and the atomic model +# a run is given, parsed for it. ADD_LIBRARY(JFJochRugnuxFiles STATIC WriteRugnuxFiles.cpp WriteRugnuxFiles.h - RugnuxResultBlocks.cpp RugnuxResultBlocks.h) -TARGET_LINK_LIBRARIES(JFJochRugnuxFiles JFJochModelWriter JFJochLogger gemmi) + RugnuxResultBlocks.cpp RugnuxResultBlocks.h + RugnuxModelFile.cpp RugnuxModelFile.h) +TARGET_LINK_LIBRARIES(JFJochRugnuxFiles JFJochModelWriter JFJochLogger gemmi ZLIB::ZLIB) TARGET_LINK_LIBRARIES(JFJochWriter JFJochPreview JFJochLogger JFJochHDF5Wrappers CBORStream2FrameSerialize JFJochRugnuxFiles) diff --git a/writer/RugnuxModelFile.cpp b/writer/RugnuxModelFile.cpp new file mode 100644 index 000000000..15740b333 --- /dev/null +++ b/writer/RugnuxModelFile.cpp @@ -0,0 +1,98 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "RugnuxModelFile.h" + +#include +#include +#include + +#include +#include +#include + +namespace { + +// The bytes of a gzip stream inflated, every member of it. +std::string Gunzip(const std::string &bytes) { + z_stream s{}; + if (inflateInit2(&s, 15 + 32) != Z_OK) + throw std::runtime_error("cannot start zlib"); + std::string out; + char buf[1 << 16]; + s.next_in = reinterpret_cast(const_cast(bytes.data())); + s.avail_in = static_cast(bytes.size()); + int ret = Z_OK; + while (ret != Z_STREAM_END || s.avail_in > 0) { + if (ret == Z_STREAM_END) + inflateReset(&s); + s.next_out = reinterpret_cast(buf); + s.avail_out = sizeof buf; + ret = inflate(&s, Z_NO_FLUSH); + if (ret != Z_OK && ret != Z_STREAM_END) { + inflateEnd(&s); + throw std::runtime_error("the gzip stream is damaged"); + } + out.append(buf, sizeof buf - s.avail_out); + if (ret == Z_OK && s.avail_in == 0 && s.avail_out != 0) { + inflateEnd(&s); + throw std::runtime_error("the gzip stream is cut short"); + } + } + inflateEnd(&s); + return out; +} + +std::string ReadFile(const std::string &path) { + std::ifstream f(path, std::ios::binary); + if (!f) + throw std::runtime_error("cannot open " + path); + return {std::istreambuf_iterator(f), std::istreambuf_iterator()}; +} + +} // namespace + +RugnuxModel ParseRugnuxModel(const std::string &bytes, const std::string &name, const std::string &pae_json) { + RugnuxModel m; + m.name = name; + std::string text = bytes.size() >= 2 && bytes[0] == '\x1f' && bytes[1] == '\x8b' ? Gunzip(bytes) : bytes; + gemmi::cif::Document doc; + m.structure = gemmi::read_structure_from_memory(text.data(), text.size(), name, gemmi::CoorFormat::Detect, &doc); + if (m.structure.models.empty()) + throw std::runtime_error(name + " holds no atoms"); + m.modelcif = m.structure.input_format == gemmi::CoorFormat::Mmcif && !doc.blocks.empty() + && doc.blocks[0].has_mmcif_category("_ma_qa_metric"); + if (!pae_json.empty()) { + try { + const nlohmann::json j = nlohmann::json::parse(pae_json); + const nlohmann::json &pae = j.is_array() ? j.at(0).at("predicted_aligned_error") + : j.at("predicted_aligned_error"); + std::vector> rows; + for (const auto &row : pae) + rows.push_back(row.get>()); + m.pae = std::move(rows); + } catch (const std::exception &) { + } + } + return m; +} + +RugnuxModel ReadRugnuxModelFile(const std::string &path) { + const std::string pae_path = PaePathFor(path); + std::string pae_json; + if (!pae_path.empty() && std::ifstream(pae_path)) + pae_json = ReadFile(pae_path); + return ParseRugnuxModel(ReadFile(path), path, pae_json); +} + +std::string PaePathFor(const std::string &model_path) { + const size_t slash = model_path.find_last_of("/\\"); + const std::string dir = slash == std::string::npos ? std::string() : model_path.substr(0, slash + 1); + const std::string name = model_path.substr(dir.size()); + const size_t at = name.rfind("-model_v"); + if (at == std::string::npos) + return {}; + const size_t dot = name.find('.', at); + const std::string version = name.substr(at + 8, dot == std::string::npos ? std::string::npos : dot - at - 8); + return dir + name.substr(0, at) + "-predicted_aligned_error_v" + version + ".json"; +} diff --git a/writer/RugnuxModelFile.h b/writer/RugnuxModelFile.h new file mode 100644 index 000000000..5f242e6b1 --- /dev/null +++ b/writer/RugnuxModelFile.h @@ -0,0 +1,23 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include + +#include "../image_analysis/structure_refinement/RugnuxModel.h" + +// The atomic model of a run from the bytes of its file: PDB or mmCIF, gzipped or not, the format taken from +// the content, never from a name. `pae_json` is the AlphaFold DB's predicted-aligned-error JSON of a +// prediction, empty where there is none; one that cannot be read is left out, as one never given. `name` is +// what the report calls the model, and what gemmi names a PDB structure after. Throws where the bytes hold no +// atomic model. +RugnuxModel ParseRugnuxModel(const std::string &bytes, const std::string &name, const std::string &pae_json = {}); + +// The model file at `path`, with the predicted aligned error the AlphaFold DB puts beside it where it is there +// (PaePathFor). Named by `path`. +RugnuxModel ReadRugnuxModelFile(const std::string &path); + +// The PAE file the AlphaFold DB puts beside a model: AF--F1-model_v.cif -> +// AF--F1-predicted_aligned_error_v.json in the same directory; empty where the name does not follow it. +std::string PaePathFor(const std::string &model_path); -- 2.54.0 From 6efc42360a0ae371241ac0e0e6b7ce95f0e8c25e Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 16:51:07 +0200 Subject: [PATCH 37/81] ParseRugnuxModel: a file with no atom sites is not a model gemmi reads any text it does not recognise as PDB and can hand back a structure with an empty model in it, so 'no models' let garbage through. Count the atom sites instead. Co-Authored-By: Claude Opus 5.5 --- writer/RugnuxModelFile.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/writer/RugnuxModelFile.cpp b/writer/RugnuxModelFile.cpp index 15740b333..287872ff4 100644 --- a/writer/RugnuxModelFile.cpp +++ b/writer/RugnuxModelFile.cpp @@ -10,6 +10,7 @@ #include #include #include +#include // count_atom_sites namespace { @@ -58,7 +59,7 @@ RugnuxModel ParseRugnuxModel(const std::string &bytes, const std::string &name, std::string text = bytes.size() >= 2 && bytes[0] == '\x1f' && bytes[1] == '\x8b' ? Gunzip(bytes) : bytes; gemmi::cif::Document doc; m.structure = gemmi::read_structure_from_memory(text.data(), text.size(), name, gemmi::CoorFormat::Detect, &doc); - if (m.structure.models.empty()) + if (gemmi::count_atom_sites(m.structure) == 0) throw std::runtime_error(name + " holds no atoms"); m.modelcif = m.structure.input_format == gemmi::CoorFormat::Mmcif && !doc.blocks.empty() && doc.blocks[0].has_mmcif_category("_ma_qa_metric"); -- 2.54.0 From 5f731db81dbf514c9ee6dbb44c33b49eb317d302 Mon Sep 17 00:00:00 2001 From: Filip Leonarski Date: Sat, 17 Oct 2026 16:51:20 +0200 Subject: [PATCH 38/81] rugnux: the library returns its outputs in memory; the callers write the files The rugnux library wrote its results itself: _process.h5 through a FileWriter, the merged/twin/_mr reflection files, the unmerged MTZs, the maps and their MTZ, the placed models, _detector.jpg and _plot.txt, and on a doubled cell it renamed files on disk. It now writes none of them. - MtzTable (common/MtzTable.h): an MTZ file's header, columns and batch headers with no file behind it. It replaces MergedReflectionsMessage and MapCoefficientsMessage in the END message, with one CBOR encoding. WriteMtz (writer/WriteRugnuxFiles.h) is the one serialiser, used by rugnux and jfjoch_writer alike; it refuses a table whose columns differ in length, name a missing dataset, carry a malformed batch header or name a space group gemmi does not know. MergedMtzTable and UnmergedMtzTable build the tables the old writers built. - ProcessResult::outputs (RugnuxOutputs) holds, for the output pass only: the answer's merge (MTZ table plus what the .cif/.hkl are written from), the twin hypothesis' and the model's choice's merges, the unmerged and unmerged-partials tables, the maps (coefficients always; the grids only with ProcessConfig::keep_map_grids), the placed models, the detector JPEG and the per-image plot table, and the start message of the no-lattice _process.h5. Map RMS is taken from the grid in memory, as the CCP4 header stated it, whether or not the map is kept. - The per-image analysis goes to a caller-supplied RugnuxImageSink; rugnux and the viewer give a FileWriter-based ProcessFileSink. The geometry pre-pass no longer makes a _01_process.h5. - The doubled cell keeps both output sets: the answer's in outputs, the other's in DoubledCell::other_outputs with its suffix; the report names files by suffix after the caller's prefix. - The output prefix, write_process_h5 and the observation dump path are gone from ProcessConfig; --dump-observations is a callback. - What used to be gated on having files to write (model validation and MR, the twin-hypothesis merges, the finalist ledger, the scaled fulls, the unmerged tables) is gated on the output pass instead, so a caller with no prefix gets the same results. - RugnuxOutputFiles (new library JFJochRugnuxOutput, linked by rugnux, the viewer and the tests) writes every file from the result with the names and formats rugnux has always used. The viewer writes its job's files the same way. Co-Authored-By: Claude Opus 5.5 --- common/CMakeLists.txt | 1 + common/JFJochMessages.h | 34 +--- common/MtzTable.h | 48 +++++ frame_serialize/CBORStream2Deserializer.cpp | 108 ++++++----- frame_serialize/CBORStream2Serializer.cpp | 87 +++++---- image_analysis/WriteReflections.cpp | 167 +++++++++-------- image_analysis/WriteReflections.h | 40 ++-- .../scale_merge/RotationScaleMerge.cpp | 23 +-- .../scale_merge/RotationScaleMerge.h | 5 +- .../structure_refinement/ModelValidation.cpp | 163 +++++++--------- .../structure_refinement/ModelValidation.h | 29 ++- receiver/JFJochReceiverRugnux.cpp | 4 +- rugnux/CMakeLists.txt | 9 +- rugnux/DiagnosticOutput.cpp | 18 +- rugnux/DiagnosticOutput.h | 9 +- rugnux/ResultReport.cpp | 45 ++--- rugnux/ResultReport.h | 11 -- rugnux/Rugnux.cpp | 122 +++++------- rugnux/Rugnux.h | 129 +++++++++---- rugnux/RugnuxCalibration.cpp | 3 - rugnux/RugnuxCommandLine.cpp | 8 +- rugnux/RugnuxCommandLine.h | 4 + rugnux/RugnuxFirstPass.cpp | 3 - rugnux/RugnuxFirstPassAccept.cpp | 3 - rugnux/RugnuxFirstPassRescues.cpp | 3 - rugnux/RugnuxImagePass.cpp | 5 +- rugnux/RugnuxLive.cpp | 4 +- rugnux/RugnuxLive.h | 8 +- rugnux/RugnuxOutputFiles.cpp | 176 ++++++++++++++++++ rugnux/RugnuxOutputFiles.h | 58 ++++++ rugnux/RugnuxPasses.cpp | 64 ++----- rugnux/RugnuxPipeline.h | 23 +-- rugnux/RugnuxPreScan.cpp | 3 - rugnux/RugnuxScaleMerge.cpp | 165 ++++++++-------- rugnux/RugnuxStills.cpp | 3 - rugnux/rugnux_cli.cpp | 45 ++++- tests/CMakeLists.txt | 2 +- tests/DiagnosticOutputTest.cpp | 11 +- tests/ModelValidationTest.cpp | 41 ++-- tests/RugnuxResultFilesTest.cpp | 77 +++++--- tests/RugnuxTest.cpp | 25 ++- tests/WriteReflectionsTest.cpp | 29 +-- viewer/CMakeLists.txt | 2 +- viewer/JFJochProcessController.cpp | 23 ++- viewer/JFJochProcessController.h | 7 +- viewer/windows/JFJochProcessingJobsWindow.cpp | 23 +-- writer/RugnuxResultBlocks.cpp | 97 +++------- writer/RugnuxResultBlocks.h | 3 +- writer/WriteRugnuxFiles.cpp | 146 +++++---------- writer/WriteRugnuxFiles.h | 12 +- 50 files changed, 1163 insertions(+), 965 deletions(-) create mode 100644 common/MtzTable.h create mode 100644 rugnux/RugnuxOutputFiles.cpp create mode 100644 rugnux/RugnuxOutputFiles.h diff --git a/common/CMakeLists.txt b/common/CMakeLists.txt index f8a8ff5c9..e447b5509 100644 --- a/common/CMakeLists.txt +++ b/common/CMakeLists.txt @@ -161,6 +161,7 @@ ADD_LIBRARY(JFJochCommon STATIC ScalingSettings.h UnitCell.cpp UnitCell.h + MtzTable.h CorrelationCoefficient.cpp CorrelationCoefficient.h JFJochReceiverPlots.cpp diff --git a/common/JFJochMessages.h b/common/JFJochMessages.h index bcb4dcd1e..449929d2f 100644 --- a/common/JFJochMessages.h +++ b/common/JFJochMessages.h @@ -16,6 +16,7 @@ #include "CompressedImage.h" #include "SpotToSave.h" #include "UnitCell.h" +#include "MtzTable.h" #include "GoniometerAxis.h" #include "DetectorTransformation.h" #include "GridScanSettings.h" @@ -368,35 +369,6 @@ struct StartMessage { std::optional smargon_position; }; -// The merged reflections as rugnux writes them to .mtz (WriteMergedMtz, -// writer/WriteRugnuxFiles.h): one row per unique reflection in the CCP4 anomalous layout, one vector -// per MTZ column. The anomalous columns (i_plus ... sigma_f_minus) are all empty where the merge kept -// no Bijvoet split, and the file then has none. free_flag is the FreeR_flag value, 0 for the test set. -struct MergedReflectionsMessage { - UnitCell unit_cell; - std::string space_group_name; // gemmi xhm(): the name keeps the setting, a number does not - float wavelength_A = 0; - std::string crystal_name; - std::vector history; // the MTZ HISTORY records after the one naming the program - std::vector h, k, l; - std::vector i_mean, sigma_i_mean; - std::vector i_plus, sigma_i_plus, i_minus, sigma_i_minus; - std::vector f, sigma_f; - std::vector f_plus, sigma_f_plus, f_minus, sigma_f_minus; - std::vector free_flag; -}; - -// The sigma_A-weighted map coefficients rugnux writes to _maps.mtz (WriteMapCoefficientsMtz), -// one vector per MTZ column. Phases in degrees, [0, 360). free_flag is FREE: 0 for the test set. -struct MapCoefficientsMessage { - UnitCell unit_cell; - std::string space_group_name; - float wavelength_A = 0; - std::vector h, k, l; - std::vector fp, fc, phic, fwt, phwt, delfwt, phdelwt, fom; - std::vector free_flag; -}; - // The atomic model as placed against the data, one vector per atom field in file order, for // WritePlacedModel to write _model.cif. A new residue starts wherever the model, chain or // residue key changes. unit_cell and space_group_name are what WritePlacedModel is given (the data's); @@ -537,8 +509,8 @@ struct EndMessage { // The merged result of an analysis run inside the broker, for the writer to put beside the master // file as .mtz, _maps.mtz and _model.cif. Absent where nothing was merged. - std::optional merged; - std::optional map_coefficients; + std::optional merged; // MergedMtzTable (image_analysis/WriteReflections.h) + std::optional map_coefficients; // ModelMaps::coefficients (ModelValidation.h) std::optional placed_model; }; diff --git a/common/MtzTable.h b/common/MtzTable.h new file mode 100644 index 000000000..c6dbf7b2e --- /dev/null +++ b/common/MtzTable.h @@ -0,0 +1,48 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include +#include +#include + +#include "UnitCell.h" + +// What an MTZ file holds - its header, its columns and its batch headers - with no file behind it: the +// merged reflections, the map coefficients and the unmerged observations rugnux makes, for whatever +// writes them (WriteMtz, writer/WriteRugnuxFiles.h) or carries them (the END message). Every dataset +// has the table's cell; a dataset's id is its position in `datasets`. +struct MtzTable { + struct Dataset { + std::string project_name; + std::string crystal_name; + std::string dataset_name; + float wavelength_A = 0.0f; // 0 = not set + }; + struct Column { + std::string label; + char type = 'R'; // the MTZ column type: H, J, Q, F, I, ... + int32_t dataset_id = 0; + std::vector values; // one per row + }; + // The header of one image of unmerged data: the integer and real arrays as the MTZ format lays them + // out (29 and 156 long), and the names of its goniostat axes. + struct Batch { + int32_t number = 0; + std::string title; + std::vector ints; + std::vector floats; + std::vector axes; + }; + + std::string title; + UnitCell unit_cell{}; + std::string space_group_name; // extended Hermann-Mauguin (xhm), which keeps the setting + std::vector history; + std::array sort_order{}; + std::vector datasets; + std::vector columns; + std::vector batches; +}; diff --git a/frame_serialize/CBORStream2Deserializer.cpp b/frame_serialize/CBORStream2Deserializer.cpp index 15d07c0e3..2341bbc3f 100644 --- a/frame_serialize/CBORStream2Deserializer.cpp +++ b/frame_serialize/CBORStream2Deserializer.cpp @@ -1510,64 +1510,84 @@ namespace { cbor_value_advance(&value); } - MergedReflectionsMessage ProcessMergedElement(CborValue &value) { - MergedReflectionsMessage m; + MtzTable::Dataset ProcessMtzDatasetElement(CborValue &value) { + MtzTable::Dataset d; CborValue map_value; cborErr(cbor_value_enter_container(&value, &map_value)); while (!cbor_value_at_end(&map_value)) { auto key = GetCBORString(map_value); - if (key == "unit_cell") m.unit_cell = ProcessUnitCellElement(map_value); - else if (key == "space_group_name") m.space_group_name = GetCBORString(map_value); - else if (key == "wavelength") m.wavelength_A = GetCBORFloat(map_value); - else if (key == "crystal_name") m.crystal_name = GetCBORString(map_value); - else if (key == "history") GetCBORStringArray(map_value, m.history); - else if (key == "h") GetCBORInt32Array(map_value, m.h); - else if (key == "k") GetCBORInt32Array(map_value, m.k); - else if (key == "l") GetCBORInt32Array(map_value, m.l); - else if (key == "i_mean") GetCBORFloatArray(map_value, m.i_mean); - else if (key == "sigma_i_mean") GetCBORFloatArray(map_value, m.sigma_i_mean); - else if (key == "i_plus") GetCBORFloatArray(map_value, m.i_plus); - else if (key == "sigma_i_plus") GetCBORFloatArray(map_value, m.sigma_i_plus); - else if (key == "i_minus") GetCBORFloatArray(map_value, m.i_minus); - else if (key == "sigma_i_minus") GetCBORFloatArray(map_value, m.sigma_i_minus); - else if (key == "f") GetCBORFloatArray(map_value, m.f); - else if (key == "sigma_f") GetCBORFloatArray(map_value, m.sigma_f); - else if (key == "f_plus") GetCBORFloatArray(map_value, m.f_plus); - else if (key == "sigma_f_plus") GetCBORFloatArray(map_value, m.sigma_f_plus); - else if (key == "f_minus") GetCBORFloatArray(map_value, m.f_minus); - else if (key == "sigma_f_minus") GetCBORFloatArray(map_value, m.sigma_f_minus); - else if (key == "free_flag") GetCBORUInt8Array(map_value, m.free_flag); + if (key == "project_name") d.project_name = GetCBORString(map_value); + else if (key == "crystal_name") d.crystal_name = GetCBORString(map_value); + else if (key == "dataset_name") d.dataset_name = GetCBORString(map_value); + else if (key == "wavelength") d.wavelength_A = GetCBORFloat(map_value); else SkipCBORValue(map_value); } cborErr(cbor_value_leave_container(&value, &map_value)); - return m; + return d; } - MapCoefficientsMessage ProcessMapCoefficientsElement(CborValue &value) { - MapCoefficientsMessage m; + MtzTable::Column ProcessMtzColumnElement(CborValue &value) { + MtzTable::Column c; CborValue map_value; cborErr(cbor_value_enter_container(&value, &map_value)); while (!cbor_value_at_end(&map_value)) { auto key = GetCBORString(map_value); - if (key == "unit_cell") m.unit_cell = ProcessUnitCellElement(map_value); - else if (key == "space_group_name") m.space_group_name = GetCBORString(map_value); - else if (key == "wavelength") m.wavelength_A = GetCBORFloat(map_value); - else if (key == "h") GetCBORInt32Array(map_value, m.h); - else if (key == "k") GetCBORInt32Array(map_value, m.k); - else if (key == "l") GetCBORInt32Array(map_value, m.l); - else if (key == "fp") GetCBORFloatArray(map_value, m.fp); - else if (key == "fc") GetCBORFloatArray(map_value, m.fc); - else if (key == "phic") GetCBORFloatArray(map_value, m.phic); - else if (key == "fwt") GetCBORFloatArray(map_value, m.fwt); - else if (key == "phwt") GetCBORFloatArray(map_value, m.phwt); - else if (key == "delfwt") GetCBORFloatArray(map_value, m.delfwt); - else if (key == "phdelwt") GetCBORFloatArray(map_value, m.phdelwt); - else if (key == "fom") GetCBORFloatArray(map_value, m.fom); - else if (key == "free_flag") GetCBORUInt8Array(map_value, m.free_flag); + if (key == "label") c.label = GetCBORString(map_value); + else if (key == "type") c.type = GetCBORString(map_value).at(0); + else if (key == "dataset_id") c.dataset_id = static_cast(GetCBORInt(map_value)); + else if (key == "values") GetCBORFloatArray(map_value, c.values); else SkipCBORValue(map_value); } cborErr(cbor_value_leave_container(&value, &map_value)); - return m; + return c; + } + + MtzTable::Batch ProcessMtzBatchElement(CborValue &value) { + MtzTable::Batch b; + CborValue map_value; + cborErr(cbor_value_enter_container(&value, &map_value)); + while (!cbor_value_at_end(&map_value)) { + auto key = GetCBORString(map_value); + if (key == "number") b.number = static_cast(GetCBORInt(map_value)); + else if (key == "title") b.title = GetCBORString(map_value); + else if (key == "ints") GetCBORInt32Array(map_value, b.ints); + else if (key == "floats") GetCBORFloatArray(map_value, b.floats); + else if (key == "axes") GetCBORStringArray(map_value, b.axes); + else SkipCBORValue(map_value); + } + cborErr(cbor_value_leave_container(&value, &map_value)); + return b; + } + + MtzTable ProcessMtzTableElement(CborValue &value) { + MtzTable t; + CborValue map_value; + cborErr(cbor_value_enter_container(&value, &map_value)); + while (!cbor_value_at_end(&map_value)) { + auto key = GetCBORString(map_value); + if (key == "title") t.title = GetCBORString(map_value); + else if (key == "unit_cell") t.unit_cell = ProcessUnitCellElement(map_value); + else if (key == "space_group_name") t.space_group_name = GetCBORString(map_value); + else if (key == "history") GetCBORStringArray(map_value, t.history); + else if (key == "sort_order") { + std::vector v; + GetCBORInt32Array(map_value, v); + if (v.size() != t.sort_order.size()) + throw JFJochException(JFJochExceptionCategory::CBORError, "MTZ sort order of wrong length"); + std::copy(v.begin(), v.end(), t.sort_order.begin()); + } else if (key == "datasets" || key == "columns" || key == "batches") { + CborValue array_value; + cborErr(cbor_value_enter_container(&map_value, &array_value)); + while (!cbor_value_at_end(&array_value)) { + if (key == "datasets") t.datasets.push_back(ProcessMtzDatasetElement(array_value)); + else if (key == "columns") t.columns.push_back(ProcessMtzColumnElement(array_value)); + else t.batches.push_back(ProcessMtzBatchElement(array_value)); + } + cborErr(cbor_value_leave_container(&map_value, &array_value)); + } else SkipCBORValue(map_value); + } + cborErr(cbor_value_leave_container(&value, &map_value)); + return t; } PlacedModelMessage ProcessPlacedModelElement(CborValue &value) { @@ -1699,9 +1719,9 @@ namespace { else if (key == "pixel_sum") GetCBORInt64Array(value, message.pixel_sum); else if (key == "merged") - message.merged = ProcessMergedElement(value); + message.merged = ProcessMtzTableElement(value); else if (key == "map_coefficients") - message.map_coefficients = ProcessMapCoefficientsElement(value); + message.map_coefficients = ProcessMtzTableElement(value); else if (key == "placed_model") message.placed_model = ProcessPlacedModelElement(value); else if (key == "rotation_lattice") { diff --git a/frame_serialize/CBORStream2Serializer.cpp b/frame_serialize/CBORStream2Serializer.cpp index 82ee03e51..eaf732fd1 100644 --- a/frame_serialize/CBORStream2Serializer.cpp +++ b/frame_serialize/CBORStream2Serializer.cpp @@ -521,53 +521,52 @@ inline void CBOR_ENC(CborEncoder &encoder, const char* key, const std::vector(v.data()), v.size() * sizeof(double))); } -inline void CBOR_ENC(CborEncoder &encoder, const char* key, const MergedReflectionsMessage &m) { - CborEncoder mapEncoder; +inline void CBOR_ENC(CborEncoder &encoder, const char* key, const MtzTable &t) { + CborEncoder mapEncoder, arrayEncoder, elementEncoder; cborErr(cbor_encode_text_stringz(&encoder, key)); cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength)); - CBOR_ENC(mapEncoder, "unit_cell", m.unit_cell); - CBOR_ENC(mapEncoder, "space_group_name", m.space_group_name); - CBOR_ENC(mapEncoder, "wavelength", m.wavelength_A); - CBOR_ENC(mapEncoder, "crystal_name", m.crystal_name); - CBOR_ENC(mapEncoder, "history", m.history); - CBOR_ENC(mapEncoder, "h", m.h); - CBOR_ENC(mapEncoder, "k", m.k); - CBOR_ENC(mapEncoder, "l", m.l); - CBOR_ENC(mapEncoder, "i_mean", m.i_mean); - CBOR_ENC(mapEncoder, "sigma_i_mean", m.sigma_i_mean); - CBOR_ENC(mapEncoder, "i_plus", m.i_plus); - CBOR_ENC(mapEncoder, "sigma_i_plus", m.sigma_i_plus); - CBOR_ENC(mapEncoder, "i_minus", m.i_minus); - CBOR_ENC(mapEncoder, "sigma_i_minus", m.sigma_i_minus); - CBOR_ENC(mapEncoder, "f", m.f); - CBOR_ENC(mapEncoder, "sigma_f", m.sigma_f); - CBOR_ENC(mapEncoder, "f_plus", m.f_plus); - CBOR_ENC(mapEncoder, "sigma_f_plus", m.sigma_f_plus); - CBOR_ENC(mapEncoder, "f_minus", m.f_minus); - CBOR_ENC(mapEncoder, "sigma_f_minus", m.sigma_f_minus); - CBOR_ENC(mapEncoder, "free_flag", m.free_flag); - cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); -} + CBOR_ENC(mapEncoder, "title", t.title); + CBOR_ENC(mapEncoder, "unit_cell", t.unit_cell); + CBOR_ENC(mapEncoder, "space_group_name", t.space_group_name); + CBOR_ENC(mapEncoder, "history", t.history); + CBOR_ENC(mapEncoder, "sort_order", std::vector(t.sort_order.begin(), t.sort_order.end())); -inline void CBOR_ENC(CborEncoder &encoder, const char* key, const MapCoefficientsMessage &m) { - CborEncoder mapEncoder; - cborErr(cbor_encode_text_stringz(&encoder, key)); - cborErr(cbor_encoder_create_map(&encoder, &mapEncoder, CborIndefiniteLength)); - CBOR_ENC(mapEncoder, "unit_cell", m.unit_cell); - CBOR_ENC(mapEncoder, "space_group_name", m.space_group_name); - CBOR_ENC(mapEncoder, "wavelength", m.wavelength_A); - CBOR_ENC(mapEncoder, "h", m.h); - CBOR_ENC(mapEncoder, "k", m.k); - CBOR_ENC(mapEncoder, "l", m.l); - CBOR_ENC(mapEncoder, "fp", m.fp); - CBOR_ENC(mapEncoder, "fc", m.fc); - CBOR_ENC(mapEncoder, "phic", m.phic); - CBOR_ENC(mapEncoder, "fwt", m.fwt); - CBOR_ENC(mapEncoder, "phwt", m.phwt); - CBOR_ENC(mapEncoder, "delfwt", m.delfwt); - CBOR_ENC(mapEncoder, "phdelwt", m.phdelwt); - CBOR_ENC(mapEncoder, "fom", m.fom); - CBOR_ENC(mapEncoder, "free_flag", m.free_flag); + cborErr(cbor_encode_text_stringz(&mapEncoder, "datasets")); + cborErr(cbor_encoder_create_array(&mapEncoder, &arrayEncoder, t.datasets.size())); + for (const auto &d : t.datasets) { + cborErr(cbor_encoder_create_map(&arrayEncoder, &elementEncoder, 4)); + CBOR_ENC(elementEncoder, "project_name", d.project_name); + CBOR_ENC(elementEncoder, "crystal_name", d.crystal_name); + CBOR_ENC(elementEncoder, "dataset_name", d.dataset_name); + CBOR_ENC(elementEncoder, "wavelength", d.wavelength_A); + cborErr(cbor_encoder_close_container(&arrayEncoder, &elementEncoder)); + } + cborErr(cbor_encoder_close_container(&mapEncoder, &arrayEncoder)); + + cborErr(cbor_encode_text_stringz(&mapEncoder, "columns")); + cborErr(cbor_encoder_create_array(&mapEncoder, &arrayEncoder, t.columns.size())); + for (const auto &c : t.columns) { + cborErr(cbor_encoder_create_map(&arrayEncoder, &elementEncoder, 4)); + CBOR_ENC(elementEncoder, "label", c.label); + CBOR_ENC(elementEncoder, "type", std::string(1, c.type)); + CBOR_ENC(elementEncoder, "dataset_id", static_cast(c.dataset_id)); + CBOR_ENC(elementEncoder, "values", c.values); + cborErr(cbor_encoder_close_container(&arrayEncoder, &elementEncoder)); + } + cborErr(cbor_encoder_close_container(&mapEncoder, &arrayEncoder)); + + cborErr(cbor_encode_text_stringz(&mapEncoder, "batches")); + cborErr(cbor_encoder_create_array(&mapEncoder, &arrayEncoder, t.batches.size())); + for (const auto &b : t.batches) { + cborErr(cbor_encoder_create_map(&arrayEncoder, &elementEncoder, 5)); + CBOR_ENC(elementEncoder, "number", static_cast(b.number)); + CBOR_ENC(elementEncoder, "title", b.title); + CBOR_ENC(elementEncoder, "ints", b.ints); + CBOR_ENC(elementEncoder, "floats", b.floats); + CBOR_ENC(elementEncoder, "axes", b.axes); + cborErr(cbor_encoder_close_container(&arrayEncoder, &elementEncoder)); + } + cborErr(cbor_encoder_close_container(&mapEncoder, &arrayEncoder)); cborErr(cbor_encoder_close_container(&encoder, &mapEncoder)); } diff --git a/image_analysis/WriteReflections.cpp b/image_analysis/WriteReflections.cpp index 8cf24c2a5..53e4f69af 100644 --- a/image_analysis/WriteReflections.cpp +++ b/image_analysis/WriteReflections.cpp @@ -607,39 +607,48 @@ void WriteMmcifReflections(const std::vector &reflections, out.close(); } -MergedReflectionsMessage MergedReflectionsForWriter(const std::vector &reflections, - const UnitCell &unitCell, - const DiffractionExperiment &experiment, - const OutputProvenance &provenance) { - MergedReflectionsMessage m; +MtzTable MergedMtzTable(const std::vector &reflections, + const UnitCell &unitCell, + const DiffractionExperiment &experiment, + const OutputProvenance &provenance) { + MtzTable m; m.unit_cell = unitCell; m.space_group_name = experiment.GetSpaceGroupOrP1().xhm(); - m.wavelength_A = experiment.GetWavelength_A(); - m.crystal_name = experiment.GetSampleName(); + // Producing-software provenance in the MTZ header (title + HISTORY, the CCP4 convention). + m.title = "Rugnux merged reflections"; m.history.push_back("From Rugnux " + jfjoch_version() + ", data reduction"); AddProvenanceHistory(m.history, provenance); + // HKL_base first, so the data dataset is id 1: a dataset written as id 0 is the reserved base dataset + // as far as CCP4's mtzlib is concerned, and the wavelength on it is dropped - mtzinfo then reports the + // Cu K-alpha default 1.54187 A, which is what a program that takes f'/f'' from the file would phase on. + m.datasets = {{"HKL_base", "HKL_base", "HKL_base", 0.0f}, + {"native", experiment.GetSampleName(), "native", experiment.GetWavelength_A()}}; + // One row per reflection in the CCP4 anomalous layout (IMEAN + I(+)/I(-), and the same split for + // the French-Wilson amplitude), which aimless / ctruncate / mtz2sca / ANODE read directly. bool has_anom = true; const std::vector out_rows = BuildMergedRows(reflections, experiment, has_anom); - for (const auto& row : out_rows) { - m.h.push_back(row.h); - m.k.push_back(row.k); - m.l.push_back(row.l); - m.i_mean.push_back(row.Imean); - m.sigma_i_mean.push_back(row.sImean); - m.f.push_back(row.Fmean); - m.sigma_f.push_back(row.sFmean); - if (has_anom) { - m.i_plus.push_back(row.Ip); - m.sigma_i_plus.push_back(row.sIp); - m.i_minus.push_back(row.Im); - m.sigma_i_minus.push_back(row.sIm); - m.f_plus.push_back(row.Fp); - m.sigma_f_plus.push_back(row.sFp); - m.f_minus.push_back(row.Fm); - m.sigma_f_minus.push_back(row.sFm); - } - m.free_flag.push_back(static_cast(row.rfree)); + std::vector> columns{{"H", 'H'}, {"K", 'H'}, {"L", 'H'}, + {"IMEAN", 'J'}, {"SIGIMEAN", 'Q'}}; + if (has_anom) + columns.insert(columns.end(), {{"I(+)", 'K'}, {"SIGI(+)", 'M'}, {"I(-)", 'K'}, {"SIGI(-)", 'M'}}); + columns.insert(columns.end(), {{"F", 'F'}, {"SIGF", 'Q'}}); // F: the French-Wilson amplitude + if (has_anom) + columns.insert(columns.end(), {{"F(+)", 'G'}, {"SIGF(+)", 'L'}, {"F(-)", 'G'}, {"SIGF(-)", 'L'}}); + columns.push_back({"FreeR_flag", 'I'}); + for (const auto &[label, type] : columns) + m.columns.push_back({label, type, type == 'H' ? 0 : 1, {}}); + for (const auto &row : out_rows) { + std::vector v{static_cast(row.h), static_cast(row.k), static_cast(row.l), + row.Imean, row.sImean}; + if (has_anom) + v.insert(v.end(), {row.Ip, row.sIp, row.Im, row.sIm}); + v.insert(v.end(), {row.Fmean, row.sFmean}); + if (has_anom) + v.insert(v.end(), {row.Fp, row.sFp, row.Fm, row.sFm}); + v.push_back(static_cast(row.rfree)); + for (size_t c = 0; c < v.size(); c++) + m.columns[c].values.push_back(v[c]); } return m; } @@ -649,7 +658,7 @@ void WriteMtzReflections(const std::vector &reflections, const DiffractionExperiment &experiment, const OutputProvenance &provenance, const std::string &filename) { - WriteMergedMtz(MergedReflectionsForWriter(reflections, unitCell, experiment, provenance), filename); + WriteMtz(MergedMtzTable(reflections, unitCell, experiment, provenance), filename); } namespace { @@ -906,22 +915,22 @@ std::vector> SumRockingEvents(const std::vector &outcomes, - const UnitCell &unitCell, - const DiffractionExperiment &experiment, - bool sum_partials, - const OutputProvenance &provenance, - size_t nthreads) { - gemmi::Mtz mtz; - mtz.spacegroup = &experiment.GetSpaceGroupOrP1(); - mtz.set_cell_for_all(unitCell); +MtzTable UnmergedMtzTable(const std::vector &outcomes, + const UnitCell &unitCell, + const DiffractionExperiment &experiment, + bool sum_partials, + const OutputProvenance &provenance, + size_t nthreads) { + const gemmi::SpaceGroup *spacegroup = &experiment.GetSpaceGroupOrP1(); + MtzTable mtz; + mtz.space_group_name = spacegroup->xhm(); + mtz.unit_cell = unitCell; mtz.title = "Rugnux unmerged observations"; mtz.history.push_back("From Rugnux " + jfjoch_version() + ", data reduction"); AddProvenanceHistory(mtz.history, provenance); - mtz.add_base(); // the HKL_base dataset and the H K L columns - gemmi::Mtz::Dataset &ds = mtz.add_dataset("unmerged"); - ds.crystal_name = experiment.GetSampleName(); - ds.wavelength = experiment.GetWavelength_A(); + mtz.datasets = {{"HKL_base", "HKL_base", "HKL_base", 0.0f}, + {"unmerged", experiment.GetSampleName(), "unmerged", experiment.GetWavelength_A()}}; + const int dataset_id = 1; // Every data column belongs to HKL_base and only the batches carry a dataset id, as in a // POINTLESS file. Down to FLAG this is POINTLESS's own column set, plus QE and FLIGHT; the four after it @@ -941,22 +950,11 @@ gemmi::Mtz UnmergedMtz(const std::vector &outcomes, // rises above 1 toward the detector edge where a longer crossing makes the sensor more // efficient. DIALS stores the un-normalised absorbed fraction instead; the two differ by the // per-dataset constant QE(0), which is an overall scale. - mtz.add_column("M/ISYM", 'Y', 0, -1, false); - mtz.add_column("BATCH", 'B', 0, -1, false); - mtz.add_column("I", 'J', 0, -1, false); - mtz.add_column("SIGI", 'Q', 0, -1, false); - mtz.add_column("FRACTIONCALC", 'R', 0, -1, false); - mtz.add_column("XDET", 'R', 0, -1, false); - mtz.add_column("YDET", 'R', 0, -1, false); - mtz.add_column("ROT", 'R', 0, -1, false); - mtz.add_column("LP", 'R', 0, -1, false); - mtz.add_column("QE", 'R', 0, -1, false); - mtz.add_column("FLIGHT", 'R', 0, -1, false); - mtz.add_column("FLAG", 'I', 0, -1, false); - mtz.add_column("DELPHI", 'R', 0, -1, false); - mtz.add_column("ZETA", 'R', 0, -1, false); - mtz.add_column("BGMEAN", 'R', 0, -1, false); - mtz.add_column("BGVAR", 'R', 0, -1, false); + for (const auto &[label, type] : std::vector>{ + {"H", 'H'}, {"K", 'H'}, {"L", 'H'}, {"M/ISYM", 'Y'}, {"BATCH", 'B'}, {"I", 'J'}, {"SIGI", 'Q'}, + {"FRACTIONCALC", 'R'}, {"XDET", 'R'}, {"YDET", 'R'}, {"ROT", 'R'}, {"LP", 'R'}, {"QE", 'R'}, + {"FLIGHT", 'R'}, {"FLAG", 'I'}, {"DELPHI", 'R'}, {"ZETA", 'R'}, {"BGMEAN", 'R'}, {"BGVAR", 'R'}}) + mtz.columns.push_back({label, type, 0, {}}); const auto gon = experiment.GetGoniometer(); // A scanning goniometer means rugnux integrated a rocking curve image by image, so each @@ -985,7 +983,7 @@ gemmi::Mtz UnmergedMtz(const std::vector &outcomes, // None of the three is a scale, and a program that reads this file has no way to recompute them. The // partiality is NOT divided out - that IS a scale, FRACTIONCALC carries it, and every program // this file is for wants to handle it its own way. - gemmi::UnmergedHklMover hkl_mover(mtz.spacegroup); + gemmi::UnmergedHklMover hkl_mover(spacegroup); // The batch headers are written for every image the observations span, not only for the images // that produced one. AIMLESS starts a new run wherever the phi series jumps, so an image that // indexed nothing leaves a hole that cuts the sweep in two: measured on a 360 deg sweep with 67 @@ -1000,7 +998,7 @@ gemmi::Mtz UnmergedMtz(const std::vector &outcomes, // roughly halve AIMLESS's . Screw and glide absences ARE written: they are the evidence // the space group was chosen on, so a program reading this file can check that choice, and // removing them turns its test into an assumption. XDS and DIALS draw the line in the same place. - const char centering = mtz.spacegroup ? mtz.spacegroup->hm[0] : 'P'; + const char centering = spacegroup->hm[0]; // On stills only the crystals the merge takes are written: one whose cell is not the run's was indexed // in another lattice (on few spots, typically an axis multiple), so its indices do not name the @@ -1040,13 +1038,14 @@ gemmi::Mtz UnmergedMtz(const std::vector &outcomes, add_row(r); } - // Every row has its own slot, so they are filled on several workers. + // Every row has its own slot in each column, so they are filled on several workers. const size_t w = mtz.columns.size(); - mtz.data.resize(rows.size() * w); + for (auto &c : mtz.columns) + c.values.resize(rows.size()); ParallelChunks(static_cast(rows.size()), ThreadsForWork(rows.size(), nthreads), [&](int lo, int hi) { + std::vector row(w); for (int i = lo; i < hi; ++i) { const Reflection &r = *rows[i]; - float *row = &mtz.data[static_cast(i) * w]; std::array hkl{r.h, r.k, r.l}; const int isym = hkl_mover.move_to_asu(hkl); row[0] = static_cast(hkl[0]); @@ -1073,9 +1072,10 @@ gemmi::Mtz UnmergedMtz(const std::vector &outcomes, row[16] = r.zeta; row[17] = r.bkg; row[18] = r.var_bkg; + for (size_t c = 0; c < w; c++) + mtz.columns[c].values[i] = row[c]; } }); - mtz.nreflections = static_cast(mtz.data.size() / mtz.columns.size()); // The batch header's orientation matrix is the crystal at rotation angle zero - each batch's own // PHISTT is applied on top of it - but the lattice stored with an outcome is the crystal as it @@ -1106,7 +1106,7 @@ gemmi::Mtz UnmergedMtz(const std::vector &outcomes, gemmi::Mtz::Batch batch; batch.title = "Rugnux"; batch.axes.emplace_back("PHI"); - batch.set_dataset_id(ds.id); + batch.set_dataset_id(dataset_id); batch.ints[12] = 1; // ncryst batch.ints[14] = partials ? 1 : 2; // ldtype: oscillation data (2D spots) / area detector (3D) batch.ints[15] = 1; // jsaxs: the goniostat scan axis @@ -1143,38 +1143,41 @@ gemmi::Mtz UnmergedMtz(const std::vector &outcomes, batch.number = number; batch.floats[36] = phi_start_deg(static_cast(number - 1)); // phistt batch.floats[37] = batch.floats[36] + wedge_deg; // phiend - mtz.batches.push_back(batch); + mtz.batches.push_back({batch.number, batch.title, {batch.ints.begin(), batch.ints.end()}, batch.floats, + batch.axes}); } // By H K L M/ISYM BATCH, the order POINTLESS leaves an unmerged file in. This is Mtz::sort(5) - // a stable sort on those five columns - done on several workers: rows equal in all five keep the // order they were added in, so with the row number as the last key the order is total and the // parallel sort returns the same rows in the same order. - if (!mtz.has_data()) - mtz.sort(5); // no rows: its own "No data." failure, as before + if (rows.empty()) + gemmi::fail("No data."); // as gemmi's own sort has it { - std::vector order(mtz.nreflections); + std::vector order(rows.size()); std::iota(order.begin(), order.end(), 0); ParallelSort(order.begin(), order.end(), nthreads, [&](int i, int j) { - const float *a = &mtz.data[static_cast(i) * w], *b = &mtz.data[static_cast(j) * w]; - for (int n = 0; n < 5; ++n) - if (a[n] != b[n]) - return a[n] < b[n]; + for (int n = 0; n < 5; ++n) { + const float a = mtz.columns[n].values[i], b = mtz.columns[n].values[j]; + if (a != b) + return a < b; + } return i < j; }); - std::vector sorted(mtz.data.size()); - ParallelChunks(static_cast(order.size()), ThreadsForWork(order.size(), nthreads), [&](int lo, int hi) { - for (int i = lo; i < hi; ++i) - std::memcpy(&sorted[static_cast(i) * w], &mtz.data[static_cast(order[i]) * w], - w * sizeof(float)); - }); - mtz.data.swap(sorted); - mtz.sort_order = {{1, 2, 3, 4, 5}}; + for (auto &c : mtz.columns) { + std::vector sorted(order.size()); + ParallelChunks(static_cast(order.size()), ThreadsForWork(order.size(), nthreads), [&](int lo, int hi) { + for (int i = lo; i < hi; ++i) + sorted[i] = c.values[order[i]]; + }); + c.values.swap(sorted); + } + mtz.sort_order = {1, 2, 3, 4, 5}; } return mtz; } -void SetUnmergedMtzMosaicity(gemmi::Mtz &mtz, const std::vector &outcomes) { +void SetUnmergedMtzMosaicity(MtzTable &mtz, const std::vector &outcomes) { // The reflecting range of the same image the orientation matrix is taken from. std::optional mosaicity_deg; for (const auto &outcome : outcomes) { @@ -1194,9 +1197,9 @@ void WriteUnmergedMtzReflections(const std::vector &outcomes const OutputProvenance &provenance, const std::string &filename, size_t nthreads) { - gemmi::Mtz mtz = UnmergedMtz(outcomes, unitCell, experiment, sum_partials, provenance, nthreads); + MtzTable mtz = UnmergedMtzTable(outcomes, unitCell, experiment, sum_partials, provenance, nthreads); SetUnmergedMtzMosaicity(mtz, outcomes); - mtz.write_to_file(filename); + WriteMtz(mtz, filename); } void WriteReflections(const std::vector &reflections, diff --git a/image_analysis/WriteReflections.h b/image_analysis/WriteReflections.h index 68d2ab778..1d9053fd8 100644 --- a/image_analysis/WriteReflections.h +++ b/image_analysis/WriteReflections.h @@ -9,11 +9,9 @@ #include "../common/Reflection.h" #include "../common/UnitCell.h" #include "../common/DiffractionExperiment.h" -#include "../common/JFJochMessages.h" +#include "../common/MtzTable.h" #include "IntegrationOutcome.h" -#include - struct MergeStatistics; struct TwinningAnalysisResult; @@ -50,13 +48,14 @@ void WriteMmcifReflections(const std::vector &reflections, const std::string &filename, size_t nthreads); -// The merged MTZ as a structured END-message block: the columns, metadata and HISTORY records that -// WriteMtzReflections writes, for jfjoch_writer to write the same file (WriteMergedMtz, -// writer/WriteRugnuxFiles.h). WriteMtzReflections is exactly WriteMergedMtz of this. -MergedReflectionsMessage MergedReflectionsForWriter(const std::vector &reflections, - const UnitCell &unitCell, - const DiffractionExperiment &experiment, - const OutputProvenance &provenance); +// The merged MTZ: H K L IMEAN SIGIMEAN [I(+) SIGI(+) I(-) SIGI(-)] F SIGF [F(+) SIGF(+) F(-) SIGF(-)] +// FreeR_flag, one row per unique reflection in the CCP4 anomalous layout, the bracketed columns only where +// the merge kept a Bijvoet split; with the HISTORY records saying where it came from. WriteMtzReflections +// writes it (WriteMtz, writer/WriteRugnuxFiles.h). +MtzTable MergedMtzTable(const std::vector &reflections, + const UnitCell &unitCell, + const DiffractionExperiment &experiment, + const OutputProvenance &provenance); void WriteMtzReflections(const std::vector &reflections, const UnitCell &unitCell, @@ -98,17 +97,16 @@ void WriteUnmergedMtzReflections(const std::vector &outcomes const std::string &filename, size_t nthreads = 1); -// The same file in two steps, for a caller that builds it while the outcomes' per-image scale fields -// are still being written: UnmergedMtz reads everything but mosaicity_deg, which -// SetUnmergedMtzMosaicity then copies into the batch headers. The Mtz points at the experiment's space -// group, so the experiment has to outlive it. -gemmi::Mtz UnmergedMtz(const std::vector &outcomes, - const UnitCell &unitCell, - const DiffractionExperiment &experiment, - bool sum_partials, - const OutputProvenance &provenance, - size_t nthreads = 1); -void SetUnmergedMtzMosaicity(gemmi::Mtz &mtz, const std::vector &outcomes); +// The same file as its table, in two steps, for a caller that builds it while the outcomes' per-image +// scale fields are still being written: UnmergedMtzTable reads everything but mosaicity_deg, which +// SetUnmergedMtzMosaicity then copies into the batch headers. +MtzTable UnmergedMtzTable(const std::vector &outcomes, + const UnitCell &unitCell, + const DiffractionExperiment &experiment, + bool sum_partials, + const OutputProvenance &provenance, + size_t nthreads = 1); +void SetUnmergedMtzMosaicity(MtzTable &mtz, const std::vector &outcomes); void WriteReflections(const std::vector &reflections, const UnitCell &unitCell, diff --git a/image_analysis/scale_merge/RotationScaleMerge.cpp b/image_analysis/scale_merge/RotationScaleMerge.cpp index 86dc97067..b16a5e24a 100644 --- a/image_analysis/scale_merge/RotationScaleMerge.cpp +++ b/image_analysis/scale_merge/RotationScaleMerge.cpp @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include #include #include @@ -303,10 +303,10 @@ RotationScaleMerge::RotationScaleMerge(const DiffractionExperiment &experiment, std::optional reference_cell, int scaling_iterations, size_t nthreads, Logger &logger, - std::string observation_dump_path) + std::function observation_dump) : x(experiment), partials_out(partial_outcomes), reference_cell(std::move(reference_cell)), nthreads(nthreads == 0 ? AvailableCpus() : nthreads), logger(&logger), - observation_dump_path(std::move(observation_dump_path)) { + observation_dump(std::move(observation_dump)) { const auto s = x.GetScalingSettings(); min_partiality = s.GetMinPartiality(); d_min_limit = s.GetHighResolutionLimit_A(); @@ -401,7 +401,7 @@ void RotationScaleMerge::IngestHost() { // only the ingest arrays depends on whether the device pipeline will be active. gpu_ = std::make_unique(gpu_device); gpu_active_ = gpu_->Available() && !scale_on_cpu_; - resident_ingest = gpu_active_ && observation_dump_path.empty(); + resident_ingest = gpu_active_ && !observation_dump; #endif frame_cell_ok.assign(n_frames, 1); @@ -4403,7 +4403,7 @@ void RotationScaleMerge::Combine() { // Combine one raw-hkl run into fulls, appended to `out`. Independent per run (the events of one hkl // touch no shared state), so runs parallelise cleanly. Returns the number of usable partials seen. // `dump` (serial path only) writes each emitted full for the diagnostic observation dump. - auto process_rawrun = [&](int r, std::vector &out, std::ofstream *dump, int64_t &n_overloaded) -> size_t { + auto process_rawrun = [&](int r, std::vector &out, std::ostream *dump, int64_t &n_overloaded) -> size_t { prefetch_run(r + COMBINE_PREFETCH_RUNS); const int lo = rawrun_start[r], hi = rawrun_start[r] + rawrun_count[r]; std::vector ev; // usable perm-indices of this raw hkl, in image-number order @@ -4545,11 +4545,10 @@ void RotationScaleMerge::Combine() { size_t n_used = 0; std::vector> part; // the fulls of consecutive runs, in run order - if (!observation_dump_path.empty() || nthreads <= 1) { + if (observation_dump || nthreads <= 1) { // Serial (diagnostic dump needs a single writer). - std::ofstream dump; - if (!observation_dump_path.empty()) { - dump.open(observation_dump_path); + std::ostringstream dump; + if (observation_dump) { // Columns are enough to rescale/merge the combined fulls in an external program: peak_frame // is a per-full batch (ZD) and px/py the predicted detector position (XD/YD). dump << "# h k l I sigma d n_frames captured_fraction peak_frame px py\n"; @@ -4557,7 +4556,9 @@ void RotationScaleMerge::Combine() { part.resize(1); part[0].reserve(n_run); for (int r = 0; r < n_run; ++r) - n_used += process_rawrun(r, part[0], dump.is_open() ? &dump : nullptr, fulls_dropped_overloaded); + n_used += process_rawrun(r, part[0], observation_dump ? &dump : nullptr, fulls_dropped_overloaded); + if (observation_dump) + observation_dump(dump.str()); } else { // Parallel over contiguous rawrun chunks; the per-thread fulls are taken in run order below, so // the result is deterministic. @@ -6837,7 +6838,7 @@ RotationScaleMerge::Result RotationScaleMerge::RunArm(bool scale_partials, bool // scale-fulls loop below. Only the diagnostic dump (serial, one writer) falls back to CPU. The // decay/absorption correction surfaces run on the downloaded fulls (px/py is carried through the // combine) and their corrected corr is re-uploaded before the resident merge - so they stay on the GPU. - if (gpu_active_ && observation_dump_path.empty()) { + if (gpu_active_ && !observation_dump) { // The smoothed corr is already resident (scaling + smooth-G ran on the device, no round-trip). const int nf = gpu_->Combine(rawrun_group.data(), min_partiality, capture_uncertainty_coeff, min_captured_fraction, max_frame_gap, fulls_dropped_overloaded); diff --git a/image_analysis/scale_merge/RotationScaleMerge.h b/image_analysis/scale_merge/RotationScaleMerge.h index b1aa6d658..820d3fb7a 100644 --- a/image_analysis/scale_merge/RotationScaleMerge.h +++ b/image_analysis/scale_merge/RotationScaleMerge.h @@ -136,7 +136,7 @@ public: int scaling_iterations, size_t nthreads, Logger &logger, - std::string observation_dump_path = {}); + std::function observation_dump = {}); // Copy the per-frame partials into the flat buffers. Call once before the first Run(). void Ingest(); @@ -358,7 +358,8 @@ private: std::optional reference_cell; size_t nthreads; Logger *logger; - std::string observation_dump_path; + // Handed the text of the diagnostic observation dump each time the combine runs (CPU only). + std::function observation_dump; // The group the current Run merges in (see Run); null outside a Run that was given one. const gemmi::SpaceGroup *run_group = nullptr; const gemmi::SpaceGroup &Group() const { return run_group ? *run_group : x.GetSpaceGroupOrP1(); } diff --git a/image_analysis/structure_refinement/ModelValidation.cpp b/image_analysis/structure_refinement/ModelValidation.cpp index 0497730c2..6044222da 100644 --- a/image_analysis/structure_refinement/ModelValidation.cpp +++ b/image_analysis/structure_refinement/ModelValidation.cpp @@ -27,8 +27,6 @@ #include // get_size_for_hkl, get_f_phi_on_grid (the maps) #include // SolventMasker #include // Scaling (bulk solvent + anisotropic B) -#include // Ccp4 map I/O -#include // Mtz (map-coefficient output) #include // calculate_data_statistics #include "../../common/CorrelationCoefficient.h" @@ -79,22 +77,9 @@ gemmi::Grid map_from_coefficients(gemmi::AsuData> &co return MapFromFPhi(gemmi::get_f_phi_on_grid(coef, size, true)); } -// A file this run may already have written - the validation in the model's setting writes over the -// first one's maps - is removed before it is written again, not truncated: XFS (and ext4) flush a file -// truncated and rewritten when it is closed, and three 150 MB maps forced out to a disk that way cost -// seconds where a fresh file costs nothing. -void remove_before_rewriting(const std::string &path) { - std::remove(path.c_str()); -} - -// Write a map as CCP4; return its RMS (the sigma the map is read in). -double write_ccp4(const gemmi::Grid &map, const std::string &path) { - gemmi::Ccp4 ccp4; - ccp4.grid = map; - ccp4.update_ccp4_header(2); - remove_before_rewriting(path); - ccp4.write_ccp4_map(path); - return ccp4.hstats.rms; +// The RMS of a map, the sigma it is read in: the one its CCP4 header states (Ccp4::update_ccp4_header). +double map_rms(const gemmi::Grid &map) { + return gemmi::calculate_data_statistics(map.data).rms; } // Cubic, not the default linear, for reading a map at a point. The maps are sampled every d_min/3, @@ -536,7 +521,6 @@ namespace { ModelValidationResult Validate(const std::vector &merged, const UnitCell &cell, const RugnuxModel &model, - const std::string &output_prefix, Logger &logger, const gemmi::SpaceGroup *data_space_group, bool probe_indexing_ambiguity, @@ -1711,23 +1695,27 @@ ModelValidationResult Validate(const std::vector &merged, mapfofc.v.push_back({terms[i].hkl, delfwt[i] * ph}); } - // A validation started before the one it follows had decided writes nothing until that one has, - // and nothing at all where it decided otherwise. - if (schedule.write_gate.valid() && !schedule.write_gate.get()) { - result.failure_reason = "superseded before its files were written"; + // A validation started before the one it follows had decided makes no maps until that one has, + // and none at all where it decided otherwise. + if (schedule.maps_gate.valid() && !schedule.maps_gate.get()) { + result.failure_reason = "superseded before its maps were made"; return result; } - // Where the validation in the model's setting, started beside this one, is going to be kept, it - // writes the maps and the map coefficients on the axes the files are written on, and this one's would - // be overwritten unread: they are not made at all. + // Where the validation in the model's setting, started beside this one, is going to be kept, its + // maps and map coefficients are on the axes the files are written on, and this one's would be + // thrown away unread: they are not made at all. const bool maps_superseded = schedule.maps_superseded && schedule.maps_superseded(result); + std::shared_ptr maps; if (!maps_superseded) { - // --- write the maps and score the 2mFo-DFc map at atom centres (a real map peaks there) --- + maps = std::make_shared(); + // --- make the maps and score the 2mFo-DFc map at atom centres (a real map peaks there) --- // The three maps - this one, the difference map and the anomalous map - share nothing but what - // they read, so the other two are made and written on threads of their own beside this one. + // they read, so the other two are made on threads of their own beside this one. Nothing here + // reads the difference map, so it is made only where it is kept. std::future fofc_map = std::async(std::launch::async, [&] { - write_ccp4(map_from_coefficients(mapfofc, sf_gpu), output_prefix + "_fofc.ccp4"); + if (schedule.keep_map_grids) + maps->map_fofc = map_from_coefficients(mapfofc, sf_gpu); }); // --- anomalous difference map, where the merge kept the Bijvoet split --- @@ -1741,13 +1729,15 @@ ModelValidationResult Validate(const std::vector &merged, result.indexing_op, fmodel); result.anomalous_pairs = static_cast(mapanom.v.size()); if (!mapanom.v.empty()) { - const gemmi::Grid grid = map_from_coefficients(mapanom, sf_gpu); - read_anomalous_map(grid, write_ccp4(grid, output_prefix + "_anom.ccp4"), st, result); + gemmi::Grid grid = map_from_coefficients(mapanom, sf_gpu); + read_anomalous_map(grid, map_rms(grid), st, result); + if (schedule.keep_map_grids) + maps->map_anom = std::move(grid); } }); - const gemmi::Grid grid2fofc = map_from_coefficients(map2fofc, sf_gpu); - const double rms2 = write_ccp4(grid2fofc, output_prefix + "_2fofc.ccp4"); + gemmi::Grid grid2fofc = map_from_coefficients(map2fofc, sf_gpu); + const double rms2 = map_rms(grid2fofc); { double s = 0; int n = 0; for (gemmi::Model &m : st.models) @@ -1756,6 +1746,8 @@ ModelValidationResult Validate(const std::vector &merged, for (gemmi::Atom &a : r.atoms) { s += grid2fofc.interpolate_value(a.pos, MAP_INTERPOLATION_ORDER); ++n; } result.mean_atom_density_sigma = (n > 0 && rms2 > 0) ? (s / n) / rms2 : 0; } + if (schedule.keep_map_grids) + maps->map_2fofc = std::move(grid2fofc); fofc_map.get(); anomalous_map.get(); } @@ -1780,60 +1772,53 @@ ModelValidationResult Validate(const std::vector &merged, : "the model does not fit these data"); if (!maps_superseded) { - // --- MTZ of map coefficients so the maps can be re-opened / rebuilt in Coot etc. --- - try { - gemmi::Mtz mtz(true); - // The group the REFLECTIONS end up in, which is the model's only where its hand was adopted - - // AdoptModelFrame decides this the same way a few lines below. An enantiomorphic pair indexes - // identically, so the coefficients are the same numbers either way and only the label moves; - // but the two groups have different screw translations, so a reader that expands symmetry out - // of this file works in the wrong one if the label disagrees with the .mtz beside it. - mtz.spacegroup = result.adopted_model_enantiomorph - ? sg - // No data group means the caller merged in P1, and P1 is what the - // reflection files beside this one carry - not the model's group. - : (data_space_group != nullptr ? data_space_group - : gemmi::find_spacegroup_by_number(1)); - mtz.set_cell_for_all(ucell); - mtz.add_dataset("model_validation"); - mtz.datasets.back().wavelength = wavelength_A; - mtz.add_column("FP", 'F', -1, -1, false); - mtz.add_column("FC", 'F', -1, -1, false); - mtz.add_column("PHIC", 'P', -1, -1, false); - mtz.add_column("FWT", 'F', -1, -1, false); - mtz.add_column("PHWT", 'P', -1, -1, false); - mtz.add_column("DELFWT", 'F', -1, -1, false); - mtz.add_column("PHDELWT", 'P', -1, -1, false); - // The figure of merit the coefficients carry, so the weighting can be read off - and undone - - // from the file rather than having to be taken on trust. - mtz.add_column("FOM", 'W', -1, -1, false); - mtz.add_column("FREE", 'I', -1, -1, false); - std::vector data; - for (size_t i = 0; i < terms.size(); i++) { - // [0, 360), the convention the MTZ 'P' columns carried before sigma_A weighting: std::arg - // returns (-180, 180] and a P column is not supposed to. - const double phi_wrapped = terms[i].phi * 180.0 / PI; - const auto phi_deg = static_cast(phi_wrapped < 0 ? phi_wrapped + 360.0 : phi_wrapped); - data.insert(data.end(), {static_cast(terms[i].hkl[0]), static_cast(terms[i].hkl[1]), - static_cast(terms[i].hkl[2]), - static_cast(terms[i].fo), static_cast(terms[i].fc), - phi_deg, - fwt[i], phi_deg, - delfwt[i], phi_deg, - static_cast(sigma_a.weight[i].m), - terms[i].free ? 0.0f : 1.0f}); - } - mtz.nreflections = static_cast(terms.size()); - mtz.data = std::move(data); - remove_before_rewriting(output_prefix + "_maps.mtz"); - mtz.write_to_file(output_prefix + "_maps.mtz"); - } catch (const std::exception &e) { - logger.Warning("Model validation: could not write map MTZ: {}", e.what()); + // --- the map coefficients, so the maps can be re-opened / rebuilt in Coot etc. --- + MtzTable &mtz = maps->coefficients; + // The group the REFLECTIONS end up in, which is the model's only where its hand was adopted - + // AdoptModelFrame decides this the same way a few lines below. An enantiomorphic pair indexes + // identically, so the coefficients are the same numbers either way and only the label moves; + // but the two groups have different screw translations, so a reader that expands symmetry out + // of this file works in the wrong one if the label disagrees with the .mtz beside it. + mtz.space_group_name = result.adopted_model_enantiomorph + ? sg->xhm() + // No data group means the caller merged in P1, and P1 is what the + // reflection files beside this one carry - not the model's group. + : (data_space_group != nullptr ? data_space_group->xhm() + : gemmi::find_spacegroup_by_number(1)->xhm()); + mtz.unit_cell = UnitCell{static_cast(ucell.a), static_cast(ucell.b), + static_cast(ucell.c), static_cast(ucell.alpha), + static_cast(ucell.beta), static_cast(ucell.gamma)}; + mtz.datasets = {{"HKL_base", "HKL_base", "HKL_base", 0.0f}, + {"model_validation", "model_validation", "model_validation", + static_cast(wavelength_A)}}; + // The figure of merit the coefficients carry, so the weighting can be read off - and undone - + // from the file rather than having to be taken on trust. + const std::pair columns[] = {{"H", 'H'}, {"K", 'H'}, {"L", 'H'}, {"FP", 'F'}, + {"FC", 'F'}, {"PHIC", 'P'}, {"FWT", 'F'}, {"PHWT", 'P'}, + {"DELFWT", 'F'}, {"PHDELWT", 'P'}, {"FOM", 'W'}, + {"FREE", 'I'}}; + for (const auto &[label, type] : columns) + mtz.columns.push_back({label, type, type == 'H' ? 0 : 1, {}}); + for (size_t i = 0; i < terms.size(); i++) { + // [0, 360), the convention the MTZ 'P' columns carried before sigma_A weighting: std::arg + // returns (-180, 180] and a P column is not supposed to. + const double phi_wrapped = terms[i].phi * 180.0 / PI; + const auto phi_deg = static_cast(phi_wrapped < 0 ? phi_wrapped + 360.0 : phi_wrapped); + const float row[] = {static_cast(terms[i].hkl[0]), static_cast(terms[i].hkl[1]), + static_cast(terms[i].hkl[2]), + static_cast(terms[i].fo), static_cast(terms[i].fc), + phi_deg, + fwt[i], phi_deg, + delfwt[i], phi_deg, + static_cast(sigma_a.weight[i].m), + terms[i].free ? 0.0f : 1.0f}; + for (size_t c = 0; c < mtz.columns.size(); c++) + mtz.columns[c].values.push_back(row[c]); } } result.ok = true; - result.maps_prefix = output_prefix; + result.maps = std::move(maps); // The placed coordinates, for the caller to write out beside the maps once the frame is settled. result.placed_model = std::make_shared(st); logger.Info("Model validation: R-work={:.4f} ({} refl) R-free={:.4f} ({} refl) " @@ -1862,12 +1847,7 @@ ModelValidationResult Validate(const std::vector &merged, "data were indexed in the wrong hand, and reindexing would hide which", result.anomalous_deepest_site, result.anomalous_deepest_sigma); if (maps_superseded) - logger.Info("Model validation: no maps made here - the validation in the model's setting writes them"); - else - logger.Info("Model validation: wrote {}_2fofc.ccp4, {}_fofc.ccp4{}, {}_maps.mtz", - output_prefix, output_prefix, - result.anomalous_sites.empty() ? "" : ", " + output_prefix + "_anom.ccp4", - output_prefix); + logger.Info("Model validation: no maps made here - the validation in the model's setting makes them"); if (result.fit_tested && !result.model_fits) logger.Info("Model validation: the model was rejected, so nothing downstream moved - the " "reflection files are byte for byte the ones a run with no model would have " @@ -1917,7 +1897,6 @@ ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need ModelValidationResult ValidateAgainstModel(const std::vector &merged, const UnitCell &cell, const RugnuxModel &model, - const std::string &output_prefix, Logger &logger, const gemmi::SpaceGroup *data_space_group, bool probe_indexing_ambiguity, @@ -1932,7 +1911,7 @@ ModelValidationResult ValidateAgainstModel(const std::vector & // the validation reports why it did not finish, and a validation that did not finish decides nothing, // so the reflection files are those of a run without a model. try { - return Validate(merged, cell, model, output_prefix, logger, data_space_group, + return Validate(merged, cell, model, logger, data_space_group, probe_indexing_ambiguity, nthreads, wavelength_A, report_shell_d_min, schedule, twin_law, true, placed); } catch (const RigidBodyGPUFailure &e) { @@ -1945,7 +1924,7 @@ ModelValidationResult ValidateAgainstModel(const std::vector & return failed; } #else - return Validate(merged, cell, model, output_prefix, logger, data_space_group, probe_indexing_ambiguity, + return Validate(merged, cell, model, logger, data_space_group, probe_indexing_ambiguity, nthreads, wavelength_A, report_shell_d_min, schedule, twin_law, false, placed); #endif } diff --git a/image_analysis/structure_refinement/ModelValidation.h b/image_analysis/structure_refinement/ModelValidation.h index 594c3fb65..4dac7e8e8 100644 --- a/image_analysis/structure_refinement/ModelValidation.h +++ b/image_analysis/structure_refinement/ModelValidation.h @@ -11,15 +11,25 @@ #include #include +#include "gemmi/grid.hpp" #include "gemmi/symmetry.hpp" #include "../../common/Reflection.h" // MergedReflection #include "../../common/UnitCell.h" +#include "../../common/MtzTable.h" #include "RugnuxModel.h" class Logger; namespace gemmi { struct Structure; } +// The maps of a validation: their coefficients, as _maps.mtz holds them, and the maps themselves, +// as the .ccp4 files hold them, where the caller asked for them (ModelValidationSchedule::keep_map_grids). +// The anomalous map is there only where the merge kept the Bijvoet split. +struct ModelMaps { + MtzTable coefficients; + std::optional> map_2fofc, map_fofc, map_anom; +}; + // Result of validating merged intensities against an atomic model. struct ModelValidationResult { bool ok = false; @@ -58,7 +68,11 @@ struct ModelValidationResult { double radial_misfit = NAN; int shell_scale_bins = 0; double mean_atom_density_sigma = 0.0; // mean 2mFo-DFc value at atom centres, in sigma - std::string maps_prefix; // where the .ccp4 / _maps.mtz were written + // The maps, where this validation made them; the caller takes them over (null after that). + std::shared_ptr maps; + // Where the caller puts the maps beside the reflection files: "" for the answer's, "_mr" for the + // model's choice. Set by the caller; the report names . + std::string maps_suffix; // The rigid-body placement of the model against these data, where it was committed. The step is // taken only when it lowers R-free, so an unmoved model means the data said no, not that nothing @@ -211,8 +225,8 @@ struct ModelValidationResult { // Given merged intensities and an atomic model, scale the model structure factors (with an // optimized flat bulk-solvent contribution and an overall anisotropic B) to the WORKING observed -// amplitudes, then report R-work / R-free and write 2Fo-Fc and Fo-Fc electron-density maps -// (CCP4) plus an MTZ of map coefficients next to output_prefix. Nothing the reported R-free is +// amplitudes, then report R-work / R-free and make 2Fo-Fc and Fo-Fc electron-density maps and +// their coefficients (ModelValidationResult::maps). Nothing the reported R-free is // computed against was fitted on the free reflections: the scale, like the rigid-body placement // below, sees the working set only and is then applied to all of them. // @@ -266,10 +280,10 @@ struct ModelFrameForecast { struct ModelValidationSchedule { // Called once, before the null, with the forecast above. std::function on_forecast; - // Where valid, waited on before the first file is written: false returns without writing any. - std::shared_future write_gate; + // Where valid, waited on before the maps are made: false returns without making any. + std::shared_future maps_gate; // Asked once the verdict, the setting and the indexing are decided, before any map is made: true - // where another validation will write this one's maps and map coefficients, which are then not made. + // where another validation's maps and map coefficients are the ones kept, so this one's are not made. std::function maps_superseded; // The null that says whether the model fits. False where the verdict is another validation's // (KeepModelVerdict) or was reached elsewhere (a molecular-replacement placement, scored for its maps). @@ -280,6 +294,8 @@ struct ModelValidationSchedule { // GPU memory another validation running beside this one holds there. It limits how many engines // this one takes and never what runs on the GPU, so no number depends on whether the other runs. size_t gpu_beside_bytes = 0; + // Keep the maps themselves (ModelMaps), not only their coefficients: rugnux writes them as .ccp4. + bool keep_map_grids = false; }; // What a model validation needs of its card, part by part: the bytes of one engine of each, how many @@ -330,7 +346,6 @@ ModelValidationGPUPlan PlanModelValidationGPU(const ModelValidationGPUNeed &need ModelValidationResult ValidateAgainstModel(const std::vector &merged, const UnitCell &cell, const RugnuxModel &model, - const std::string &output_prefix, Logger &logger, const gemmi::SpaceGroup *data_space_group = nullptr, bool probe_indexing_ambiguity = true, diff --git a/receiver/JFJochReceiverRugnux.cpp b/receiver/JFJochReceiverRugnux.cpp index ec3084643..b4e9daf2a 100644 --- a/receiver/JFJochReceiverRugnux.cpp +++ b/receiver/JFJochReceiverRugnux.cpp @@ -246,7 +246,7 @@ void JFJochReceiverRugnux::RugnuxThread() { parallel_detail::WorkerPool::Instance().SetNice(10); try { const auto dataset = reader.GetDataset(); - const RugnuxLiveSetup setup = MakeRugnuxLiveSetup(*dataset, rugnux_nthreads, scratch_dir + "/p", model); + const RugnuxLiveSetup setup = MakeRugnuxLiveSetup(*dataset, rugnux_nthreads, model); LiveObserver observer(plots, scan_result, *az_int_mapping, live_status, logger); ProcessResult result; { @@ -288,7 +288,7 @@ void JFJochReceiverRugnux::ProbeThread() { const int64_t frames = std::lround(PROBE_DEG / std::abs(gonio->GetIncrement_deg())); if (2 * frames > static_cast(reader.GetNumberOfImages())) return; // a sweep this short is decided on soon enough by the run itself - RugnuxLiveSetup setup = MakeRugnuxLiveSetup(*dataset, rugnux_nthreads, "", nullptr); + RugnuxLiveSetup setup = MakeRugnuxLiveSetup(*dataset, rugnux_nthreads, nullptr); setup.config.end_image = static_cast(frames); setup.config.rotation_postrefine_geometry = false; setup.config.run_scaling = false; diff --git a/rugnux/CMakeLists.txt b/rugnux/CMakeLists.txt index 83444105f..448975f01 100644 --- a/rugnux/CMakeLists.txt +++ b/rugnux/CMakeLists.txt @@ -31,13 +31,18 @@ ADD_LIBRARY(JFJochRugnux STATIC BrokerFeed.h ) -TARGET_LINK_LIBRARIES(JFJochRugnux JFJochReader JFJochImageAnalysis JFJochWriter JFJochModelWriter JFJochPreview gemmi fftw3f +TARGET_LINK_LIBRARIES(JFJochRugnux JFJochReader JFJochImageAnalysis JFJochPreview gemmi fftw3f httplib::httplib) +# The files of a run, written by the programs that run one (rugnux, the viewer) from what JFJochRugnux +# returns: the library itself writes none. +ADD_LIBRARY(JFJochRugnuxOutput STATIC RugnuxOutputFiles.cpp RugnuxOutputFiles.h) +TARGET_LINK_LIBRARIES(JFJochRugnuxOutput JFJochRugnux JFJochWriter JFJochModelWriter) + # rugnux is the single offline analysis CLI; --mode picks what it does: mx (the full pipeline, the # default), azint, scale (re-scale/merge stored reflections) or calibration (powder-ring geometry). ADD_EXECUTABLE(rugnux rugnux_cli.cpp RugnuxConsole.cpp RugnuxConsole.h) -TARGET_LINK_LIBRARIES(rugnux JFJochRugnux JFJochReader JFJochImageAnalysis JFJochWriter) +TARGET_LINK_LIBRARIES(rugnux JFJochRugnuxOutput JFJochRugnux JFJochReader JFJochImageAnalysis JFJochWriter) INSTALL(TARGETS rugnux RUNTIME COMPONENT rugnux) # macOS: sign the installed binary with the Developer ID (hardened runtime, secure timestamp) so the # .tgz can be notarized - see JFJOCH_MACOS_SIGNING_IDENTITY in the top-level CMakeLists.txt. The diff --git a/rugnux/DiagnosticOutput.cpp b/rugnux/DiagnosticOutput.cpp index 96557552d..7083bccaa 100644 --- a/rugnux/DiagnosticOutput.cpp +++ b/rugnux/DiagnosticOutput.cpp @@ -5,7 +5,6 @@ #include #include -#include #include @@ -103,17 +102,13 @@ std::string RenderDetectorDiagnostic(const DiffractionExperiment &experiment, return WriteJPEGToMem(rgb_image, 85); } -void WritePerImagePlot(const std::string &output_prefix, const PerImagePlot &plot, - const std::optional &goniometer, size_t image_count) { - const std::string path = output_prefix + "_plot.txt"; - std::ofstream file(path, std::ofstream::out | std::ofstream::trunc); - if (!file) - throw JFJochException(JFJochExceptionCategory::FileWriteError, - "Cannot open " + path + " for writing"); +std::string PerImagePlotText(const PerImagePlot &plot) { + const std::optional &goniometer = plot.goniometer; + std::string file; // One comment line, its names over their own columns, and nothing else a plotting program has // to be told to skip. The '#' takes the first character of the image-number field. - file << "#" << fmt::format("{:>5} {:>10} {:>12} {:>12} {:>8} {:>12} {:>13} {:>12} {:>8}" + file += "#" + fmt::format("{:>5} {:>10} {:>12} {:>12} {:>8} {:>12} {:>13} {:>12} {:>8}" " {:>7} {:>11}\n", "image", "angle_deg", "bkg", "resolution_A", "spots", "scale_G", "sigma_M_deg", "cc_to_merge", "cc_n", "merged", "disposition"); @@ -125,7 +120,7 @@ void WritePerImagePlot(const std::string &output_prefix, const PerImagePlot &plo || std::any_of(plot.scale_g.begin(), plot.scale_g.end(), [](float g) { return std::isfinite(g); }); - for (size_t i = 0; i < image_count; i++) { + for (size_t i = 0; i < plot.image_count; i++) { const float angle = goniometer ? goniometer->GetAngle_deg(static_cast(i)) + goniometer->GetWedge_deg() / 2.0f @@ -152,11 +147,12 @@ void WritePerImagePlot(const std::string &output_prefix, const PerImagePlot &plo } else if (merge_ran && std::isfinite(scale_g)) disposition = 1.0f; - file << fmt::format("{:>6} {:>10.4f} {:>12.4g} {:>12.4g} {:>8.0f} {:>12.5g} {:>13.4f}" + file += fmt::format("{:>6} {:>10.4f} {:>12.4g} {:>12.4g} {:>8.0f} {:>12.5g} {:>13.4f}" " {:>12.4f} {:>8} {:>7} {:>11}\n", i, angle, Element(plot.bkg_estimate, i), Element(plot.resolution_A, i), Element(plot.spot_count, i), scale_g, Element(plot.mosaicity_deg, i), Element(plot.cc_to_merge, i), Element(plot.cc_n, i), merge_ran ? std::to_string(merged) : "nan", disposition); } + return file; } diff --git a/rugnux/DiagnosticOutput.h b/rugnux/DiagnosticOutput.h index 0566b2da5..04d41d4e2 100644 --- a/rugnux/DiagnosticOutput.h +++ b/rugnux/DiagnosticOutput.h @@ -40,9 +40,10 @@ struct PerImagePlot { std::vector cc_to_merge; std::vector cc_n; std::vector frame_disposition; + std::optional goniometer; // the angle column; none: nan + size_t image_count = 0; // the rows }; -// Writes _plot.txt: one '#' legend line naming the columns, then one whitespace- -// separated row per image, so `plot '' using 1:4` works with nothing in between. -void WritePerImagePlot(const std::string &output_prefix, const PerImagePlot &plot, - const std::optional &goniometer, size_t image_count); +// The text of _plot.txt: one '#' legend line naming the columns, then one whitespace-separated +// row per image, so `plot '' using 1:4` works with nothing in between. +std::string PerImagePlotText(const PerImagePlot &plot); diff --git a/rugnux/ResultReport.cpp b/rugnux/ResultReport.cpp index 9e56e7da6..61d8a5203 100644 --- a/rugnux/ResultReport.cpp +++ b/rugnux/ResultReport.cpp @@ -4,7 +4,6 @@ #include #include #include -#include #include #include @@ -1459,7 +1458,7 @@ ReportDocument BuildReportDocument(const std::string &output_prefix, domains ? ", or spots of the further lattice domains found land on those positions" : "", result.doubled_cell ? fmt::format("Both cells were merged; the other one is in {}.mtz - compare them in refinement", - result.doubled_cell->other_prefix) + output_prefix + result.doubled_cell->other_suffix) : fmt::format("The doubled cell {:.2f} {:.2f} {:.2f} {:.2f} {:.2f} {:.2f} was not merged", sc.doubled_cell.a, sc.doubled_cell.b, sc.doubled_cell.c, sc.doubled_cell.alpha, sc.doubled_cell.beta, sc.doubled_cell.gamma))); @@ -1467,7 +1466,7 @@ ReportDocument BuildReportDocument(const std::string &output_prefix, const auto &h = *result.doubled_cell; Add(s, KeyBool("DOUBLED_CELL_ADOPTED", h.adopted)); Add(s, KeyText("DOUBLED_CELL_DECISION", h.decision)); - Add(s, KeyText("DOUBLED_CELL_OTHER_FILE", h.other_prefix + ".mtz")); + Add(s, KeyText("DOUBLED_CELL_OTHER_FILE", output_prefix + h.other_suffix + ".mtz")); Add(s, KeyText("DOUBLED_CELL_OTHER_CELL", CellString(h.other_cell))); Add(s, KeyText("DOUBLED_CELL_OTHER_SPACE_GROUP", h.other_space_group)); Add(s, KeyReal("DOUBLED_CELL_OTHER_D_MIN", h.other_d_min_A, "{:.2f}")); @@ -1932,7 +1931,7 @@ ReportDocument BuildReportDocument(const std::string &output_prefix, } if (result.twin_subgroup_merge) { const auto &t = *result.twin_subgroup_merge; - Add(s, KeyText("TWIN_SUBGROUP_FILE", t.file_prefix + ".mtz")); + Add(s, KeyText("TWIN_SUBGROUP_FILE", output_prefix + t.file_suffix + ".mtz")); Add(s, KeyText("TWIN_SUBGROUP_SPACE_GROUP", t.space_group)); Add(s, KeyText("TWIN_SUBGROUP_LAW", t.twin_law)); Add(s, KeyReal("TWIN_SUBGROUP_FRACTION", t.twin_fraction, "{:.3f}")); @@ -1952,7 +1951,7 @@ ReportDocument BuildReportDocument(const std::string &output_prefix, " as _pdbx_reflns_twin). Refine against it with that twin law where the model prefers it.\n" " Nothing in this report or in the answer's files depends on it.{}", t.adopted_space_group, t.reason, t.space_group, t.adopted_space_group, t.space_group, - t.space_group, t.file_prefix, t.twin_law, t.twin_fraction, + t.space_group, output_prefix + t.file_suffix, t.twin_law, t.twin_fraction, t.other_subgroups.empty() ? std::string() : "\n Other subgroups the search confirmed, each a twin hypothesis of\n" " its own (re-run with -S to merge in one): see\n" @@ -2441,12 +2440,12 @@ ReportDocument BuildReportDocument(const std::string &output_prefix, mv.indexing_margin_null_sd), true)); Add(s, KeyReal("MODEL_INDEXING_MARGIN_SIGMA", mv.indexing_margin_sigma, "{:+.2f}", true)); } - if (!mv.maps_prefix.empty()) - Add(s, KeyText("MAPS_PREFIX", mv.maps_prefix)); + if (mv.ok && !output_prefix.empty()) + Add(s, KeyText("MAPS_PREFIX", output_prefix + mv.maps_suffix)); // The model's choice of another group or of the twin hypothesis' subgroup, by either route: files of // their own, never the answer's. - if (!result.model_prior_file_prefix.empty()) { - Add(s, KeyText("MODEL_CHOICE_FILE_PREFIX", result.model_prior_file_prefix)); + if (!result.model_prior_file_suffix.empty()) { + Add(s, KeyText("MODEL_CHOICE_FILE_PREFIX", output_prefix + result.model_prior_file_suffix)); Add(s, KeyText("MODEL_CHOICE_SPACE_GROUP", result.model_prior_file_space_group)); } // The twin hypothesis (section 4): the model scored against that merge too, and which of @@ -2474,7 +2473,7 @@ ReportDocument BuildReportDocument(const std::string &output_prefix, " fraction a scanned on the working set. The maps and the placed model come from {},\n" " the merge the model fits better on R-free ({:.4f} against {:.4f}). This chooses the\n" " maps only: the answer's reflection files and every number above are the answer's.", - t.space_group, t.file_prefix, t.twin_law, + t.space_group, output_prefix + t.file_suffix, t.twin_law, t.maps_from_this_merge ? "the merge in " + t.space_group : "the answer's merge", tv.twin_target ? std::min(tv.r_free, tv.r_free_twin) : tv.r_free, mv.r_free))); } @@ -2704,7 +2703,8 @@ ReportDocument BuildReportDocument(const std::string &output_prefix, " atoms that is not inverted (ENANTIOMORPH_VETOED otherwise) - and nothing else; another group it\n" " chooses is written as {}.mtz/.cif with the placed model.", mp.d_max_search, mp.d_min_search, - result.model_prior_file_prefix.empty() ? std::string("_mr") : result.model_prior_file_prefix))); + result.model_prior_file_suffix.empty() ? std::string("_mr") + : output_prefix + result.model_prior_file_suffix))); Add(s, Prose(fmt::format( " Seconds: model {:.2f}, transform {:.2f}, rotation {:.2f}, translation {:.2f}, rigid body and\n" " R-free {:.2f}, null {:.2f}, PAE domains {:.2f}, hand check {:.3f}.", mp.t_model, mp.t_transform, @@ -3136,26 +3136,3 @@ std::string RenderResultReport(const std::string &output_prefix, BuildReportDocument(output_prefix, input_file, experiment, result, provenance), provenance.developer); } - -ReportDocument WriteResultReport(const std::string &output_prefix, - const std::string &input_file, - const DiffractionExperiment &experiment, - const ProcessResult &result, - Logger &logger, - const RunProvenance &provenance) { - ReportDocument doc = BuildReportDocument(output_prefix, input_file, experiment, result, provenance); - if (output_prefix.empty()) - return doc; // "compute the statistics, persist nothing" - - const std::string filename = output_prefix + "_report.txt"; - // The report is unconditional, so it must never be the reason a run fails: a run that produced a - // good .mtz must survive an unwritable path or a full disk. Report the failure and carry on. - try { - std::ofstream file(filename); - file.exceptions(std::ios::failbit | std::ios::badbit); - file << RenderReportText(doc, provenance.developer); - } catch (const std::exception &e) { - logger.Warning("Could not write the results report {}: {}", filename, e.what()); - } - return doc; -} diff --git a/rugnux/ResultReport.h b/rugnux/ResultReport.h index d27bd3eb5..bdbbe1b72 100644 --- a/rugnux/ResultReport.h +++ b/rugnux/ResultReport.h @@ -72,14 +72,3 @@ std::string RenderResultReport(const std::string &output_prefix, const DiffractionExperiment &experiment, const ProcessResult &result, const RunProvenance &provenance = {}); - -// Renders and writes _report.txt, and returns the document it rendered (the CLI's -// closing summary reads it). Writes nothing when the prefix is empty (the "compute statistics, -// persist nothing" mode). Never throws: a run that produced good reflections must not be lost -// because a side file could not be written, so a failure is logged and swallowed. -ReportDocument WriteResultReport(const std::string &output_prefix, - const std::string &input_file, - const DiffractionExperiment &experiment, - const ProcessResult &result, - Logger &logger, - const RunProvenance &provenance = {}); diff --git a/rugnux/Rugnux.cpp b/rugnux/Rugnux.cpp index 23c1dfedb..899a7c4de 100644 --- a/rugnux/Rugnux.cpp +++ b/rugnux/Rugnux.cpp @@ -4,7 +4,6 @@ #include #include "Rugnux.h" #include "../image_analysis/structure_refinement/ModelValidation.h" -#include "../writer/WriteModel.h" #include "../image_analysis/indexing/SpindleCuspLoss.h" #include "../image_analysis/bragg_integration/SpotWidth.h" #include "../image_analysis/bragg_integration/SpotFootprint.h" @@ -19,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -40,7 +38,6 @@ #include "../common/CUDAWrapper.h" #include "../common/JFJochException.h" #include "../common/time_utc.h" -#include "../writer/FileWriter.h" #include "../image_analysis/MXAnalysisWithoutFPGA.h" #include "../image_analysis/beam_stop/ShadowFinder.h" #include "../image_analysis/IndexAndRefine.h" @@ -752,7 +749,9 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b const bool calibration = (config_.mode == ProcessMode::Calibration); const bool calibration_spots = calibration && config_.calibration_method == CalibrationMethod::Spots; const bool per_image_analysis = full || calibration; - const bool write_files = write_output && !config_.output_prefix.empty(); + // The output pass makes what the run returns to its caller (ProcessResult::outputs). + if (write_output && !geometry_prepass) + result.outputs = std::make_shared(); // Set below the first merge, once the pass can tell that RunAllPasses is going to throw it away and // run again - see there for what that turns off and why it is knowable at that point. bool superseded = false; @@ -762,9 +761,6 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b experiment_.BitDepthImage(32).PixelSigned(true); experiment_.Mode(DetectorMode::Standard); experiment_.OverwriteExistingFiles(true); - // Offline processing: the output prefix is a local path the operator chose (rugnux -o or the - // viewer's "next to the input file"), so use the trusted setter that permits an absolute path. - experiment_.FilePrefixTrusted(config_.output_prefix.empty() ? "output" : config_.output_prefix); experiment_.SetFileWriterFormat(FileWriterFormat::NXmxLegacy); experiment_.ImagesPerTrigger(images_to_process); experiment_.NumTriggers(1); @@ -838,7 +834,8 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b JFJochReceiverPlots plots; plots.Setup(experiment_, mapping); - // Output file (NXmxIntegrated master that links back to the original images). + // The per-image analysis' start message (an NXmxIntegrated master that links back to the original + // images); the image sink names the file. StartMessage start_message; experiment_.FillMessage(start_message); start_message.arm_date = dataset->arm_date; @@ -889,7 +886,7 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b } // The full-detector mask is 4 B/px and the ROI map 2 B/px - tens of megabytes each - and nothing - // but the process file reads them. Copy them where a writer is actually built rather than here: + // but the process file reads them. Copy them where the start message is handed on rather than here: // the default merging path writes no process file at all. auto fill_writer_maps = [&] { start_message.pixel_mask["default"] = pixel_mask_.GetMask(experiment_); @@ -897,18 +894,18 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b start_message.roi_map = experiment_.ExportROIMap(); }; - std::unique_ptr writer; + // The output pass streams its per-image analysis to the caller's image sink, where there is one. + RugnuxImageSink *const sink = write_output && !geometry_prepass ? config_.image_sink : nullptr; std::unique_ptr writer_queue; // Whether anything is in place to break the indexing ambiguity, for the warning further down: a // reference MTZ, or (serial stills) the reference computed from a model just below. bool ambiguity_reference = !config_.reference_data.empty(); - if (write_files && config_.write_process_h5) { + if (sink) { fill_writer_maps(); - writer = std::make_unique(start_message, /*check_overwrite_at_start=*/true, - /*trusted_path=*/true); + sink->Start(start_message, output_label_); // Deep enough that a worker never waits for the writer in the normal case, shallow enough that // the backlog is bounded by the worker count rather than by the length of the run. - writer_queue = std::make_unique(*writer, 4 * std::max(1, config_.nthreads)); + writer_queue = std::make_unique(*sink, 4 * std::max(1, config_.nthreads)); } const char *mode_name = full ? "full analysis" @@ -1002,26 +999,23 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b const int loop_end = geometry_prepass || prepass_frames_only_ ? prepass_end : end_image; // Declared here rather than where they are first filled, so that the phases below can share them - // through PipelineLocals: the bytes the image loop read, the end message (also written to the file), - // and the unmerged MTZ when it is built beside the reflection files (see there) with the - // experiment it is built from - which it points into for its space group, so it lives until the - // file is written. + // through PipelineLocals: the bytes the image loop read, the end message (also handed to the sink), + // and the unmerged MTZ when it is built beside the reflection files (see there). std::atomic total_uncompressed_bytes = 0; EndMessage end_msg; - std::optional unmerged_experiment; - std::future unmerged_mtz; + std::future unmerged_mtz; PipelineLocals p{ .logger = logger, .result = result, .observer = observer, .geometry_prepass = geometry_prepass, .full = full, .calibration = calibration, .calibration_spots = calibration_spots, .per_image_analysis = per_image_analysis, - .write_files = write_files, .start_image = start_image, .end_image = end_image, + .write_output = write_output, .start_image = start_image, .end_image = end_image, .images_to_process = images_to_process, .prepass_images = prepass_images, .loop_end = loop_end, .dataset = dataset, .mapping = mapping, .plots = plots, - .writer = writer, .writer_queue = writer_queue, .indexer_pool = indexer_pool, .indexer = indexer, + .sink = sink, .writer_queue = writer_queue, .indexer_pool = indexer_pool, .indexer = indexer, .indexing_bound_A = indexing_bound_A, .census_future = census_future, .superseded = superseded, .ambiguity_reference = ambiguity_reference, .start_time = start_time, .total_uncompressed_bytes = total_uncompressed_bytes, .end_msg = end_msg, - .unmerged_experiment = unmerged_experiment, .unmerged_mtz = unmerged_mtz}; + .unmerged_mtz = unmerged_mtz}; // First pass of two-pass rotation indexing (full analysis only). if (full && force_rotation_result_.has_value()) { @@ -1098,47 +1092,42 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b return result; } - TimingMark output_mark(logger, "output files"); + TimingMark output_mark(logger, "outputs"); // Unmerged observations. After the merge, because that is where the space group is settled and // the file has to be written in it, but from the integrated observations rather than the merged // ones: the partiality and the per-image scale are left for the reading program, which fits a - // scale model of its own. write_files, not write_output - without an output prefix there is - // nowhere to put it, and the name would come out as a bare "_unmerged.mtz". - if (full && !cancelled_ && write_files && !geometry_prepass && !superseded && result.consensus_cell) { + // scale model of its own. + if (full && !cancelled_ && result.outputs && !superseded && result.consensus_cell) { if (config_.export_unmerged) { - if (observer) observer->OnPhase("Writing unmerged reflections"); - const std::string path = config_.output_prefix + "_unmerged.mtz"; - if (unmerged_mtz.valid()) { - gemmi::Mtz mtz = unmerged_mtz.get(); - SetUnmergedMtzMosaicity(mtz, indexer->GetIntegrationOutcome()); - mtz.write_to_file(path); - } else - WriteUnmergedMtzReflections(indexer->GetIntegrationOutcome(), *result.consensus_cell, - experiment_, true, config_.provenance, path, config_.nthreads); - logger.Info("Unmerged observations written to {}", path); + if (observer) observer->OnPhase("Unmerged reflections"); + MtzTable mtz = unmerged_mtz.valid() + ? unmerged_mtz.get() + : UnmergedMtzTable(indexer->GetIntegrationOutcome(), *result.consensus_cell, + experiment_, true, config_.provenance, config_.nthreads); + SetUnmergedMtzMosaicity(mtz, indexer->GetIntegrationOutcome()); + result.outputs->unmerged = std::move(mtz); } if (config_.export_unmerged_partials) { - if (observer) observer->OnPhase("Writing unmerged reflections"); - const std::string path = config_.output_prefix + "_unmerged_partials.mtz"; - WriteUnmergedMtzReflections(indexer->GetIntegrationOutcome(), *result.consensus_cell, - experiment_, false, config_.provenance, path, config_.nthreads); - logger.Info("Unmerged partials written to {}", path); + if (observer) observer->OnPhase("Unmerged reflections"); + MtzTable mtz = UnmergedMtzTable(indexer->GetIntegrationOutcome(), *result.consensus_cell, + experiment_, false, config_.provenance, config_.nthreads); + SetUnmergedMtzMosaicity(mtz, indexer->GetIntegrationOutcome()); + result.outputs->unmerged_partials = std::move(mtz); } } // When merging is on, the _process.h5 is skipped because the merged reflections are the wanted // output and the per-image file is large. If nothing indexed there are no merged reflections, so - // the run would finish successfully having written no file at all. Write one now: the per-image - // messages went past while there was no writer, but the end message still carries the per-image + // the run would finish successfully having written no file at all. Hand the caller one: the + // per-image messages went past with no sink, but the end message still carries the per-image // scalars (spot counts, background, resolution estimate) and the dataset metadata - which is what // anyone asking "why did nothing index" needs, and it is small precisely because nothing indexed. - if (!writer && full && write_files && !cancelled_ && result.indexing_rate.value_or(0.0f) <= 0.0f) { - logger.Warning("No image indexed, so there are no merged reflections to write - writing " - "{}_process.h5 with the per-image analysis instead", config_.output_prefix); + if (!sink && full && result.outputs && !cancelled_ && result.indexing_rate.value_or(0.0f) <= 0.0f) { + logger.Warning("No image indexed, so there are no merged reflections - the per-image analysis is " + "kept for a _process.h5 instead"); fill_writer_maps(); - writer = std::make_unique(start_message, /*check_overwrite_at_start=*/true, - /*trusted_path=*/true); + result.outputs->process_start = start_message; } // The per-frame sigma_M the merge wrote back onto the outcomes (the _plots.txt column), for the report. @@ -1154,22 +1143,13 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b result.mosaicity_deg_p90 = mos[mos.size() * 9 / 10]; } } - // The two files a person checks the run by eye with. Not on the geometry pre-pass or a pass that - // is thrown away, which would otherwise leave a stale _01 copy beside the real one. The table is - // written on a stills run too - it is the only per-image scaling table there is, and the columns + // The two files a person checks the run by eye with. Not on a pass that is thrown away. The table + // is made on a stills run too - it is the only per-image scaling table there is, and the columns // a stills run cannot fill come out as nan; the picture is rotation-only at its source, since // only the rotation pre-scan builds the projection it draws. - if (full && write_files && !cancelled_ && !geometry_prepass && !superseded) { - const std::string jpeg = detector_diagnostic_jpeg_.valid() ? detector_diagnostic_jpeg_.get() : std::string(); - if (!jpeg.empty()) { - const std::string path = config_.output_prefix + "_detector.jpg"; - std::ofstream f(path, std::ofstream::out | std::ofstream::trunc | std::ofstream::binary); - if (f) { - f.write(jpeg.data(), static_cast(jpeg.size())); - logger.Info("Detector diagnostic image written to {}", path); - } else - logger.Warning("Cannot open {} for writing", path); - } + if (full && result.outputs && !cancelled_ && !superseded) { + if (detector_diagnostic_jpeg_.valid()) + result.outputs->detector_jpeg = detector_diagnostic_jpeg_.get(); PerImagePlot plot; plots.GetPlotRaw(plot.bkg_estimate, PlotType::BkgEstimate, ""); @@ -1188,17 +1168,17 @@ ProcessResult Rugnux::RunPipeline(RugnuxObserver *observer, bool write_output, b } if (result.has_merge_statistics) plot.frame_disposition = result.merge_statistics.sweep_quality.frame_disposition; - WritePerImagePlot(config_.output_prefix, plot, experiment_.GetGoniometer(), - static_cast(images_to_process)); - logger.Info("Per-image table written to {}_plot.txt", config_.output_prefix); + plot.goniometer = experiment_.GetGoniometer(); + plot.image_count = static_cast(images_to_process); + result.outputs->plot = std::move(plot); } - if (writer) { - writer->WriteHDF5(end_msg); - writer->Finalize(); - result.written_master_path = config_.output_prefix + "_process.h5"; - } + if (sink) + sink->End(end_msg); result.end_message = end_msg; + // A pass that is to be run again makes nothing. + if (superseded) + result.outputs.reset(); output_mark.Stop(); diff --git a/rugnux/Rugnux.h b/rugnux/Rugnux.h index c70acc7da..505e637ee 100644 --- a/rugnux/Rugnux.h +++ b/rugnux/Rugnux.h @@ -44,6 +44,7 @@ #include "../image_analysis/WriteReflections.h" // OutputProvenance #include "../image_analysis/bragg_integration/SpotWidth.h" // FluxCurve #include "../image_analysis/bragg_integration/SpotFootprint.h" // FootprintSpot +#include "DiagnosticOutput.h" // PerImagePlot class JFJochReader; class JFJochHDF5Reader; @@ -51,17 +52,31 @@ struct JFJochReaderRawImage; struct PipelineLocals; // RugnuxPipeline.h, private to the implementation // Offline reprocessing of a stored Jungfraujoch HDF5 dataset, shared by rugnux (all of its --mode -// values that read images) and (later) the viewer. The full workflow lives here, not in the CLIs: +// values that read images), the viewer and the broker. The full workflow lives here, not in the CLIs: // setup, an optional two-pass rotation-indexing pre-pass, a parallel per-image loop (std::thread), -// an optional scaling/merging post-pass, and the _process.h5 output. The detector geometry and all -// algorithm settings are configured on the DiffractionExperiment by the caller; ProcessConfig only -// carries run control. Cancellable from any thread (e.g. SIGINT or a GUI button) via Cancel(). +// an optional scaling/merging post-pass. It reads and writes no file: what it makes is returned in +// ProcessResult (RugnuxOutputs) and handed to RugnuxImageSink, and the caller writes it +// (RugnuxOutputFiles.h). The detector geometry and all algorithm settings are configured on the +// DiffractionExperiment by the caller; ProcessConfig only carries run control. Cancellable from any +// thread (e.g. SIGINT or a GUI button) via Cancel(). enum class ProcessMode { AzimuthalIntegration, // preprocess + azimuthal integration only (rugnux --mode=azint) FullAnalysis, // spot finding + indexing + refinement + integration (rugnux --mode=mx) Calibration // detector geometry from powder rings (rugnux --mode=calibration) }; +// Where the per-image analysis of an output pass goes as it is made: rugnux and the viewer put it in +// _process.h5 (ProcessFileSink, RugnuxOutputFiles.h). Called from one thread at a time. +class RugnuxImageSink { +public: + virtual ~RugnuxImageSink() = default; + // A pass starts. `label` tells its files apart from the answer's: empty for every pass but the + // doubled cell's, which is "_doubled" (ProcessResult::DoubledCell). + virtual void Start(const StartMessage &start, const std::string &label) = 0; + virtual void Write(const DataMessage &msg) = 0; + virtual void End(const EndMessage &end) = 0; +}; + struct ProcessConfig { ProcessMode mode = ProcessMode::FullAnalysis; @@ -73,20 +88,23 @@ struct ProcessConfig { // The per-image loop is capped in that case (see RunPipeline); an explicit -N never is. bool nthreads_auto = false; - // Output prefix for the _process.h5 (and scaled reflections). Empty => process without writing. - std::string output_prefix; - // What the reflection files record about where they came from (WriteReflections). + // What the reflection files record about where they came from (the MTZ HISTORY, WriteReflections). OutputProvenance provenance; - // Write the per-image _process.h5. Defaults true; rugnux turns it off when merging - // (the .mtz/.cif is the wanted output and the h5 is large) unless --write-process-h5 is given. - bool write_process_h5 = true; + // Where the per-image analysis of each output pass goes (the _process.h5); none: it is not kept. + // rugnux gives one when not merging, or with --write-process-h5. + RugnuxImageSink *image_sink = nullptr; - // Write the merged reflections (.mtz/.cif). Defaults true (the CLI always writes them when - // merging); the viewer can turn them off independently of the _process.h5 (e.g. a quick run that - // only wants the ISa/R-meas numbers). Only relevant to FullAnalysis with scaling. + // Make the merged reflections' outputs (RugnuxOutputs::merged and the twin hypothesis' and finalist + // ledger's merges). Defaults true (the CLI always writes them when merging); the viewer can turn them + // off (e.g. a quick run that only wants the ISa/R-meas numbers). Only relevant to FullAnalysis with + // scaling. bool write_merged = true; + // Keep the model validation's maps themselves (ModelMaps), not only their coefficients: rugnux writes + // them as .ccp4. The broker never asks for them. + bool keep_map_grids = false; + SpotFindingSettings spot_finding; // FullAnalysis spot finding (and Calibration by spots) // Calibration: how the powder rings are measured, and the calibrant's rings as q = 2*pi/d (1/A). @@ -191,15 +209,16 @@ struct ProcessConfig { std::string reference_path; std::string reference_column; - // Diagnostic: if set, the -P rot3d combine writes the unmerged fulls here (for comparison vs XDS). - std::string observation_dump_path; + // Diagnostic: if set, handed the unmerged fulls of every -P rot3d combine as text, for comparison + // with XDS (--dump-observations). + std::function observation_dump; - // Write the integrated observations as _unmerged.mtz, for aimless / pointless / careless - // and anything else that scales unmerged data itself - each rocking event summed into one full. - // On by default (--no-export-unmerged turns it off): it is how a run's observations reach the - // rest of the field, and a user who does not know the flag exists should still get the file. - // It is the largest file a run produces, so a batch that only wants the merged numbers turns it - // off. Needs an output prefix. + // Make the integrated observations as _unmerged.mtz (RugnuxOutputs::unmerged), for aimless / + // pointless / careless and anything else that scales unmerged data itself - each rocking event summed + // into one full. On by default (--no-export-unmerged turns it off): it is how a run's observations + // reach the rest of the field, and a user who does not know the flag exists should still get the + // file. It is the largest file a run produces, so a batch that only wants the merged numbers turns + // it off. bool export_unmerged = true; // The same as _unmerged_partials.mtz, with each partial written as its own row for the @@ -322,6 +341,48 @@ struct SearchMergeSignal { int64_t inner_reflections = 0; // ... of this many reflections }; +// The reflection files of one merge, .mtz and .cif (and the answer's .hkl): the MTZ as its +// table, and what the mmCIF and the HKLF-4 file are written from (WriteReflections.h). +struct MergedOutput { + std::string suffix; // "", "_twin_" or "_mr" + MtzTable mtz; + std::vector reflections; + UnitCell cell{}; + DiffractionExperiment experiment; // in the group the files are written in + MergeStatistics statistics; + ErrorModelReport error_model; + TwinningAnalysisResult twinning; // a twin hypothesis' law and fraction, for its mmCIF + std::vector scaled_fulls; // the .hkl's records, where the merge made them (rotation) +}; + +// An atomic model as placed against the data (_model.cif, WritePlacedModel): `cell` and +// `space_group` are those of the reflection files beside it. +struct PlacedModelOutput { + std::shared_ptr model; + UnitCell cell{}; + gemmi::SpaceGroup space_group; +}; + +// What a run makes for its caller to keep - the files rugnux writes, each named here after the file it +// goes to at the caller's prefix. Made by the output pass, the one whose result the run returns. +struct RugnuxOutputs { + std::optional merged; // .mtz/.cif/.hkl + std::optional twin; // the twin hypothesis' merge + std::optional model_prior; // the model's choice, _mr.mtz/.cif + std::shared_ptr maps; // _maps.mtz, _2fofc/_fofc/_anom.ccp4 + std::shared_ptr model_prior_maps; // the same at _mr + std::optional placed_model; // _model.cif/.pdb + std::optional model_prior_placed_model; // _mr_model.cif/.pdb + std::optional unmerged; // _unmerged.mtz + std::optional unmerged_partials; // _unmerged_partials.mtz + std::string detector_jpeg; // _detector.jpg; empty: none drawn + std::optional plot; // _plot.txt + // A run that indexed nothing, with no per-image analysis streamed (ProcessConfig::image_sink): the + // start message of a _process.h5 holding the end message (ProcessResult::end_message), so + // there is a file that says why nothing indexed. + std::optional process_start; +}; + struct ProcessResult { bool cancelled = false; uint64_t images_processed = 0; @@ -336,6 +397,8 @@ struct ProcessResult { // The end message of this pass, as the _process.h5 records it: the lattice, refined geometry, // reindexing and the run means - what the broker puts into its own when it runs rugnux live. EndMessage end_message; + // What this pass made for the caller to keep - the output pass's only; null on every other pass. + std::shared_ptr outputs; // Workers the per-image loop actually ran, which is not config.nthreads once the loop is capped. int image_loop_threads = 0; double frame_rate_hz = 0.0; @@ -392,7 +455,6 @@ struct ProcessResult { // every other class, or where the free refinement is not available. std::optional lattice_angle_departure_deg; MeanProcessingTime mean_processing_time{}; - std::optional written_master_path; std::string merge_statistics_text; // populated when scaling/merging ran // Structured merge statistics (per-shell + overall), populated when scaling/merging ran. ISa is @@ -569,7 +631,7 @@ struct ProcessResult { std::string reason; // why the hypothesis was written std::string adopted_space_group; // the group of the answer, as written std::string space_group; // the subgroup, as written (standard setting) - std::string file_prefix; // _twin_ + std::string file_suffix; // _twin_, or _mr: the files are std::string twin_law; // hkl triplet, on the subgroup file's axes double twin_fraction = NAN; // EstimateTwinLawFraction: a lower bound int twin_fraction_pairs = 0; @@ -591,7 +653,8 @@ struct ProcessResult { struct DoubledCell { bool adopted = false; // the answer is the doubled cell, the other one the probed cell std::string decision; // why, in the words the run reports it in - std::string other_prefix; // _halfcell or _doubled + std::string other_suffix; // _halfcell or _doubled: the other cell's files are + std::shared_ptr other_outputs; UnitCell other_cell{}; std::string other_space_group; double other_d_min_A = NAN, other_cc_half = NAN, other_r_free = NAN; @@ -611,9 +674,9 @@ struct ProcessResult { std::string model_placement; // What molecular replacement found, where it ran; failure_reason says why where it could not. std::optional model_prior; - // The file prefix the model's choice of another group or the twin hypothesis' subgroup was written under - // (_mr), and that group; empty where nothing was. - std::string model_prior_file_prefix; + // The file suffix the model's choice of another group or the twin hypothesis' subgroup is written under + // (_mr), and that group; empty where nothing was. + std::string model_prior_file_suffix; std::string model_prior_file_space_group; // Space group used for the final re-scale/merge and written to the master file: determined by the @@ -883,8 +946,11 @@ class Rugnux { std::optional force_rotation_result_; // The indexing result the last full pass integrated on, which the doubled-cell hypothesis doubles. std::optional last_rotation_result_; - // Keep the written merged reflections on the result (ProcessResult::merged_reflections). + // Keep the merged reflections on the result (ProcessResult::merged_reflections). bool keep_merged_reflections_ = false; + // What the image sink is told the output pass is (RugnuxImageSink::Start): "_doubled" for the doubled + // cell's pass, empty otherwise. + std::string output_label_; // The space group the USER fixed (-S on the CLI, the settings panel in the viewer), captured before // anything can clear it - a pass that determines a group of its own writes it onto the experiment, @@ -1270,7 +1336,8 @@ class Rugnux { RugnuxObserver *observer); // One full run of the pipeline (index + integrate + optional scale/merge/space-group + output). - // write_output == false suppresses all file output (the geometry pre-pass writes nothing). + // write_output == false makes no outputs (ProcessResult::outputs) and streams nothing to the image sink; + // nor does the geometry pre-pass. // geometry_prepass == true stops after post-refining the detector geometry from the first integration // and applies it (+ the refined lattice) to experiment_, so the next pass re-integrates with it. ProcessResult RunPipeline(RugnuxObserver *observer, bool write_output, bool geometry_prepass); @@ -1342,7 +1409,6 @@ class Rugnux { }; // What the refined passes start from. struct RefinedPassStart { - std::string base_prefix; std::optional gonio_snapshot; std::array header_geometry{}; RotationScaleOutcome scale_walk; // where the walk has ended before they start @@ -1351,8 +1417,7 @@ class Rugnux { // the rotation-scale walk and it overturned them. // After the refined passes: where the supercell probe's class stands clear, integrate and merge the // doubled cell too, and return whichever of the two is the answer (ProcessResult::doubled_cell). - ProcessResult DoubledCellHypothesis(RugnuxObserver *observer, ProcessResult half, - const std::string &base_prefix); + ProcessResult DoubledCellHypothesis(RugnuxObserver *observer, ProcessResult half); std::optional RefinedPasses(RugnuxObserver *observer, ProcessResult pass1, const RefinedPassStart &start); // The rotation-scale walk, its probes on copies of the run, while the refined passes run on a copy diff --git a/rugnux/RugnuxCalibration.cpp b/rugnux/RugnuxCalibration.cpp index 334d5d6e8..11d3e5cb6 100644 --- a/rugnux/RugnuxCalibration.cpp +++ b/rugnux/RugnuxCalibration.cpp @@ -4,7 +4,6 @@ #include #include "Rugnux.h" #include "../image_analysis/structure_refinement/ModelValidation.h" -#include "../writer/WriteModel.h" #include "../image_analysis/indexing/SpindleCuspLoss.h" #include "../image_analysis/bragg_integration/SpotWidth.h" #include "../image_analysis/bragg_integration/SpotFootprint.h" @@ -19,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -39,7 +37,6 @@ #include "../common/CUDAWrapper.h" #include "../common/JFJochException.h" #include "../common/time_utc.h" -#include "../writer/FileWriter.h" #include "../image_analysis/MXAnalysisWithoutFPGA.h" #include "../image_analysis/beam_stop/ShadowFinder.h" #include "../image_analysis/IndexAndRefine.h" diff --git a/rugnux/RugnuxCommandLine.cpp b/rugnux/RugnuxCommandLine.cpp index 4dd6d6dc7..9bdb53dd1 100644 --- a/rugnux/RugnuxCommandLine.cpp +++ b/rugnux/RugnuxCommandLine.cpp @@ -53,6 +53,8 @@ namespace { std::string RugnuxCommandLine(const ProcessConfig &config, const DiffractionExperiment &experiment, const std::string &input_file, + const std::string &output_prefix, + bool write_process_h5, const std::string &calibrant_name) { std::vector args; const bool azint = (config.mode == ProcessMode::AzimuthalIntegration); @@ -71,8 +73,8 @@ std::string RugnuxCommandLine(const ProcessConfig &config, args.push_back(val); }; - if (!config.output_prefix.empty()) - add("-o", config.output_prefix); + if (!output_prefix.empty()) + add("-o", output_prefix); // Every CPU the run may use is what rugnux takes without -N, on whatever machine runs the command. if (!config.nthreads_auto) add("-N", std::to_string(config.nthreads)); @@ -224,7 +226,7 @@ std::string RugnuxCommandLine(const ProcessConfig &config, // When merging, the CLI skips the large _process.h5 unless asked; emit the flag when it is // wanted so a copied command matches the GUI's "Save _process.h5" choice. (write_merged has // no CLI equivalent - the CLI always writes the .mtz/.cif when merging.) - if (config.write_process_h5) + if (write_process_h5) args.emplace_back("--write-process-h5"); // The low-resolution limit is on by default at the same value in both, so emit it only when // it differs - including 0, which is how the CLI spells "no limit". diff --git a/rugnux/RugnuxCommandLine.h b/rugnux/RugnuxCommandLine.h index f387a1686..b9f202709 100644 --- a/rugnux/RugnuxCommandLine.h +++ b/rugnux/RugnuxCommandLine.h @@ -14,7 +14,11 @@ class DiffractionExperiment; // matter for the run, not every obscure flag; geometry is taken from the input file, so geometry // overrides are not emitted. calibrant_name is only used by ProcessMode::Calibration - the config // carries the calibrant's rings, and --calibrant takes the name they were resolved from. +// output_prefix and write_process_h5 are where the run puts its files and whether a merging run writes +// its _process.h5 too. std::string RugnuxCommandLine(const ProcessConfig &config, const DiffractionExperiment &experiment, const std::string &input_file, + const std::string &output_prefix, + bool write_process_h5, const std::string &calibrant_name = ""); diff --git a/rugnux/RugnuxFirstPass.cpp b/rugnux/RugnuxFirstPass.cpp index 2f4840c13..74ba2d3f2 100644 --- a/rugnux/RugnuxFirstPass.cpp +++ b/rugnux/RugnuxFirstPass.cpp @@ -4,7 +4,6 @@ #include #include "Rugnux.h" #include "../image_analysis/structure_refinement/ModelValidation.h" -#include "../writer/WriteModel.h" #include "../image_analysis/indexing/SpindleCuspLoss.h" #include "../image_analysis/bragg_integration/SpotWidth.h" #include "../image_analysis/bragg_integration/SpotFootprint.h" @@ -19,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -39,7 +37,6 @@ #include "../common/CUDAWrapper.h" #include "../common/JFJochException.h" #include "../common/time_utc.h" -#include "../writer/FileWriter.h" #include "../image_analysis/MXAnalysisWithoutFPGA.h" #include "../image_analysis/beam_stop/ShadowFinder.h" #include "../image_analysis/IndexAndRefine.h" diff --git a/rugnux/RugnuxFirstPassAccept.cpp b/rugnux/RugnuxFirstPassAccept.cpp index f0eb897c6..aaf31b21c 100644 --- a/rugnux/RugnuxFirstPassAccept.cpp +++ b/rugnux/RugnuxFirstPassAccept.cpp @@ -4,7 +4,6 @@ #include #include "Rugnux.h" #include "../image_analysis/structure_refinement/ModelValidation.h" -#include "../writer/WriteModel.h" #include "../image_analysis/indexing/SpindleCuspLoss.h" #include "../image_analysis/bragg_integration/SpotWidth.h" #include "../image_analysis/bragg_integration/SpotFootprint.h" @@ -19,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -39,7 +37,6 @@ #include "../common/CUDAWrapper.h" #include "../common/JFJochException.h" #include "../common/time_utc.h" -#include "../writer/FileWriter.h" #include "../image_analysis/MXAnalysisWithoutFPGA.h" #include "../image_analysis/beam_stop/ShadowFinder.h" #include "../image_analysis/IndexAndRefine.h" diff --git a/rugnux/RugnuxFirstPassRescues.cpp b/rugnux/RugnuxFirstPassRescues.cpp index ccc616dfe..554ca3fb3 100644 --- a/rugnux/RugnuxFirstPassRescues.cpp +++ b/rugnux/RugnuxFirstPassRescues.cpp @@ -4,7 +4,6 @@ #include #include "Rugnux.h" #include "../image_analysis/structure_refinement/ModelValidation.h" -#include "../writer/WriteModel.h" #include "../image_analysis/indexing/SpindleCuspLoss.h" #include "../image_analysis/bragg_integration/SpotWidth.h" #include "../image_analysis/bragg_integration/SpotFootprint.h" @@ -19,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -39,7 +37,6 @@ #include "../common/CUDAWrapper.h" #include "../common/JFJochException.h" #include "../common/time_utc.h" -#include "../writer/FileWriter.h" #include "../image_analysis/MXAnalysisWithoutFPGA.h" #include "../image_analysis/beam_stop/ShadowFinder.h" #include "../image_analysis/IndexAndRefine.h" diff --git a/rugnux/RugnuxImagePass.cpp b/rugnux/RugnuxImagePass.cpp index 0510a79e9..8d31c3c00 100644 --- a/rugnux/RugnuxImagePass.cpp +++ b/rugnux/RugnuxImagePass.cpp @@ -4,7 +4,6 @@ #include #include "Rugnux.h" #include "../image_analysis/structure_refinement/ModelValidation.h" -#include "../writer/WriteModel.h" #include "../image_analysis/indexing/SpindleCuspLoss.h" #include "../image_analysis/bragg_integration/SpotWidth.h" #include "../image_analysis/bragg_integration/SpotFootprint.h" @@ -19,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -39,7 +37,6 @@ #include "../common/CUDAWrapper.h" #include "../common/JFJochException.h" #include "../common/time_utc.h" -#include "../writer/FileWriter.h" #include "../image_analysis/MXAnalysisWithoutFPGA.h" #include "../image_analysis/beam_stop/ShadowFinder.h" #include "../image_analysis/IndexAndRefine.h" @@ -713,7 +710,7 @@ void Rugnux::ImagePass(PipelineLocals &p) { // it is written in - the pair the volume comparisons in Run() need. result.consensus_centering = rot->search_result.centering; // Log only: what the rest of the sweep says about the decisions taken on its first part. - if (!p.geometry_prepass && p.write_files && experiment_.IsRotationIndexing()) + if (!p.geometry_prepass && p.write_output && experiment_.IsRotationIndexing()) FarEndCheck(p, *rot); } result.consensus_cell = indexer->GetConsensusUnitCell(); diff --git a/rugnux/RugnuxLive.cpp b/rugnux/RugnuxLive.cpp index b05cf60b8..df46c56e6 100644 --- a/rugnux/RugnuxLive.cpp +++ b/rugnux/RugnuxLive.cpp @@ -6,7 +6,7 @@ #include "RugnuxDefaults.h" RugnuxLiveSetup MakeRugnuxLiveSetup(const JFJochReaderDataset &dataset, int nthreads, - const std::string &output_prefix, std::shared_ptr model) { + std::shared_ptr model) { RugnuxLiveSetup s; // The experiment as rugnux_cli.cpp sets it up for a rotation sweep with no options given. @@ -36,8 +36,6 @@ RugnuxLiveSetup MakeRugnuxLiveSetup(const JFJochReaderDataset &dataset, int nthr ProcessConfig &c = s.config; c.mode = ProcessMode::FullAnalysis; c.nthreads = nthreads; - c.output_prefix = output_prefix; - c.write_process_h5 = false; c.export_unmerged = false; c.spot_finding = RugnuxDefaultSpotFinding(true); c.rotation_indexing = true; diff --git a/rugnux/RugnuxLive.h b/rugnux/RugnuxLive.h index c1e0820e8..c24df0e26 100644 --- a/rugnux/RugnuxLive.h +++ b/rugnux/RugnuxLive.h @@ -9,13 +9,13 @@ #include "../reader/JFJochReaderDataset.h" // A rotation collection processed inside the broker while its frames arrive: what a bare `rugnux` on -// the same file would set, with the run made fast_live. The output goes to output_prefix - a place -// private to the broker, from which it builds the END message - and the model, where one is given, -// is placed and validated as `rugnux --model` does. +// the same file would set, with the run made fast_live. What it makes is returned in memory +// (ProcessResult::outputs), for the broker to build the END message from, and the model, where one is +// given, is placed and validated as `rugnux --model` does. struct RugnuxLiveSetup { DiffractionExperiment experiment; ProcessConfig config; }; RugnuxLiveSetup MakeRugnuxLiveSetup(const JFJochReaderDataset &dataset, int nthreads, - const std::string &output_prefix, std::shared_ptr model); + std::shared_ptr model); diff --git a/rugnux/RugnuxOutputFiles.cpp b/rugnux/RugnuxOutputFiles.cpp new file mode 100644 index 000000000..1570f47e0 --- /dev/null +++ b/rugnux/RugnuxOutputFiles.cpp @@ -0,0 +1,176 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#include "RugnuxOutputFiles.h" + +#include +#include + +#include + +#include "../writer/FileWriter.h" +#include "../writer/WriteModel.h" +#include "../writer/WriteRugnuxFiles.h" + +namespace { + +void WriteCcp4(const gemmi::Grid &map, const std::string &path) { + gemmi::Ccp4 ccp4; + ccp4.grid = map; + ccp4.update_ccp4_header(2); + ccp4.write_ccp4_map(path); +} + +// The files of one output pass at `prefix`, all but its _process.h5. +void WriteOutputs(const RugnuxOutputs &o, const std::string &prefix, const OutputProvenance &provenance, + size_t nthreads, Logger &logger) { + if (o.merged) + WriteMergedOutput(*o.merged, prefix, provenance, nthreads, /*hkl=*/true); + if (o.twin) + WriteMergedOutput(*o.twin, prefix, provenance, nthreads, /*hkl=*/false); + if (o.model_prior) + WriteMergedOutput(*o.model_prior, prefix, provenance, nthreads, /*hkl=*/false); + if (o.maps) + WriteModelMaps(*o.maps, prefix, logger); + if (o.model_prior_maps) + WriteModelMaps(*o.model_prior_maps, prefix + "_mr", logger); + if (o.placed_model) + WritePlacedModel(*o.placed_model->model, o.placed_model->cell, o.placed_model->space_group, prefix, logger); + if (o.model_prior_placed_model) + WritePlacedModel(*o.model_prior_placed_model->model, o.model_prior_placed_model->cell, + o.model_prior_placed_model->space_group, prefix + "_mr", logger); + if (o.unmerged) { + WriteMtz(*o.unmerged, prefix + "_unmerged.mtz"); + logger.Info("Unmerged observations written to {}_unmerged.mtz", prefix); + } + if (o.unmerged_partials) { + WriteMtz(*o.unmerged_partials, prefix + "_unmerged_partials.mtz"); + logger.Info("Unmerged partials written to {}_unmerged_partials.mtz", prefix); + } + if (!o.detector_jpeg.empty()) { + const std::string path = prefix + "_detector.jpg"; + std::ofstream f(path, std::ofstream::out | std::ofstream::trunc | std::ofstream::binary); + if (f) { + f.write(o.detector_jpeg.data(), static_cast(o.detector_jpeg.size())); + logger.Info("Detector diagnostic image written to {}", path); + } else + logger.Warning("Cannot open {} for writing", path); + } + if (o.plot) { + WritePerImagePlot(prefix, *o.plot); + logger.Info("Per-image table written to {}_plot.txt", prefix); + } +} + +} // namespace + +ProcessFileSink::ProcessFileSink(std::string prefix) : prefix_(std::move(prefix)) {} + +ProcessFileSink::~ProcessFileSink() = default; + +void ProcessFileSink::Start(const StartMessage &start, const std::string &label) { + writer_.reset(); + StartMessage s = start; + s.file_prefix = prefix_ + label; + writer_ = std::make_unique(s, /*check_overwrite_at_start=*/true, /*trusted_path=*/true); +} + +void ProcessFileSink::Write(const DataMessage &msg) { + writer_->Write(msg); +} + +void ProcessFileSink::End(const EndMessage &end) { + writer_->WriteHDF5(end); + writer_->Finalize(); + writer_.reset(); +} + +void WriteRugnuxOutputs(const ProcessResult &result, const std::string &prefix, const OutputProvenance &provenance, + size_t nthreads, Logger &logger) { + if (result.outputs) { + WriteOutputs(*result.outputs, prefix, provenance, nthreads, logger); + if (result.outputs->process_start) { + StartMessage start = *result.outputs->process_start; + start.file_prefix = prefix; + FileWriter writer(start, /*check_overwrite_at_start=*/true, /*trusted_path=*/true); + writer.WriteHDF5(result.end_message); + writer.Finalize(); + } + } + if (result.doubled_cell) { + const ProcessResult::DoubledCell &h = *result.doubled_cell; + if (h.other_outputs) + WriteOutputs(*h.other_outputs, prefix + h.other_suffix, provenance, nthreads, logger); + // The doubled cell's pass put its per-image analysis under a name of its own; where it is the answer, + // the two _process.h5 files trade names, as the other files of the two passes are named. + std::error_code ec; + if (h.adopted && std::filesystem::exists(prefix + "_doubled_process.h5", ec)) { + if (std::filesystem::exists(prefix + "_process.h5", ec)) + std::filesystem::rename(prefix + "_process.h5", prefix + h.other_suffix + "_process.h5", ec); + std::filesystem::rename(prefix + "_doubled_process.h5", prefix + "_process.h5", ec); + } + } +} + +void WriteMergedOutput(const MergedOutput &merged, const std::string &prefix, const OutputProvenance &provenance, + size_t nthreads, bool hkl) { + // An MTZ, an mmCIF and a SHELX HKLF-4 .hkl - each has its uses downstream (MTZ for the CCP4 / phenix + // reflection tools, mmCIF for deposition and as the self-describing native format, HKLF-4 for SHELXL + // refinement and SHELXC / ANODE substructure solution). The .hkl holds the unmerged scaled fulls where the + // merge provides them (rotation), the merged reflections otherwise (stills). + const std::string file = prefix + merged.suffix; + WriteMtz(merged.mtz, file + ".mtz"); + WriteMmcifReflections(merged.reflections, merged.cell, merged.experiment, merged.statistics, merged.error_model, + merged.twinning, provenance, file + ".cif", nthreads); + if (!hkl) + return; + if (!merged.scaled_fulls.empty()) + WriteShelxHklReflections(merged.scaled_fulls, file + ".hkl", nthreads); + else + WriteShelxHklReflections(merged.reflections, merged.experiment, file + ".hkl", nthreads); +} + +void WriteModelMaps(const ModelMaps &maps, const std::string &prefix, Logger &logger) { + WriteMtz(maps.coefficients, prefix + "_maps.mtz"); + if (maps.map_2fofc) + WriteCcp4(*maps.map_2fofc, prefix + "_2fofc.ccp4"); + if (maps.map_fofc) + WriteCcp4(*maps.map_fofc, prefix + "_fofc.ccp4"); + if (maps.map_anom) + WriteCcp4(*maps.map_anom, prefix + "_anom.ccp4"); + logger.Info("Model validation: wrote {}_maps.mtz{}", prefix, + maps.map_2fofc ? fmt::format(", {0}_2fofc.ccp4, {0}_fofc.ccp4{1}", prefix, + maps.map_anom ? ", " + prefix + "_anom.ccp4" : std::string()) + : std::string()); +} + +void WritePerImagePlot(const std::string &prefix, const PerImagePlot &plot) { + const std::string path = prefix + "_plot.txt"; + std::ofstream file(path, std::ofstream::out | std::ofstream::trunc); + if (!file) + throw JFJochException(JFJochExceptionCategory::FileWriteError, "Cannot open " + path + " for writing"); + file << PerImagePlotText(plot); +} + +ReportDocument WriteResultReport(const std::string &output_prefix, + const std::string &input_file, + const DiffractionExperiment &experiment, + const ProcessResult &result, + Logger &logger, + const RunProvenance &provenance) { + ReportDocument doc = BuildReportDocument(output_prefix, input_file, experiment, result, provenance); + if (output_prefix.empty()) + return doc; // "compute the statistics, persist nothing" + + const std::string filename = output_prefix + "_report.txt"; + // The report is unconditional, so it must never be the reason a run fails: a run that produced a + // good .mtz must survive an unwritable path or a full disk. Report the failure and carry on. + try { + std::ofstream file(filename); + file.exceptions(std::ios::failbit | std::ios::badbit); + file << RenderReportText(doc, provenance.developer); + } catch (const std::exception &e) { + logger.Warning("Could not write the results report {}: {}", filename, e.what()); + } + return doc; +} diff --git a/rugnux/RugnuxOutputFiles.h b/rugnux/RugnuxOutputFiles.h new file mode 100644 index 000000000..86f425576 --- /dev/null +++ b/rugnux/RugnuxOutputFiles.h @@ -0,0 +1,58 @@ +// SPDX-FileCopyrightText: 2026 Filip Leonarski, Paul Scherrer Institute +// SPDX-License-Identifier: GPL-3.0-only + +#pragma once + +#include +#include + +#include "Rugnux.h" +#include "ResultReport.h" + +class FileWriter; + +// The files of a run, written by the program that ran it - rugnux and the viewer - from what the analysis +// returned: the library itself writes none. + +//
getGet full scan result

Jungfraujoch (1.0.0-rc.175)

Download OpenAPI specification:

Filip Leonarski (Paul Scherrer Institute): filip.leonarski@psi.ch License: GPL-3.0

API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). + " fill="currentColor">

Jungfraujoch (1.0.0-rc.176)

Download OpenAPI specification:

Filip Leonarski (Paul Scherrer Institute): filip.leonarski@psi.ch License: GPL-3.0

API to control Jungfraujoch developed by the Paul Scherrer Institute (Switzerland). Jungfraujoch is a data acquisition and analysis system for pixel array detectors, primarly PSI JUNGFRAU. Jungfraujoch uses FPGA boards to acquire data at high data rates.

License Clarification

While this API definition is licensed under GPL-3.0, the GPL copyleft provisions do not apply @@ -996,14 +996,35 @@ This format doesn't transmit information about X-axis, only values, so it i

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Get image message in CBOR format

Contains full image data and metadata. The image must come from the latest data collection.

+
http://localhost:5232/image_buffer/start.cbor

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Event stream of the collection, for a reader following it

Server-sent events (text/event-stream) for the current collection, from the moment /start has +accepted it: first its whole history, then every change, until it ends or a new collection +begins. Only one reader at a time. Events, each with a JSON data line:

+
    +
  • start {run_number, run_name, file_prefix, number_of_images, images_per_file, cbor} - first, +once the start message is known: at once for a JUNGFRAU, when the detector sends its own for +a DECTRIS. cbor is the start message the writer of the master file received, CBOR in base64; +a reader builds the dataset from it;
  • +
  • file {file_number, file, first_image, image_count} - a data file closed and renamed into +place; file is relative to the collection's root, as the writer named it;
  • +
  • end {images, error?} - every writer acknowledged the end: the data files and the master +file are in place; images is the number of images collected. Also sent, with error, when +the measurement ends any other way - before the start message, for one. The stream then closes;
  • +
  • superseded {run_number} - a new collection began. The stream then closes. +A comment line (: keepalive) every 10 s when nothing happens.
  • +
+
Authorizations:
bearerAuth

Responses

Get image message in CBOR format

Contains full image data and metadata. The image must come from the latest data collection.

Authorizations:
bearerAuth
query Parameters
id
integer <int64> >= -2
Default: -1

Image ID in the image buffer. Special values: -1 - last image in the buffer, -2: last indexed image in the buffer

Responses

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Get preview image in JPEG format using custom settings

Authorizations:
bearerAuth
query Parameters
id
integer <int64> >= -2
Default: -1

Image ID in the image buffer. Special values: -1 - last image in the buffer, -2: last indexed image in the buffer

+
http://localhost:5232/image_buffer/image.cbor

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Get preview image in JPEG format using custom settings

Authorizations:
bearerAuth
query Parameters
id
integer <int64> >= -2
Default: -1

Image ID in the image buffer. Special values: -1 - last image in the buffer, -2: last indexed image in the buffer

show_user_mask
boolean
Default: false

Show user mask

show_roi
boolean
Default: false

Show ROI areas on the image

show_spots
boolean
Default: true

Show spot finding results on the image

@@ -1020,7 +1041,7 @@ This format doesn't transmit information about X-axis, only values, so it i

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Get preview image in TIFF format

Authorizations:
bearerAuth
query Parameters
id
integer <int64> >= -2
Default: -1

Image ID in the image buffer. Special values: -1 - last image in the buffer, -2: last indexed image in the buffer

+
http://localhost:5232/image_buffer/image.jpeg

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Get preview image in TIFF format

Authorizations:
bearerAuth
query Parameters
id
integer <int64> >= -2
Default: -1

Image ID in the image buffer. Special values: -1 - last image in the buffer, -2: last indexed image in the buffer

Responses

Responses

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Get status of the image buffers

Can be run at any stage of Jungfraujoch operation, including during data collection. +

http://localhost:5232/image_buffer/clear

Response samples

Content type
application/json
{
  • "msg": "Detector in wrong state",
  • "reason": "WrongDAQState"
}

Get status of the image buffers

Can be run at any stage of Jungfraujoch operation, including during data collection. The status of the image buffer is volatile during data collection - if data collection goes for more images than available buffer slots, then image might be replaced in the buffer between calling /images and /image.cbor.

Responses

Response samples

Content type
application/json
{
  • "min_image_number": 0,
  • "max_image_number": 0,
  • "image_numbers": [
    ],
  • "total_slots": 0,
  • "available_slots": 0,
  • "in_preparation_slots": 0,
  • "in_sending_slots": 0,
  • "current_counter": 0
}

Get Jungfraujoch version of jfjoch_broker

Responses

Response samples

Content type
application/json
{
  • "min_image_number": 0,
  • "max_image_number": 0,
  • "image_numbers": [
    ],
  • "total_slots": 0,
  • "available_slots": 0,
  • "in_preparation_slots": 0,
  • "in_sending_slots": 0,
  • "current_counter": 0
}

Get Jungfraujoch version of jfjoch_broker

Responses

>fDDSkJeG+K&Dig=##F}96 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 z z4DEmtU2>{Ao%sUh2ibY+;guz}Kk|Wd2vvEik{fWJ#wgajO_OwTSzrM#Q@duXjxs-eX?-#X#&mcODG=v!wgbB)ow!xE;BbZ^qUHO8cxU=6z5YXw?s@ zkddtax4Owl>gcn$2Q}&Ut6{2W2HcDh)==#>k9PAs4;|0)kk2RyaK|E zl@d2zeiZbFVT4%vxaixA7*eWtoUSSt&Qax)JC2qmt;9OE^pnH8a~3FjIc^RS0Y2g=^r9cljnj~ z%CM^cFvj5^I4?VXK-ZIZojW0#tiA4swHUIpt$?NU{R>bpIu&|TkWG(u%Wb@7x6Y#6 zgga;T7w`oN_Q~azYQD-~SeHtO-&>^X)70}?&arsw=I!DdMW^Np2;Ce{LT&|1Om0q3 zNd6rB%v}z4M;n1GLR{cQLcL=(F8rnvqbTL|(qTM3&nr_qmsJ8GSKp|h>224j_a;2C z&w5@uBTb)>%5JAdGbv$E2$J0zdYyG zq$Zz~6-!0#Z|Asb^tIxxwGM_lO=J{y1H3oxzo8a$xs2!ydKv}M{FwgA$Mtf?ZG>-E z`wnVA=P<0h-JVbv%Hn4Q4Bv~#Acmi&D{U^^+MFXbRUE<8J-=F7LifG)FSGfieWy5M zOGy?Cn-0#Ni%=}KSjG5-2^Jj~>pnBD{mH>@9Yx5G;d1EgW^UO(zDyKR_sFGfjZjoe z3{|(WuSAu=@b50wG?qxg?Wvpo%)ZoKdKz2+Spa#8IYS88dT!kq>bD>Ze|jjo*0#rS5`F zdIHIfYnARUXk99wln0j6SOUIbc7hA|HEKBm$ClW~l98Zh_$C#K?0&fNF4~fjc4F@x zO0bFh13Z0nSq%%Q@lhIm|3`~~{`*~TA!OnS$f{q!z!6>E*%|1@ynXGCNVd&bE48kq zT*N&&*vM#2gH4+XdKCWKH%$0}x|;HNcqoUNwkYBrxrclup49^-gTWEOZ{PVzY#x_v| zHfT=aNBn3)5`(e*Q{~X=p*M%XWWHWVO}jqM(im|r20lq;d3gmpdDtVYOJUR~DwA1o z2T*W!mUXU-UlzJAM}8H*$BBLd&%6nx+mxTTjp!X&a7>ihjuzrX(s+BPz^xi^CIUOB zU_y|d5mYC`u@*+e*Qdy%z_F+GEc8KVWBM2>y8Uy#;7IC^AOy3$={*RVek)(Sr!aSC zG&;c8FV+RRzUylxDTZEC_r>Suohf3L6SPb>$M>8|_$}*UbGYXO5`fU;G<`oR@#S^n z&L_#O$h1c?%Z_D78|DH_0~dEck`EqyMLT$#e^b*G{i&k>wkJIME$sI-J4ak{^=_m7 zm&Q5hjOt4m`+MPP?~3F1#{SB_LoMH9o72~OQUW9#!?rS*T>CM#u817{AF#G??s_{P zgK8q}E;hr(7kpeRX5n9iZ|ol7_k1zflQQ`PCEUm)G0q+w0wx9lu_HvXSQK<=7WaEQcHW9OUpB>fBoQ@3q z{;YJ3{4F?w23$U#!WYIB+U(u)38rm z9H?k#QLZ;D$AZXZ50Zb)QG1<}7rFbw@fxm+kU{)EpDKm2QaLwH=A}QMm1_>GJ{`gKmO3rApe!6NYUis&_EkZJ>|k#3LfWc`<#z#3_D)DA zATUS|y7~F`2yV}dSFG2}sViLpV)ys*`9@_vT=j7935004`i!upqJJ7CogLvO#YcR+ z5Djadt439}Z%t-2o+b0_Kj0Ak3J zX-s~=V^inAi2PRnw?3);>MsoEWG)L2<<7l%wQJPwFz_kYgNUz?m87C76IEolE= zO`*Msc{?LBO+iO#=Bqr){k4BY3 zW0_9+sFURe30L3BoMy0tGRV#vT#y;%%(m+a8082o^D%bcMoxG=Nu$+~z6kM_pN2U- zhen7TMEoeYpxY_JnVx@b?r|6d5@>h)M>p6D#~yd2IQkUhL+|x)=rbQpK=A~;kbp|# zmq!jO$&P9weQZn=xJzSwf>fvAP5iI0a**PUo_UdU*cX1LJh?1x(B7n~8pi~@(nam} zvapca_Ab*|WI+TRNI*O{)Zbec2G<7cr@rO2vEhl@g=t$I0a`tL8ea36AJb9)=5A0zG^TBDCIM`Rf!-ve{2usqdv}1Ux*sBLTmezODxZ^m0+90UM2@ zZx3=u?AK#L{^K?7(iSQNgv8cYg8A)miMR*DOZ*UUvOoASqvbN36--D#COn zD@*)#^VQ^XcDjjlP91a|-znIy$HyWJP4MMc4RntE_IGdOJr90jGY1S=RF4E|rM_HC z3WKx=zLf&63w^))!%U!lpbYTDRr!V0w#B|$w&-`2)I2GAl|Gx-bkKFRql;aRsQT=) z*KlA;@ps;?`G~EbLA_JhJWD9~Fu;-IEv-V<`>dk-n4Dab{F`gy9bI-T#OPAzSivG1 zP&ec%~LI=9tX*bskjzH$JM02V^rihbaz{E zIJ#nK{7cOs(`gS+DyQ@57i>KhY^=A@Te}Kygj&JVx2kvFLFFX_Fj6^3`ClwgMkFKd z{o^E!aLsxT%Iy1pALn?SjJ;A0TCM%jc`9zanA0q9ih<}UdM+TiKVDo&4;zXUcN0!1^@+qnj)O5r*)KpQ$QD!xJZeq{%X9yDtcIoV;KIvf z=7v#YsTfoNQG|)j|HIaFdut5JQt${>zj3V9Vu~0z2k5`MY?bCpynH4#RQprKmQ3U~FKB*^C5atyn6K3iu;Zd>UcD}L(E*1*~oD72fwWlaRxR>$~)W4tT$fvBPfWs-`gRavPvl{5cxm zaJ{wa2Mh)ldjskxcJ?@Hsl$T1dJgB{5tquVmgO5MYpTf|cC(i*-xS{g3F>CK{X2N! z@4aQ37-uCD3K9Kdy8-%5UyFl3cOomlaL*@679bYJc>6yI3(he0)7?Ix@mb7&KkDHS z%&l(_441Id{}3Y@RZlkx$58BbF2hr|)~|7vXiP`@&$^?m7KmyiS9OT>bWKv~E&a{! zyuS~!`OF&9_9iUS4UfyUQxXrL588Z|8neSo?kHB1%JWM_C8F}%%9|%dEiL$paPpof zc_Y3ipo&bFqC3aAMtvszvtU$3xrOt^*auDDz#dC;iVa;}4QXYL?8>e{A^MK|bmpPJ zF1J(afO5w)XNYfYyX|fvx^Fh=V;x(efmuB>lm(gtqWB66qjNsY8Z32F%A}2z z*`l$G7iT*5jsS<78R(6;O=D;s-ArvhLc_!>cwUjEJrScNW&tSLPdLHhwsGq=~jb!n@Vw^UcOfOm8sArZro&a7z zXNKIulB~@8%R$quUcooeL&GjgR^UGEkL1}zoR;TLWCZ**5Hk@W*GG%$fSuc1#juy&gYa+g#im7kdhrbh^-{$g(!47tZHwYyQI;s20IG z4UUB-h-rF!3M1k)i_|0Qrb`0m__eM+_+s?(-C8h-#KmK0m(PY>_HO%_+CPdm3h%Vn zLhhyvuKi>x$1#^}Bk(YgJ*uap{>f)Rl)W1TX~PV$rF#hfg-w+k^x3!e8wt458^JF{ z6jA?#Gp9ukQ?Z10U73xtylQF`lwX4)SluGSPb#KWp}|p%Mekq7U5ym)WBFeha}1$4 z=fPhIZ6T4O+B7WU_t*OaBXz^94~%pi%XaTFbA7>`wl1UYnaAv|MjQBH`Z9E~m;`GlTZzkzFDAPajkIo{6G_hwAA+atui z>^-E6cFNt71Zx%p>D`j0b zRwU?m>hW7xqxRrtoz>fU+GO)Pp@h#d%G=xAC^(Yx9jt^{tCjwDv&``Hns&Y4&+k7Q zvF7#&PduNjv+8(v4BPAdD6krT@bN;)W?rz(_>~XM1fgA-rLc%=w!Bu<*Zs@r*}uXe z{A4~xPO08{icB~7rrqOpUg$r1*Fi-$dOkl{3#T?gi=C3*JNtX`^t@S=*y{#+Rt9Z3@@)Nyc#-uHn6*x7ivwtIFzg4ow{lU1hd2kafe6?C&+PsqSSbFVZ54-unM_hN4Z~RiH9!)(7BGR29 zBaS`cSMIM_{g^#g=Aa4DA2S}-_7(?joVr;@yx%w}uNZeI<4R;;yFEMH>=FU4r0k}C zbh4qSmC{ByM-D<0d#4}-jVxiN@<7+%*t1C%q8~loqxti#cYwG$`lWhJ229Q{Aqg8) zy?>uxrGsqd4hvEdX^tR;QY2b_RP?_44f{V42zQ8^(KCj@bYc~~HV8Dm$>KZC3J+LM zm3{IA?1gBDv-V}eS&*xclz7?VTxM*juL%V8%ST{*_0({!;P6rjoUKe``u^P6R8lj? z;+g$%=S}p#nbYXP>MNPo?VQKsN*g`3vcwD+<5MQ6Fg@S)x!z%1bIxzZ$#j$~j7@fk zcb;C`U4x*8jtnTW+?nti=zDN{UvgKkaxGqOx=FSVkFTqgrLwBLb*?e^3U z%|5pLkM(zX4K(poVU59eR#nK-8kY~|--8yG0PEJqr;fcx+w9pM_n|+{=>W2titwuF zH+nwemCl_>%0eC{w!-om@hR-ekpbW2<(*#I29SpOqt32oCN;XHGl_21uy;Kw2OjaW z*v}gLDFej%MVkYLG+ca#a-!W=Ud$)!M5l5|R(n&}vSs=UhWnRuvT=sn3)qoXX!Mo{ z!53^`BUvK0z{G@fNKNU;LHP-WG$C_gF!Hol4r&>9bws1h4edReqb!%+NgAY>j&gq@ z*%gH!|0}Y!>HJUjsF-Z`MziNF84v`nNiO6Y>j+XF_%*liU)jzi_L{VWOPipG&*txq=gdh)?-<_y@`9WI2ZbEbVAnU$Ib+TfH_!MOl2$L38 zws{zP{-iJ;;5#(}E~R0oO)vU1MXqDv-Sa&8;RQN{(lT#07K0T5Ubf=$7}ws%haN^i zAwo9;9q^L>ho`R&i|T#e7SRQzR6v$ST9H<|K@dk`mF@;f7o?;FB$klw zC8WETUSL_4<~@FX-|PK*u6fS0XU{p$%-r|fL-F#xk15FqizU+<{xZaeGPwQ#aLjR+ zslhB{0(p9W4jg&HPxtCmys;BqGu7p2pufUczrZ}46#ali0jX1^8{w0!)0Mwh-N-Rc zExA)+crd=P-Z@`4^7ONaGq|HvJG7$G0!!>fWDAgryVF`f;!gTJrl!(+lcm@4u~c!cvzJe!5y*eG7aoV99Ir5MhDAsQM< zd&(c)GtZ*^Hwc!!2T_Jssf^ESyzBFe&TFbPDL~}sK?!3Tly=xTge`0y>UYC0-D9)= z4e%|}H?rN840%N8)^o4+G^wR8on=RQgFw~6#8H`#$(Ip!+;q~x;5)~5H9&djs4jLf z6EHxQJkvBc+6Bm?Y%OL6WvIPVqK)w+nTi;% z{zX*)ob9%L)TEXcw!@V%GMztMWQqVF83%Q==smLHF66(bd)q%y!X%%YgNW+=yV zndxU-8|V670_el`SVUS$6)PMCJ5RVW5!*<-Th+c<+I*u=`WO2iB93m(1Oy%$2p@`J zcE9UzHgATiOTV1C+}Jk={i2J+d0Uc&6K|8Pq6pcCzdly$e)8d~kpzE`=<$ zLuyzsS1O}$T}o&QKJjHpEHcw;2>H-#bGKw*(%RO*)}M6yyUXI8D`@rHPB_Y!S>e8Z&<;09!;14&(Ht)DH7)` zJegk=s9|1w7L(8)I666Dw<~SE(g*O}rEeysg%uOsD95B|@}<@#or+qjSK2ph-eoI5 zTlc$5Q|$Pd@KhY{CjXXE=kdDOLzhXC!Ks0y`@d>dDd+eg30xv0+g4#k1 zsT@SWFYjdPi~px9)~gNQp}MHt{SZ(>iua&0#>X1^Ixxjc>QF!Hd_wglxPS1e`7WS@ zvk|N5RexDxvh%wYkh=!jJrU8p4?@On&jj2Rn7tebW*HjpLULdAX)pQ~F-9uOc~}fg zt4^LaPF^g~BVvBu^l1-mt`*^G4T6>SGv5UFvY(YG@WgVV{{j?wKxmmuD!{!x*FUsM zJmjFl><%3J!~;gjl3^sGsP-GV*>Ju_wVO4>C3Rz#N4GA?m{Xd^+eg=TNPYj~#5pkA z_^fdS!wc$;zR~C%W%j5+nw_2NX*wMIyQzm~1o)9_6|IkC$NywV{h%b{5RFeWzk?~2 z@`HAwK=>Iick9gzIsLgeKIq*_Wgw1k*b?`iFvnen4@rY-y7QdI5@(EMR!YZ#hB^z8 zy}v*j)ts*H@5nd2(^ZkoeS<&!3v15geSN?k6e!;Du{kMf2t}DqOYHfi-;Xo_eV}*% zP+$TBTV_-7p_afli+zg%8g_c(_1BxetErer>U*Rlv`sTk*sSGJ0LX}u zZuDT~G&9s?@{K?Pg6t(+*P z#>(m5Kl79xfOKA>Lu_sbuLLMeVVTG?8VsZ1ArUDB&J zD;(?t|K2Tlxa(6Gzu5UOUtqlL9e+T>Hf-meJ0MmZ70xi!;pWL=UwW!{0Qo$i^!0ck zlKEaLY$KTz@YHg)n>|Q1Lpj9$#rKO2k3J3KQY6G(@Z)|Ch~0B^pxq-|oH^;*q`dv0 z8e=eJLk-N%bjp4rF95W*qT>@YW`3K!IKO(o>tBJNEGDp3oGpLuDg@M0Qu21ke&YbG z( zfrk_Wy4;VVM4Q!7ehUf(DPDdY5yY1#)aVA99|vPnePoLqXNNv1b6QKa9a*rTxBlB& zuD~Q9whnr-WX5LoqgA)}-D2khaY>54GFvSMQgVnRXASx&pzWIF;;`QA=iUdkA4{Q8 z&v(FPT8N#R_b*BR)ibIXv%Lnl+9^&;`S5Zex0(`(;9raAo&p82U29<0;)cvm%lFP} z(4Q$`fA{@|EQ$1uXx+xo3bB0%EGE6_yx#0Z^vT<4vPiQ~-Ufzv-)W^c-x5{#laGM&X|X%~B4#sN*iHba1d z^tB#~*Ab~jC0A0UXo7(gLu64G6F@VppE&V01Vz6&(^Sv1ehTj`C121y; z0V@VsPd-OIQ)bV`&NySB#6q-9{E_H{f4j(u3*8Hw!WcbrOTOE|g-z$${vLqo@?H#M z6KO($Z{?5)g8`g2Xrx)Wg^b{Bw*NhYU)W|lDB6d6WDC$<3FE7`X;OVQ=d_^TlJo-zMAT<)BB=W4TCN^7CX?jMvT-h`sHq-S$|D`(*&M}H5! zM5q60cqsyT3bYz(hX3{B0di!vZl<9!3p21~v+sUh_hAhH(&URZp~CTaB=3KwOwP0z zccScm`FD77qyz+X5(47AenXTjK^nJG*!Q^xf*--xsc@)FR|c=VxOO)=>OP(DDI`pTIxlF~N5_P4Wp?)_lGIOFD_jTSLL%IBXJ zho!OXK%6e0t|07TkJk9M@i*Jnf259H40UMbLJTK_dWvk6piTYD@pNX0p9mC)PatEv zXT9(v}PkD2*K-Y=t zKd%`{U`>dI`_IGDiGBw64V$~cXFuU_`=};>EY^;p{ys)9c@c+oWOPtVGd4)EtXpXX z8f7A)8GU0taP6JEpsjO*VH~_$GUjh|7S#?+-bcENOtPo=(z(k&cy(#`;0|W$bc4CG=mpQKv@RWA~{@5M(}=g>Dmo0*mgiuDEHCN?ao+VLs+e@5xuYmZZuU01s%a;qMm{k?Xj+ zmE^RXIrVz`de?_U9z9Q)bq-ybC$r%*bIM@C?>c{y@dFD@)N;JAl{EaPCo!Zx<`KwX z+m|);*o<=LDzM%AER2g!^9E3<^msF*KDP*TpTmb+cRL-yf13s3%Qhp6vr}vq3}DKCXCZv zuOr*93pEUf>`*zsn)X<}ewqMK&*lA)F*x(Fy%qhAp>FSc9)jyB9|NjCNbbR7d+8qt z#?O^+e2)x+nseCqUUFtc`}t>2BvRR2r&<=V)Lm5WXeNkWg^&47;#h|47jC)3l`&zM zZaSi;A2Y5rB3U8Hl)Ik0AOb}?$+`MwY5<0T62}lcvMh_oXBua1(UqT(cRepMLOol{ zbsD>0Fz165lVEt=DiibQo!*+^D_F6SapW2Hcp||Rfvh2!`Ztbxp*MC7?J-oSx3_LhN#{-koYrUR}n}4fPnN3HS6oh z{g1AFj>Ijb+R_2$vB>X1dSMU|1$De~-9-${+n!2k6}CLI&xgfODQY0!?h-8ip4z&F zPX9zE*}|SVCpI@t{{wp6W+p6yo+qUdS$icP|B?Kc(3G`_yQRpY4Vd9|Nb8|0{r9BL z9%DSBX+1ZIz?h%u5c_?j`YfIFE9Vwt{;9rpBZ3S4(Ev(?rl~o$oF;10RpAf-s0uLV zOAi&}Fz$Zfxz{>GaF4O~1Y)IaaIO5tAFiWxQouwj-yFwCY9?(o9H@ z26$e5O(99g&6&Tb|5OP5e*49Dyu@u+^pPPDES$PS=JknIy<*IdoJrx|)dkhWor+Cq z^S&*dBbbQX!AOujpF}LFJfVpK0TE6Y?t>Ok;J?5VJJ{#D-sS5XZEP{C_{h@HDkhK% zjzX{&n29oN|Ls3B6B)b^17yq*W`V&f)|M`1z7OXQn2f)8E-+PP@9<@i$oVgCpzR#w zR0lqfXsMiM8D1;w8K(O%HVc$pJCaO_CX3jUhb?A5x2b)+_3R#VBke%Foa#qOev=cI zOw0G+#6#o2xNyEWBHm~|U&*t08+J#_Qx7B5yOo~-6{`_n?(ecpf8Dn_9iCXF;aj zwkJFfw^#7n(MpY5%<7S$AW91JXN|>U?2{k(GUzB_wf)Fh$&lwwLTI{Q7KDrVJi5Q# z-1#>n{d!#{zl@A(RbA+nU)60fbAcWKL!rot9S##r)QUT&n9!%Y4;OZvak{{|T%f+E z=4VnOW;3`xeKTom@BUqn1@L}zxUlhu&cHWs$LAg)WZzd4@L4jqmw8&dp8yOeK~t^O zw^Tl*a4ka|C4wx^=$LbwJveT2=@a^K<-w)T9Xh zF!p-f1{3fT?e5Ode|si`s^Qa0jtCsm{T!TNwpM}C%H^1Q%y@K~iYYFd+i0Xh&C zsmS^Sn0L9N^#-k^UUUJd8v6+Nm$zJA4H4m=c@7-D{Fu(jce+Mtt6ZskwwFw2CZG20j*knhjV&?(di=IhJJmT8fAd zsrv)A6Nlv-e#Lf70r;N5n;|jZXDpXg;O*KQ&qXrghtILU_|v}KDg@{5PLZ&_=^i-93{0=a#XlbW(( zT31;&{pJ!^d$k^S`08IvhPO-)Uzu@;NuLBwogGp)^I1#JnXXvTYb2Jw)_I`v)bhmY zAfe+Xu1wy$QPD*x)Kr{rrS0_ZUHs~r_Y))O$AqeT$jDnXXUf zW1^N9TP;xICKn@BcS>2|xosnyU&7P_#6i){6~K`}`x2;a_;=?}xP1JM6gAK(bu`zr9UdP`cab|<2=Zs-BN@bI=RU5> z_*cXpvE3r*N8jz$ehi2_3kQ+q`od`6Re!O26O5yqbI0s<#bgkV16EtLAD`{s^X0IY zo@*|Z@zLZIvF+ie!Ph*wo`b!K)27Uaz#j~V-H!$izj4x0wiF?5iG~6eQPt$?NtrI| zt})`0X@KvkhgB5{Zc(*0audK9YR26H)!Z9ASXRqxu)&V}oY8jParROsnaqfUatR5g zCCNH`OZ;~KO=CMS9q-#Or0!);@0j;s?`Ex?vHQos)>^I6i)SgX6{}Jqhz(@YQ16)g zze^Gnxjkpr*V+)9`s%1Co?x7^GL+Qc`>tthUMbmq;+J|e@tBq&xKBxuEn%5=nKy+) zu>ptGElJtttGEY#nc|i-0>~X`&GH%f`hVPTw(!2F@GatvOn$w`(q2lEuo!ZmN=Zn-qW4UNu`cpI69Yn@+!iR%07|8}=% zL^>k6KyTg7Wse`SdX{N@{miWQY#tzg)C!9KduF0Y+_T7k<&)#H@j~FIz4xq}lQX+K zOp{`!a-!@%4R1suj{PHeXGXF(&THrtX``?i?2{4iL&Oo1MwYPYq1aICAt6TB5fjA$ z<(Q2Rtya`2>c&zQuwLNhqr^YHw94dKCJHImm_>^|dRnQ}LP|wD0Igfx-$^y{?ct7l zv(NrS&Byx9>pqM2Y~%lI0rNO`mq?2)-d@?ZxV(y8Cu0sx)=S?i!1LHOibT(e!t{%* z1zo5sd#kNaH=_sPVu`rEl+dPo6v@n*4PidgEx!q=;&?MA{mfVNV#lz4DreFj7@6ZO zs>TpA#6)*!`~v%2IwNcFMxBsqzf#s|a!SUJWGa6`3KE(BwYXC70==BUW_Uf`o#DK9 zMMG;_jwi1B@tp0FNI{#oCd#aa$(pyI^Cb`#6{@ej)@gDes!#%%(BeBHh@)9}L#M=0uo zr_JjSAGY()r$U9GzX6Zj)n_RYlO#@Rd@aNr{OWmXIUX6X<9`N#e z#QkG%NJH_&Zyy*-w&$cSk7Eg6NLjmeADf>76knFlcROVn2b)?x7+uW%UGvL-j&&QT zbT6ef(?A~Mnd!BZc^#DeXXF4eYVA3N{17HtuUaeo4Ze_h6;Bsz+FjFP%;!wi`!nrS zpE>9$7+mr4Yyx+g=0&y`;9z6Gy48gc(#C1&;Ob~#h}}RN0;wQMJbO| zpdOp)XKjh+<$|W2{kXGKRflDfz3lZii_Lr)?EN!&SZaENciMDV!`13mFro@dWDSb0QM)K#b z5##>J#Ke3vpNXH^1c;3IB=hJPqQM5%x>?eeXvjoxc}&2GgH4rcguKlHRqrvId=A>G z%iAHGZIN>j58^!gX~-hRv8G}kTJdy@ zI)IfBKa|(ts3LjE|={vO$Q&Bw> z3CW-{9JLIn_sZY+3aWXCHI%)D2+gcDAfr#1*sjLJ06JqB?7~~1dk`b}`3X<>93tP4 zMC1CafjY4htkMWQA0{i{#O9<^s_C{Y>Cl9D&XVT=oGYXa3y6=~eHwpQ^oO-_n$?vi z-F^!;iVK~lLL4eh(DSUG3~umxMq|ZU)|7{lin>(Fx*^LBe7_Ap#a1n_xn)(EeSU-X zjPYSN$NN}ABNXO{qx;!I3vg`UOBpDcDfbaK=pgl^IrzluA} zPu-G^_HjO$B~K`j34Rt(fl`HY;uCJqkbOF0xv`65j z*P#pzF%HT)b0t;ol+x0%q^a@kBCCZ$K)x1L>)|eyqRbzwpo1JBe9~DHjhEFh3H6R_wy2pDJC!WxrPLdq zOwrN*L0H=(p$~R>hn0o7G;3}xM>S-Wyi-8Ph-hgnWbFK56q*cL?(ChuiHa+~+IwGv zXER7_L$xcUYk!V7b=adbW)f(-i)Z@2!_?3cAHOY z!t4@{LA|Z@w%51ehHx@{(0V4-dXK0#a7F+|3)bb_`@W{S=E3UU>yzJf;~(hj;^dke21CaFHpS@7bmuXoy{ytO~&ylL!ex-yCE}PWJKa^ zf@M*M{ZeHZRN9YVcSl0k@Zm(JXX@&>d3f#v%M36h2E}cP0xG-8@(Pou5`=<{yFOD5 z+31X zu;>FC{uzfnaUgbLT;H$dZ9?!clJCSmb(zyo9hbJQSn(ymge;ouLodbiTbZe>1u+Ji!dL^(%IO%UkmX4i-0WSrTf&rXo)uq1sv&zKF>}4pzD6R z#BHo}k38-g57pZ_QCM@7G^x67lD3z^%KXd2gMx(lSD5>BfD$VcdzDwOHY$?Qzx)xt z@k!&`y*F$ZJewX!H)%dT#~LlWGSYVRS#HYt05eKzNVolp+>})O&*U9`T^zwTcOcyV#V#9*FR7%I7X#exw=39EuqoL8d7h0muX900tW}Y}d z-E+?#cM35nZjWWXO=n`F^l|$_hO~wI@{4a>Anb1VKQ>1sbM?DKO0*m|`V7xJiOBs>vqX5c+yHQ3Mzgd`HwS zmOIA$d|9CUnHX^j%Qv8AG|zwfF3AUdKS@uA|ENGH$XAC`QarMXeeQ?Jc8e4s(4~)s z2-F!d6N_ut`m3@SlvTtmtA=bftzYo01nTo=R(It$%6$R8VKO7q z(tY6M6}Cw9C}f>YB!+#6sd?xpP$69aaZ6`(2mXkO^`TN$Qo=6#vd*TAOqVE^}eenP)pI=4V}2|9kKo5gNg=VYhD)Y^TLAIGG;52k@vVtKFZx?Ux^mbAdn!AAXY=;fBe`iKTQAze)J{m%si3-ZX>8PGoq{6R#8R zh|L#)EV2+#h0v~#8cj*ebLc>DZL(t}rX%$GCu#*JIoptXu@uF1}#~A zsw&_F_7hR6Cvo_`T9IFd%(4cU`klGlAvXe@_Df6z2AYbk* zol||f7<9A#@p`@o2lN2_n*mrBD`^v>VF6=G(Aq{@KgkrFd6_Rt7%|DDCGV~zse9$^ArDj+Staz5cdTW*95 zINc4}d?F^Dq(FWzFS31#z_v-TpJBB+#_`>Fb^Ov<^ zdq(@~DH~TNO7b963*=VHp8_6r1~rh=(>ka17wE4v=9BDM!YcMA%o4(Dr)K@i%}E=U z9EyR_;{#g-A_1+LB@FSUZ$*edzFIdV?=Gl0o9L>>{+89z)0f7=mXW$-(-Z6_U^bXP z0ov@xcWmp-c6$?keAD4>H*9%Q^OHlHd5$*YVD7;ze87zD*e)mee3xK`67w%EXPQ+y zY2&r@BtUsbka!0N+$S2U!bATg#%>1 zsY86cK5}s3vakm^Y9Evm2zjCn&+&b*ZmSb2^Ll<;kV_C0?B{j}?w()ZmY&XAD zkNcbzede$P33u-EhX#os7dX0t2oGZUPc7+@z?Xl{N_tB6kJvV2L^Di_>)FMXOv~n2 z#tWe6PX&O$ps-Q=ZMy{NhwYZLPBtxhpS9b~MQ9`UCi+GBV_jOubf*Nrp-cpN&GdV zvW8c6wOQP=$~g#hczR#7c@f26JrD;!ZrLeI5Ic-}iF-0(Xuq0VlQhBM!jRKO#RvXl(r$+Vcex!goET}ZtRp#N= zewl<ZRI5xu9Vc^nP0;!oEQ6A zYR>w0jLth`>1EplVQ3Xs!kv(7Czpkp4NPAs-}7eKHw|o1;$csi@175t3~WKW;?z z$sKr@omLqFF>WfjDaRJpJQ?^vW*43)wChjN>EpTcf1&ZaX0qJYCimq6J#mzo7)@D< z0To$4Y#9fiyE>^M9WW0K7*{rNnG1WsE(jJ!YfE3AxZ-BJG0;FwSnOZ4GJ4*?zWO4! zLHY52aWUj4os7J2;U+VxOoBY8Sr8D{N=95Acq!Lk>{*^6+CGp$kP_)9pM(h$(rB7` zqO-vJJWst^Am#^x3*w_Xx?Ld^(F=Wo7+6UD--g-$Z86owf!^C9?kE~asR#*X_x(zX ztXdfNC3ykIQv8H4T_5Sb)MierZ!EBVd*_qo1&nKHwstB`muGV<(F92`Ua(Q4&>ryh zXS-3i(pBT%8mJV%K-Sa~a8EjyKEI#r^upfNVUhGUDzglW0rVE%wgz%)CHS{B%qW$N z&mk@sh72^%3$x*7kRmcE@GfVCsesSBL|Xk`nKz#_zF+7qfVK>z1NgKYXiDzJUB!w% zw%VM#L?qGy5n;mwz*9jgsuU~n7TXbebWboUT*k?idRd6j=Gk9m=v`$5@bu4TMI6r^ zx~Q?dXXyE9@SY$TGy88rB<1~P*Rs#UnSB|~guSO@O=|n<5iTFFi4Bo+F;H~S?wFHgEV+D-=h+CHZ+%XI>ed?}Yw2@x+G9Vm4+Sne07l)) zk-{h$zRR(l!Kb6$2d_!WXOcu|2?GfhNi9PU0ZX{TeRoB{n$APR@Lp4wJfW4a`1zcfP9pQ-*_U$2Sj=i^8o5eB~0dz(wV$5Dnj#<2{{ka(m;V zbllv)|DEvVj60!tts)a~1{%g`T_HO~_xfA-ZQ6x{{ow4t`OkQPS4k;~PEz&D zM`C3QE56Zd5hZTG%1D8^;ZI1L?C1gtqnQx`>id*=62;ukQ{63eUAnwUqpP*>d$8{Z zg!a1c#9epnMExIa85#yhd1$%eNQs!Yf>1yNMNpfJKn=yKX^a3) zsnHuR5!!|qBq6_GaQM0-#fovYEM*4mTjWPiIluKq^O1y}Yl`zRwU@N~x>8*haB=`P za`^onnQkbPkrr*9rYCPSYcG73?0+j-({UV#DPdo=>KJ?Sas<4ksrm;-(Khbns}alb zuqX#ukc^_qgY*2~mdhpwjbjY!g}49ha~Lc&W)u39NL};6lm0p!-6O(j%M7PPU{udK zW50S{feBXv&yoZ=_1i|xPh=NHx*A1D2_w>f(I8N}CjwFIu^@TG20Tt)z79I6FE1?1 z7=SJBwQuJ)^Zk0@#j$+KwxvRG6P`s){_)zth?lm#y!}Y5grJyk$#?%2Bb2l8vM(kzn(TTZFrX*-^-{YXTQ^y)@_FUZN z9xD33FnXFyc(2_&ryW*8H~7sGmDXPGIZ#dr0SQ9$NCt_qomGc=D$ zRVZV%EsMD-0qCX~Ye_2qKuX|>l$N1{8Fp?5Tq7@RrrRc{JLm4CuFi>N{Aa_j3=VxK zE9~FX!PRz`M*Ui41=D%2j{kZWxv$IXQ40GkGO#qQRymNGpz=a8_R{y%ZQWZGF|Il< z`CNfZsK=G#eyM#Hmdr}i`!c?|GIov3YN8kRXi-VHa#@~>izJ!^JE6%aE-sgWFf1pU`cF2 z3w=kp%Ru_1NeE&VedVm9|LG6fjB2k6Wq630dz&p4vXk&P%qca-&0{a*8@OkyUH!{~ zamu|9yGn~yAC}YzeU1RCK>0tbA0JJbE`X99ea-nQ8HwEdqiKRxx)#%)gw~-9v7vKZ z6Z{>t_c#^ZzZLBFty}P$ptb>avRNcv>%Gm6hm=v$u2Fy_*Q2NA9}RXrGEjDN7t8D* zSAjTFCR-c!DCq~se^<2=?#DJ%!G7Wi6yJ{GRt*;vzPo-oN2 zFh&pp?8f{7D9?RJiS+x>JM(kz%OE%2&@HJ!}^A${ivn({Ihs5RBMX^NVE@a87$rA5S^{u5fXjA=7uW zx+04*DE+n3xFN*ZVkt&3L~p!9dE5vjF5AVctUAMA=~Tj&LL^sroloE&y@c}ppTe~RkiTc^ZAt=h9k4;;jaYooo_ z(^A2RjuZ!- zu&oJV&!y*x@ZG#lPj$yg<91*qkKweWPxb};;I3CQF|PA5qV~Obq;!0noF{~26r#V3 zgtOU>r5^|Ql>r5w$*XtZdk?E@4ctd=mLyRD;O=SqDrx@7@~c8&(omX>NI%(>!bVMV ziYBiSmQOG8&Ta;2RIitm=_}_&m?-eiMVO&59EG^Js^VL;d74wZH~bSa@F^KP;qSN&LSBlidfQcm)QaDrQ|aO-?`jLBTv@r{%J7f zuPSxz_=q}cdgu?d>H6~`=EDMpNRiU@t}{=<0J9~%8G)cgY_$jz191zgw-MzOSr%nG z%(b1POd(FtUMq^Y3Iigp7E*v%#4l5q_|@iH&iixQ1zKqKu!Sv0m;KP7AN0M_L{-FE zh-J;W?8+&%a}wC(eDb zS7n+wXdJNY;W_Ac-L+IAxdZ)h+lpx4*mFk66qIL<`B^CezTUOQWcd*f9DqhNe|k@8 zdTrDuXBQ57#KaAaDXu4Fum30(mA`XgR0i+$PipS&|AgI`F< zjnmQ{azDP(W155PKRSSPi$*j8z2J^QzR!7yU&uX?y*Hm98|Ol@nUHI?*!tKy)6KH3 z>RS{;zZJbQxbsYH;MEiiwkhuPmbFOBx&^hrYppHa@)IT>#U!fAN&8IkbIj zr0KlacBu_woh9zfrjDjqogdiP6xY+@YD|m+?*ToIh zmpLErBsptOpWnMAeA&SaQN@GYN+U*#ikATDgg?+5@uMdNNmX-;+rqWch((j*-3fLoVPyc~ zea9VUw&zwh6=)4jQE!`f0^;PRH~T`5T#al;)>%>aFJB)YzrQajlPM?-oTL~ao=1tr z-v={az0dP)2gj-Kds&d0Z?p*mz~a1<>CUjC_1dw$9fm${c)*XLe_Pj&uQBs4ux#Ia zmm@^y%D{7Dc$_r*$#66INPT5B4Nfd0Q@at1)lKJDqpYNq`>bPa3XmO}arj=!Ss0N| z$jRnr*{zAm0x*ebs7`@c#Lvc4HV7_n#c*B9@7=!_F3|}BAz~p|rdKdkd{jm?7nZ9j zeL8Cj@K4q!CTsa(msI--q?rT>#k=Regb|!=h3^|Son$ydAmMoNOD`tlirr_n{IUjW z`^>T0Xpd9L^4jL+udOlOV^_DP^|S+ozkGlM2kqCBx6kj5{qy1nhPd0_4Sp@FD&?Xf zh*qKp2383LBW8;h&(E_Y%UwUJw8U&I$6CDb67Lz-bL=(C@M1PbjoW2PJl7pc(h){9 zYZiU6+gIScDdshh+89@CLY8n76P5{$dyYc01I?Yo#;N^-NSJ|_$U#55zdf(ZfWB14mh#l z+Bt zfZPiS6l`c&IF%%h3GTVI;eTXw*GV-3t*5oj>^OTipDwRZ!WAAmGHcq>xtb;gQl!;; zxotAEuivtk&e*xqAg)jiJ;>j53oo;hF<_catqM!6Y!?}FL~L_T^z!yOb&WwBbgg^A z@B>ilR9bdnn)-7_v2eJt2L&a5X-$5KCyD8A?@s)8+>vF(=SA(iolpN~o)q(?`W}A! z4D3FzwEMlbYc2Myu2lR`Udg4pBzmQdQ z6|G;{C1*#Uwl>@HuwTbAInIauTh-KqViH=x#pSO$OwKcPHw+$mLT%fR8E8);qwgFk z7YiqXuewr2$~`IOossc#y5!2OmEfPF9S1DoLCPbeI#i;44}NxJaiRPnWJ*FaD2tO*GcObT5tYX}s6bBW0C8|r`^)bhvY0mpz<;y+{GNcRMc?mx3YO3PX(px zk><>Y57%%xW;dDS=V`T%$2vWxeGs@fW#jXCr3vdya)PQi#;OMi#9vsol%NZRB9F^k zVapEA!=*8A_|43ysc3c^<;rYiDCFw)vOTItZRl-)w|UHvak`CD%v(pHIlk62=ae!k zJG9^z34pjeR|BSVJ<-102S}^BMSRh|xvh|zm`0@T#pXY_E1(%I+L@}OO=d@Y7c4vT zYAEYoEvh-@Q=}nUDdJqQhP}P2ttv`0K1e5afX=anb%U}5YmX){CAxHK_LHW-zn$6V zVH)>%nbte!7PmwVnWCccZimPaCErRu&a#xH_#psl*-N~BKet=@?cved)C{=XBTp6G zZ9otr()KVWjWO~I9!nVMdKK!@Y2d7oU=>HD*u1Bd4loMP-<&6$BOeFhH3i!)#I)9K zbbzxjG#xMa`A@5I0txr&i49kHlrNbLB3Tm;3A+5GH-9sJ?6flrr@W32R=gigVwX4# zE{VvH?6RlF0;cmZUC@Kp2yI!C2=CZcw{Q4=UgTcrp|5NaLr1(NQd37AIpGQ>vVDei zMRE@^Sy#2S3lk!eZr)yf#X*nfZO++QOWI zg%v!PEl2)LXiD*ySmPxS|5KuP8~5WyJR!s8e`Gn2pbC+0%BH5t4G_MQhciC|fK(5` z`qh}xzZ8D=W5X>Q_Ex_?Vj{nv4W3*iS^?UQrUV!3>X3u4ttd*U_!^f|8deqxiYS_| zd54lf!44Z#wPvugAtMSHyFwlrasXD_^EaIq3Ga%OJ`uY#jz7v`bO+Plr5LRhQc1%H zH|Ava-?F^*mM1T286B^aCDLa}sI0FMIcL=dOk#f!F_N+N&8jPdc2z${HeSBjJg`Ob zd-|QL!k?)7PW}w+Wcs%UsTUxg0T?j0vXw|tUPWtRX2H7Yv2yB%mk}vH7EAz?lofqu zx3-tkwL6FK{i?Gr-jXT@t-zck2sjk?M-#$Fwld)7 zQkR3DMG;^8&%%H^;o8^M`HNcqsP);2qq@uly}zG!bx>T&NeIFdKqGt&pXVb5c9@8v?h zbLWF*f)1F7eiI1mC8{z7X5JL`V`qrO)!U^QowhBpz*zAV7rmWAnl%-j28zE0sWk9GL6H?60zk)LWt|finCufzWD53(-5epPbR0AdTA5sHQ&OqY zcPIzQJdbz)F+%w3wud^LnwY&F4#)X?)^3X?*jYLefnwuY+g<$pKZP@EbS1g}kEXAV zi|YCQR#8BuLl)`oQo1`t>5!1_4ry3o=?;~U4kbmpOFE>ayO&;aiDlur`}zK!zvngg z&YU^%J~JoY0~sKR`KQX`zQ;VR9R`yOB<(X@r}QN|%0#b%9*f(p=P#Vw1-Qb=u)JX3 z{A&{Q65hR2d%?nrV_nc%cNjUh#8y|oa(-q>RkU=t*(J%ZWs(14SL+0P;(l*K9!>PN zVlLNzULo&$KrQj+fF$phdH83SGe7Ymo`>M@9~<082gL%wO}SQ>p)dq3e`H196F)gh zBC_(EuUYG1LGAZ|a*v=~V;F(-Efv_$X1%yf?hNFN*cCw7yyd5+Ns7QuhR@``6!X+H zmm*y-Z#^_$IxOJ$WPwl1p{^DEWz`z{I#Nh=0y{_DH^YIH>K#o+~7+*@vU;^^J6k>SGISKOONpFDza);x0Dk2Mo-8)^ulTedRxhA|pz$TF@O zMl|4-0u%Z9^lm)xA6^`?_4os zA!LU;@(Mj!ngme;J`hcCbP`0b}3V z`rwyE=%>|pWm;*GRpz^mCq2qwC>Tm4V`t+cTphbSK>jlNXH(i8@zyX!->|q{s|zLz z`XA=Kjwj1>lN;6XZ(_f(#7m~NsgrHi#eZJM(+80s(>1QSlzdj_m&Fw;B61j8o&;)E z8Nt=h!(?m%$_hu>3&o*J6q&@`ao@u{W>6u>b-*8IvLS|Ey8+Ks{Cd!%3Ue%gLW9!x z1~*p_lG`0T4J-?iEtJ&tYy;KU&0qzo4bXyj|v8RV4H zuC7-c0}o*6X2R%O6z?mF0Gpi*Mo3U=Nfo*hp^J}-4+9PBfLT*v>yt7PJQ?G%4|vb# z4WV~J{S8rvhm(Y4OV-B0_*`NaK-Be~^Ou_Mw>_PWH9+OMq$M!GBF>RsFq4G05t)`C z?8)Uk3#1O+x1$*8K$pwQQ*7`7#Z&qA3mnc^{ZLVXmt@x2qJ(h+Q;f;KT_`}6V$R!> zB8}Xy2g&K>&uZNC1`uR%9WhfZLb0>LyQmRK^ilM0p?|oGx%A(y1iX2sVbfi)*#^Cw z6q&Q;AXYG2X(CJ=r_ zs^4*e1J|oOl8X#KmEXqOdCwDWaQ7T!u;@=P^iqA7{Xr2Ytu27Q7Nl9f;8V$~e{oIj!!(cM^w~eNJNf=Bzy* zs76K(`tr8Q-DVlU=@7aVe{>UiykqJkx{GH;BP$Ct1zAuB(-FO44AkhdKYFhu6YWf} zJMllz+rGVTvq4 zo}#(BM#)`4fQY4x=@D|Vr^7(%6XX=oL{kz#cEa#sA>#4XyH$5E9PY0rXaBF<(HUSd zpc8D>41VZ=w5DQ784RN5TmzLo5DVm9@mt}%Oh8s>%p!9ceZ3y6H7dfzX%kV?gNh@fsQHKcgxW& zg`+hw`H@)yC<4zw+x-&YyUj5HEb))Tfo=Y5cv7RSHVa~ZKy|RKnbQObKdk00 zxt1A;IRY2wgSkM`fHTVryX(p!W=%*$#ZESfTPSr2&06*{j?f#}wzb_N0 zVo~WarR+S_vwK*;RG08&txIvm+JQq;kevu>I01-6!W^Jh2+@-L0#-~8kfNr=tb0GqWQ6C6dfRLDHFl$k}ERI;k(2*d4Q za3szoYSz)8B7xbii5RooRLvjg5Uf|0-9N_!EId$t!{y7=6+;Zm!A+(8Y&Xr0tbng} zf|m1P15Oe~Ue6Ic&YW#c@yr_xW>Ah@QD_ji46i4SC1b>COQ3xn;HK~W_2>*e0P4sW zKMtDt>_EvyWc)4;kQRgQn@1Gn`-rVlR}LfB?axmZXJ!ie+4WR_n^t*4A4jYQoE@+qhBfw^)0fHM-D0P&-gtwB@QdsiysMA*PDo!2fSHU1u!#PS z=U|grbTqP(OyW(J4_3s}jELXOU&2hDH+Z?2Mz$B4s4-oV+AZqifu?M2&-9KxuDyQu zEQ$y+_UkL$iQ~CJ z%;D71Ib8j_B-&;RKMm-xoRB%{M^^t}OBO#UFY!xay*s;xQkW z`lN3022c@+_Rq+g)fju30fRsTImEe#M9Ap+f#0v2W%|FAJ1dTAq;5b4-2}MNxDu4M zkPW8&2(&a3Jy|cR_}*phHB&DDr0xtgPBHE@u%cC9no&tHzbNYX6p6JXEc?#g4d)Q) zQWvGTuJJt$-WA*jYR0j%gtwtXq$YJI@Wa!A_r4VxD3pnnpFgh?n{8U$N+=Dh2<$}Vk{wR^MR36 zIwknLx`62w{lGKuY_d8bi;Z`9Mi7+F2;Pu?44?U+L(Kj0g7~% z3y5c^*EDXoQ8wS#{{d8xNRoDe?te{5N4o6A1*;m{_E8bZhKWaZF1J@oZh~}1t5JJ- zP2zZ#G$kH#;%hc0lb72xOJjlQJ|^|zc1x~b`#U-0)q4I1aUQ$mn@cJ@_k%o}*zVQC z!L}EtxE210M!OV+^zZ)mDKF7?`ytmycsb<0Owwqd&uM1klZVSEP&Ro|?z_KPu0a?P zq`SVDKXR%E60Bj94Ls4K5PG`}Fjc;}6v%^1=N8(qU%FMNUcglqvoow43|8k{*dl~b z2$YnS6pv3qdUm&Ja0D-=VK>9#te#oEUEmF^fEg_&M))=foq-9r;SWVM>lfNYP1?;tT!>~Y{xX=0=38!PBe zPj`DkBW8kCPifg-6u%P$Jck31)u z?yTsWFpuD2s=&LRB}`A8`R;n;r$nBsY@~22c70X^;=uXA5F`h5wD(o_XR|96;NgBd zJ=so}L^fG7Y>ayO`?WCI-Nrrsm=hlSD>+-s7`rFICy>p~cBc~M-7okEMg)sLsamH} z8z2g?E-xSubH5CTPc=znd z+{gaJ8Rlst%G1HOT8j1KQz3H)-dSa*OGh|p&X5z3DFqSzFwUnfQOeby5OT9=3I1>i zU4Nd3O#srgnf*SHk>MdIu9U+iAf~9nXQM%60hhg3+Q7|RF894C{@{Sr zFZEtA0AlT%VzW5|lp#}Gd!LS%aW;T@vYBPSo3P7XT#SmTQUxeiL6ujNO@e-@@&fTV zLL88+(#6@F3|+JdaJv6D6a)G;U2r^?M@Jg}^LT1oj8C?u{pI(ndwaNbyM=k{j8tlS zQIz`kC9jVPPoC9hE>HFqbT39y4D_BN09U$TR(W;uPDe`)_Yi~Vkv*XZj5?b3T;BC} zDiVl=nOKxF56~LatFHNWY4DY?FeShL$;1Xy-n7SJL80BQT;cTV%IgD}18CI?Ds1!G zSRKAg<;i#qk=4Jn^b zqGSGv0jG;G!{aui#I4k4@@&xI0xsAV&hfck9~Ar&C#B&f^Dk5E6Mh$GCn^L)Yvc*F z)XuJ7`4`6Y-QMX4Mg0IBv%y`GZ*|8nun-29lcfgz2P)(@`BmZ_+ItyS!5It$63y`h z+2TkXBy&a$DZ=2!+vN)|`BsPC0ll+W+v71eL%Rn!e1|rqAJ6!Ls{?tS8hEeGy(PwV ztrJKUh&){t{IeDKck`m&(KU`<_OyP4v%iQC< zH2EN6J+@ljZiPhN%Tdkq9h*Z3?g8@wKS~&=L{Z}>ZBfL?N14$^2P_)?s9PK-th+f|&9Q~cu8|*_6n(e}G@jWokXCPN9!7d+##}y@+UN5M>Xxl5 zx*U)a(0@H(%$;cT?JivIy}kCtCKj%-_g>o3FeRN&EN0Gne}B`vw4A;MY47YcKk4H0 zbZiXU>5cMv(8KjQPtRzjA5H*?ZF6Tssdq1%lfneL?-@hUdu-d9_+8*;dBl$*_uj$n z7lFhO{wk|LNrBiwkd3`K&plkfA3U~tuoeKc6}AQv!EOwC*^xpmPMrxvO&+b>yEi%= z$Xf(%`{-GZWWI)=j;u~gZt2tYD7$NRnr~W6v-CTLCodbEwW-KH1F6TfgPP`}F?jNH z3VOpkX3usMU%NZSt{Q`mgj#UWE>}z4*mG`J>LB)u zIGeFb7E&a595>m39o^}tDQ-~{Ptqp{-{c}g(>`aHE}9Y|l6sOjM*RK0xDVYNKVH&g zs}iXOZe&AOs6jg)pIg8`dCz?SKX(T~7&mr8v8Z-+f|7bA0#*{p z7m5Klz@Yc@VMI4`DNhJL+r{IPtdEKoob}l6(jN@_U(!(_PGLKS#Ko{^%ty2zLLKjL z;*AX6Ak^JU2@Cv>6@=j3rbJt5MYGiT|58_R;dAvXPkWN3&p|L`uDJv|P_BdHOCJp@ zq1?(je|`89DGtB=_6(2Kc5N|ux0%at#`ol%Yfw&{a!7aG#Zr{u6hpFc|H}d~Sbt?8 zvOnSBep5luFMe1y)ciU5oQ*L=-Vb6>DYz_<529Q18u>PBD1FVsQcU>eNnc<#1 zcoDdT(Vi+f8l=Fx-DSn-)sndd&EnTHU7~zJPj-YmQ}yb{?kRJg18>tz;C}t6>B%M8 zsCHPX)cSRSXGs81o16CMUGA6|%ove0c6HautmoSkq;4{HLK=;C>a>bs8z{_U^xshB z%;-5D_<)Ky<;Z1uO*6sdm<>zi*$Wg~ZJ&!taGT8lIe3n_oHyOvcC39J@7gL_+5(Rh z#8=NdNMnPp(Bwbn_t(TT zT8scGh%jKxJto-9;oB8Nc28*dlg4)TQX7@I+Xoa|P2Xha97s~w3^cud_JtE0%{!n2 zf;UxcextkTF0oKW)$zUNWe0^}%Z4yX?HPY8aq#}kMRyUuIU3xq171LdFy*23^&2OD zM!`ODZkJ56Y)v9%NI7lVdSyJFqClHr(l2bcKLtvk7szQPxSH$iFq05+g@9yiSW!q zRs3fFR)YFD@gzPW$uD?M@J--(@fkC}=dp&r(Cq0S!E=`fd+4L81c-4)0)b z&Do)GyQGRjUx+OV*#x+lw_e?ibZ3ERQg13G2{M9suB$2-jsG-QfpEGJNB?~>*lp;e zdr2CiAI$r^I^zmLBjdR`1YO?+{)SaDujnQVNAtJX@O$MB<5$G!S>wKI%6|(~w&x~f zqRnrms)CR{Qkr}J`B#B_L%c4zoHgaB89j{;d38KDC^OF_w>C!4aMUks$@<*5JGp9q{6X_8m9mLUzgyy+dP+Nv*Wv>jD6&<$ul(h|_GDM*=bTCL|vFth6?~ zBMti=YMv+w10y6HMw2OQ+mxw`Fy2y^)6Lo)_muMWWDPeSDu^LHArmJyiW20W;fci7 zSl%AJa|-epf1`l6OyAq12SK-Qu8LHoeKu$!AH6%&36!iT9LGyHzW@PyKUcwKPgy>g zTy09)ph;bQ`=HVh1b5md9G(SF0So#$e}18mMb~$_E)n>7J|Vf~ud$Ty+MuQXQU6}U z!?~cYe`=x~TD6|b(-AP{s!EGasCYFuf=~c>`9*D2LFH^9>5G$+|I_&Cfj)@IW{eX> zrL)KF(JQ(b74njJv*7S29yCBMSkDWb=5J*N{VxH&K|)74)*V4ZLgN!|-6Ci|zsU4h zOQ6g5YW`(Q4K{9UrMg5h!Z;KEi|EH2TeNQ(3XYcuq7@6`+{{{6&V6^*vCu7+{^?_s z*4jbajy>=&aiv{==+)^_(WRS;cd0E;8~j7+XmvRMK+dnD=xIHG5+Vtn0F@At(^j1c z)*+qm;zYP{H<@r~`o+%}8ay(Ao~4PSJ~Ss`_deb1q^5;5&e{3lj1&W^dOe9oDY1eD0|0UH)QXfWI%V@vaAM zNp<8u_K;8|b%AC+L$2EgQjB<|IF(RAI>Q5$q87e|f-_-Fy^l!Bcp-oO{wP9q#$*ZhA9Y&H7BYx$4sh@iNa=eBa! zUm4NKn7&FnQEEOUcG1&adpUe|Eq`{OgrySOCOire15%<00urw#|3UgZ@vi^ zCD(VAU3G#kdO2{n!wYg?H%&O;C|B-@J~e}65xh+`3-i&Xcb^YVR!dQ1@!#aG>S!)Q z!0JQ>@~h$=avj!{sIV;5#0L>aymEp3uTP40+5apuFQr`b_LG#X$*9XeMFEhj(Akc%^@=$kOoFK98j|82tG}}+5@x! zkUvk-fX5s3gMNJ*kd<40n9SKY70N1{yYvfRcf{-67(KTrpQIXsIoEiM^7v5y6~1eD zZB2P>s8H@USl$0IbOGz8lwKos?9&sS1mIfsPo%;MG}YK4P)Td_{e|%*&rQHJQ%w4L z1xHT-33PSEhw3Pz;3Yci!dFGV*6S+!A>3IEtL|)az4x{j5$oqbCrT0+h`dd=LMndH z_(?3>MM1{kRX&iGW4{ zvHqkhp$=lJq!_p{L;9b`xE6Uond*YB=x*G%&&7p8>0s`^AP;@>o5c2XVlDnN(d&xq z-2w1Y9t8SlKP$JC6eO?cjh5TbrgHIxnxc;Xbxz{sNj&S z{WO;?a-bIEyLtHI+@HObn_;eiSi^@W0<}XkpK_`adpEms;uzuFu3#(RftD(8ps@Yvz*|skBs*=Rd(rAo(??H1 z6;}$Cn8=orpTM>3=-0FEqD5hD8G39+#Ttd*8bgN~_&SBwPAxz8XHFN~!H`4nT|Lj6 z>O<^NLenXJcfrM^h_@NN#jD?1k3ZcmCAb|%^cLfJ$mNG{Z;tXj=58Jx6chJAM_Y+H zUBMLw@HF$DRkANf#4Y`)cSWK)ua{C~8CAUaRRJZ!70d=Uo@k9HqEZZXF|KlU+=uKw zhxj**S9X3;mV9f?2f_e7GDNSRwLN=P-Ivp@_W#GsD0LtriXbU6ZgauKp8EUnI zZznKb?6qJJz?zKy_5(H;z(i2vc=B{cTvI#j3jDMdx^yRR|3;oarGd3TqBYRl4PyL* zsP`xOCKEk`ma#GKbJY>K9mY+M_ff<_gve~yJy1IP_jL$M9kbNmO@!9CVi7OkJ+1Eh zkBxbptj2eym1<2En4CCow?dE2eyXADKJZTx$m1M+@(0$DcAoc~g%x|t7WDRi120f$ z6F`)VL*WtxVsZhlu-fKT_bEoZcbET%t7Ah*MX=bZJ&eQ7v6i&V?)+xnOl>p4QS;6T z3u2maxh2zb@5J+t1zy~w-~)lT{~1CA7k`eT10-Yh=kJ>~H z$RwO3Sar*buFpwcCYXahg)XM49x#IN?n?k*xl5Al*+mqLj+YDZ)MRVI<%GkURVyq`W~Qc!&}^|Rc!RMfdbwa8!KUUPu(iWAH6a#*VAWV zYxumFfC5<=k+$|7Hss!a(d~?q#{x!)jZ=oQe)9kpX=i=Z3rUX}jGbBg&%fnDPpcLAn59cHXl}C!Q%+?P<{61)i zpjMKxhIf3-USy5S;wbV7#nNtxbv{ZWxh0%u_u?dfE9u%xb^2D^3)M7GUz%1i_7|TL z>~kScZ_dJHf_UBIzyIT%Wnniq^ZlXR%PNKOwv22oMb`0=w>@Lmttb}>w&MIK0+ua z!9FFW{exv#i8gEDSWh`^Gwr%z?QaA?|DLt)F1x~WOqQ@<9>KdgP-BLs0Wv@5v^ z)|D@;;Q`v>*+}{+&NHVRyMUYe=A)6w>mH#0Lo5(Qi;Q}?SqJ?RFM1i(btRPPmM$vU z_ZT#^*&*~==6J&Nx>4r_WtKF)ZqfK23-4kG8~(yOT;jj=O+o0)n}4BGb>w-SycaoE zMfG|%-}Fb_^5(NQwZ5Z{54Ykicg72%b-j{kI)simb3#tL_}m(eW5njMyv^O-+oWHp zj+>!(V7z_2$zc|AN;GMqu4|WhI9T)mDDfn6HswU2PH8_F4Y4fQ{9xBY8J13ksgen* z6s3KUs2KFoH#wauo!0v9ocLcNbD_ti~tVr{r6&$%Z zWo)xQy%5^~FA2sxrjQ(LC;$+LPC@naqYRSW*BYEmeZ%OVB$i++9s93E1k$O9;)z0R zM*o%dt$Vx&T-U>96c5HRh9pN~=esBrMDV72bP8_nqT~z!)(OTAISd;X8d;59%#F(O zH8r=5Ub7;C?v)KlK_vV^uw7eO&UY8h=__+nyL6r2ap;0gA>n2l%4E&ruZv<&w-m%? z9Z+MC53Vrem8XZd#m_bfBR#JwGWL5Oqa6lQ%!(a(v-w~fFE>RF^uZ~`B z!fUaLag;Z4fl0VMZ_n*V?Ti5IBoq2-iFbjTxV=l6aHw8r#JNyQMyVi5&`@L8_$(}^ z3Cwfa>j}>-1cf9I#XUAg090g$GNA-SS>wMoLJhJwqIm2o{3x*VN47J)+7AI8g=qPE zSqD@P&n-_>!mCffF%ubntKNrMk8xH_^$XRWww^|eM^K!ZI})b(!cqi6e3Mp(s<88m z>bP_5rxY&{w;h8!A%)B!jXo8QJJIz2S>Mh9AjD}QMW3g8ksG0)#oYf z`zrVKXY6l2S^duarzUIu)aGL`7Q0BAW5L-^^r!} zLX)^);%1Ncjcx^n2gIGC=y?)}(ob6N=_fs#^-fg%nI-U#sC)2zh2>5&dUfrxGkFFj zg-wIg5K1GJ3;(a`W!>H=DEn~Ux@ayV!(D5+-EOz*bJ)G3ERS=#Thm$&C=}#*qnA)d zTq#G)=|rp#UuoSUc>hs;6d@214eYh2xS49#;EBMGU)}IM!hyXPP5)EXDzW(zm`?cc z>5!4-XY2bw6K8+FX~5F|0nEmO=vh9GiSM(W5w6k;L{Jule~jPiim7s8sBHy~LeJ;L zIp+R}0z@o@rAUTcMtj^VCW4MCH~=G1;Cc***MqLFSO%stQn@YPz+X^SwqINP=XTr# zW;e~oKM;7)N>Ej)RD8L$NjZPUy|0Kux;6@ih>iwTB*uD+Jg3ZcrJee{Z2JP0isTdB zxv4)!;+M`al>G0;t7~TZD?gTHA3~-N&3xaLmI0B6C)gtdHx>vB7*52;fL<61@_Y_) z_^uk75ixRTZV~{=|P)qmojFz_xV^> zroTc zTFP_xu{ti9v{J7u!pp7_*G3*A*P~(u!vlDM=8XHZiDu3N6WGPXN3O;U7GK1Fe)@yZ zKBRS9^LwVb9?(^FCgBdKM)fd0wHH6_w7P$>s2ZCYTKniuH(<>m5BikQ?uQYX0yb0M zBD!h^@`0RhfJQvBRh_gt0bguJ5$0@6psVW|Y%>vG@S%yOxpF6&JRh7guv&ar>pFHTYvTXd$CylnSA4D6tgWwc-FGAIW=o zVR#%eaYGfGb*(Sewpp+7NM#4|tDK2BWUGHFrzKUW=43{jXP79-^D zi`DTu1G}4ry(xAm7Cb+C7&AFBUuG~(sQM5>emNlB+iXolldWtz_wlHn%DNrdVO9HHd)m=s^La|GNa~z>=45r+7YSsB38y%03*AEjgswhwp9#?>_C;!%Bqr z=LdYlLw*S1VV3Kb8B^6E2Ye_Aa*3smc(Di_|1TaVbuXQtrmslPx2jhZq13d25V(<$ zj&JWY1ZuGMOF_LnT<0I5yT6?!6{w=8J>j$c|fVW``H?QMY= zd8;}~RRb3ryJEpxXic0F>*0}!j$Qt{(68Gn%=b!5c9%%lW>`;r?X1~th z2HcNxgD^fw*uHKU4DDwvW4C4S!)l))Mu1r%7Z%?1Zg!3CvpShcF|NAwTN5^!Bl58U z68ZZ(oxs@qeCGDzrH&!%s6cM`#J@Dq5pcP0cEW{gODVOYU@=P8sAuEeV5#=yO1MM& zp(j^0_O3t85|Xq^9F8|aPl*VICsuLyG07tbvt>j$1`L#?rKZu*i#*4kV!97)iA5mp z!%l6X_ymsv>}DnL<*YemBm@Cmm2|9dS9^Y83k}3$(BXYl6O&@UM{mf*k#;NO7NCB! zetmz}16sZMs%6Hf%287w{MK%ict$-M?w#j*7o5~_L=L%-Uc*T~q5R6tcSf=5;3$F< zH+Hjf({o+xt`%bNwQDHUAgn-m_Z$7cnmEt;SGR`!KeM10gouF;b|q^Ogzvh;!HrJ) zqiYBjeQ4peE%at_lOl3zWWpWP5&`k&veqpf*EKH(X2Bz-@#bV)C%v((Gqn9?sf z?l@uG=urAB03Woz9c*}E5}&;A2_3hZ_bkL2*`M8FPKV<@CUGP>o0D0l6Y5>M;Z&)8 zy~xvT@ZoPvpxLp{ZSDD;BUDj(I7mB$EDXzzO_7ldtd5spHH~dea!I&}5W^VzdCefG zOG?P$@0ry6TU1Ug^k(LVs>oQ5Cnduy)6J*ae~{!xng(5*_99Wn1a4LrD$w@g=mdEB zM?K+3V+);}PlEr3OU(Sv4FVQ?Zff06(4OZ6aU&(a5%LZ6fVJLuJzxD}Y3Bdm*hTvA z9T6zZK8Q&1na>B+`cb_6fXsir;{Q8LO?oS&2OSq8m%+ zsv`Qpzb8^R+zXlZ&`fyPIlme5U_)%K+}aXnoa5@t>OYXLb3s7AS5-% zQ)S!wpqPL%_v~X>qImmtr5al{0w9E}#Hn1^v8wfZ*1!FwjGIhmqxQY%H~&WWtYJ3; z3!z;G%Xx)pj(r6Dx;(xT*LckGz#-YKUOCxs6abOc!SS?amhq|V=(di;AmATJCTEU9 zs((Nk$a6YhJD%6eSXkt7q_f|EC7&L3Uj|G6?h%yXZ6mwAzCD)NsTmHQ^OqR1^6Q=2Y%HAxR7*kw;z#LWzZWZO;aTD zP>)ny{0+{^OU`F}d3ovUj}9JSWvY~2d} z3e${#VLH)(!PEJ3TItEZ52aI8%Pk#mmh_ zXD-aAJ?O)SEYev%g<1a;Myuf{y^Q=fs;*OJX;+=E&(+SfHCndUB*WqiE>jhOt=_;T z&;xYkZaAN(3M9XGb>Abd?PS_kkwmdUJI{h7TL`%9G2D%2x&~+oSD7JNf?6OnXHJ2O z)+)kUMi`RFWh*wX&l)Gx5a+k{vcMk!^cgx({16iIZj=~fQK7wXuaT4+&?o=K&UDoY zzwBzuRABmqo7B}y&goe@=7Se}9%|jwlkg^Fxrqd5G-QXBma8&&?Qc9%b_!Hhx|Akbf0oas8Nm&xB z!lq|A5Pw8DK<_BuqAD=}q61dpf7dfQk^JQgUAtASH+A3h;Bxq*uo9mHiw6?%)oV^fRgn0?||;o z6Fg?|ZpU{#sx$Aj=|?98i`e46jKI$UZU4Msn@av&hl#CtkSR3TwM}7t^ebTDCO4;* zN=*3-ZzLde49Be6tX5%z~hgxdh)IO>4=jg6;UkzF0bNwew?YWpgEyTB?I zybMJ;EAC~im*n^xpPjTg850?r@{HXA^gBPT5hbVpk#g)KPmC6?Q@lKCRZH+=bw%RH zKQ?De8FNT~;VRllVIm4LSKZ__&!)j4T$l_45rGMEYP=YxMM6o_zaUZq>X&73<2l;D zU#=W&6Vid9a&)|s#03Jaci3CVn-k?Z`<%Kcl^oC>6OYRKNkihUvT!W53O8bsw-6wl z-ZS4wf(H!GKK}s0?Vb@0wM`FQ<KAD#Q{|4 z1E<*g$6(XD5ocA0k3bq2Uehf4L+NZc$+nI2asPEsv4jtXdfISl0Aoh)$-H!#=Zeqx z)<0<6ZO^sdCv2>gLYPUH!NMc9y|^Q$Z=xO3kvSmX=&KIsTGe+WVv312;_PxM-gr`; zk1)kwMDc)iyeNfXvEy&fbSow|EUh+ZJ7AVOZvb`Cf0E)nO(%#J*qO1-u<;RlIehtA zcOZ4d`O+53bMG+rHR2hCIz*z??N5Y_yYgN8n20N2R`2wXnGf>#lC;+@yIfLK-h*(1 zX^mMhFfy_VQ;3sR;#?xVh1?+u?2C`-Lk)8zyV(`Gtpu7a+|5uS`N(cj~wlOAx|HQ0T`p3=mM(PD z&UJ z?k+q2JlM`CY@c^(3@mtSD`EJ>nPVHgw9IpoBo;ZZXOqN z-Wm8eu0`WC8*T4HPL&qWWLZ(z_^alA) z=aRqsX2#B+U%fuX@D9X!Lx>L>GP<;mqL-Ke_s@)7c?&N6#up{Y9ardTeQpEA);0Ju z9&cASTi@F~Ek>zAtM*(({gFA@i~X82G5ujDBi6HXGwZ=uxVpeh%q)h{geOz3kGO<; z)I$!IT}{rWe3ceA*7qrKBczRjc0`N%q2o=YZZ*w5gao=@9K;*{`znrp3lDK`VTh#q z=QW$}?Tm!-N^p^SFu1cDS?Y0*WtKJXTb`(0rozU)_TAoTyxzO9xxZV=(zbdqK}9j> z?h!APKK`U;!?90bX72We5*K6PlNDvyybAthG7fUt-`$d%sp)llo8zgAM?wSy7iYww zNPn}lcr4zir_p|((a&7qVQypHPG}2i!@|`2Tal4&qWckeHtT3gF)CWs!9dh-d2<~U zY$uLsL!ytDrbljd`5KQ-;cvmh|MoqltW{2+l^nj?0@0VKhHV<^o1&<{9h$--tc=MQ z6op*P(13;7II*ZiH?jnx-z#SO+K~ z-npM+Kd}oe^;rEMar55r=XHgFRGgSiLZ#L@yhb|DS%2}>gN;bH7e0$6stH~&3C4kAT)P2XlBCAZ zJ(>cvhtxZmP4 zkcBbe^c-PdvPE?KA-`%qY5C^fUVa)Jf%sd1Ln5zeze2Ir*Fyo_I$&UcGNJy}Xn=Mu z#N>g&fQ@x0;-7|}pR@k0%kzZ1yn%1h6gJcr9fX}#62$iE5o2ZGGk>#R;lZ_;=Z*yL=4*3B!NQHe|c@3VVy}f(W=v52E`wr56_ixvcM7 z8B6l35eVib_n{JWEt%Rq6(?!=lMC--p*pia3W zr=W#2ILYFELJIc>ymWSi9MoFx?PVZAweAua%YPz8$i1kD+{XCJpD{~vRG29EzY}2+ z@m`}5N+D(tAC2`qr>6Pgb7Qh_djp(sV?Yx6OHJPSUWze_V|^-R!=B<56wd$~6P%>A z`w;kkjXjF%IiNCf@tn`=|6^;nMtgHWUnqEi?0$Ay$_fae83qYgNTfA@#rIbv)HZy8gj?+k zTX%B9#(H!A@6S<3|DVB33akW{6AZa|$_Q6)1~A@+Pxzn+eu?+?b0kd?lp*lL6k6gP z?0BM}5o_!eMOV11h-BZ^pJ2p7{+3@UY(Y$bj=3DM^FMyI`>_8W_Ebw{HrplUiXx11 zxYkGRKV}i^nIZ_>@G>cUwOHFpWSa@@b+P<~XmvpPk9G^B%CeVvex_7w*vo8si)><3 zzuF)^x@!%q$T9B>=xKdbFO<95n|DfGEf_od@h#JTM+nI=N6$Q+Mt3fY_fbDpSN%dZ zbhhxO-oCK=6W|PmYpYd-;3%^Q=%RP7h-d$|Zg9LfOT1@m@*CHEYA5H`6elNRjvXpK zhgpD$v~D*f(XuyxQ5Q{@_<<|C=1+f6vl5ooH4>(O#7x)6eKys0;J4@&_tolhx%u)u z4aYiaUyD2T2}Y3n;=e=Ocr%s?NzRhXEqgK{_i?=@P z5zd^R>aEYn=^%V)BeHJSvQyhy`B$iORmZK`9XDmml$a}T|Gx1lVz}@|KmK1mnDPo7 zPbp?@7wa;lX+AM&zK>%+Uhp^32u1DN6%0-Lo(2JKTyC>6zLUK0{;>Y}MF>i7usB6% z9*E7cPVz@u?|c(w`qf}%Z3e7h3E|T-CG|AhEi_0W=LTXmV6@5<8@BCWAfajsgGgQB z9q3Z|5O_r z)4EOcUdF%K3-^z$E$x@*TDaEFXq9ja(R|yOraN-7EjL4wL)N<0~|JdK~@{Lu_z7cu%>ielX$5b zNU*SeBg_Ho20J*yYbcu%?QYdlQwG?m&UbV-O|g^$wI9!7%aPHVr`aLR!cEHm`o$y9 zlWk$Kz@ov;7;N7&(iT%6xj-XIru(sWSH)3cbqIW{I4^#-vytF)M^M9SccLq?-xcBi zQ2>`OK*UJ?$R{HGA?(aGh@S| z{_d_^PlG#CB_m>21xFC#3cooTE&(`{%4a7yMc9&@L!A-~g}RR=Qh{C-)h_?1O_T2JD+yI^!&UzSs0UR8F88C4 zesNn;)!|DqvuKHJsb%|xoG3GZK#5vo&>5y(wT0%OdyL;)9l2*FAL8Kd`B^K#kdg)p^-@E+ZkGu2SbLPyM znKSd7Irl0!(X5eBh0+WLApM;`79yPRXoklh>4&gfO8md8$S7>BWv`B!8Gi8v316fE zh9@aH$y|nID)w?FTOy|2*`a3JbAzn+DQJo8CZFPy2x+Fo*%q9fVd8M(4Jj~Re-FgG zwlSeYvD&E5v3ywz>CZX8xCygO_Q~<=UlU@_TzK#uPYF2sEGiH~gUp7QD|rJne+mRY z#Tg#k&VNClBZ*9iLwZujJ{?>izV_cv`Ex^|BMMnxeML`)g;9ipyVB2a=5!ZZmNY3) z1XsQ|#YWm!)PAo>b-(wuybDhptH%r^qbjx~^Kp1f)+8_ggKo_CKHki9D%6zc}Q4GV0CmnfQRxDT1C z|JMHGeeu-Dnfhm^?j8FlAxWsDtn*j9b74qgo~XIs%}3}~JXu^MlC@THl1 z@I=r_ODM4->*&N`1qmhi;HM3fidSqNpD?F>Kj5Q)bf><*J4XR$Ldj>Bg6bJMg`8`$ z>hMRaiO~!ActKfccm2OcG17NMN<`_vm^riruqrKcLil9l#}18Xf+7NqH{@2X-{u<| zDzzoR1#Ak7Pr0}JG6{Y+!U)+cD8q90P_x!?vBZ(<|I^9hCK7&m%}|p!#&p|ht<}R9 z^}V&XyH1z_OXU#Bkwl^&l?b(9DI5OaHo=X!*A|w;awLw^kOa1;y6}Kw>ygflZG^r;`N>RxXs~AVI(HTMY32 z(%c&kB%2HCtHlnA(Sq9Z&k_<4amGlznNxRlI{-%pY`@jFpmFSZJcaVX;T_j6C9h2v zkAd|b03vKhm3J-7e_=#6T@ti@{AGwG>M8dargF?+|+-Gd@(B{j2ajS#P^35NuL zHLw2As3Z=4U8 z>1lEP_njMrgxr6Gy%1m#r6Vw_|A=pK~*X-L(Q5n1bZ*VAbip!I|gw zy0Jt9fC6_A2hj{|6g3~bwCW)1ZKXrOp?<5r5 zThc7_hLcUU2w|b^tN>7m&qod__)EAWS4uX z4#Jz<7?3-gwfD+u=0lD*%4j8tQpQhrHD%&s7$$@3Mq{GAbx(JDYAHt8oIlCwqtUBf zf8phaIKIg~M__e8=*+r@6^vk3gMj}RZ}>`NT&h)0?pqv;kqcN%QCZ^+E5a6g086$*15|;`ameEBN}=tVY2%AYnCM?0+&