From c566e071707646761000a5d013f5eeac9d474428 Mon Sep 17 00:00:00 2001 From: Rhys Goodall Date: Tue, 25 Mar 2025 20:39:32 -0400 Subject: [PATCH 1/3] fea: remove protostructure code that was upstreamed to pmg. --- aviary/wren/data.py | 16 +- aviary/wren/utils.py | 895 +- .../wren/wyckoff-position-multiplicities.json | 2194 --- aviary/wren/wyckoff-position-params.json | 2193 --- aviary/wren/wyckoff-position-relabelings.json | 12005 ---------------- examples/inputs/poscar_to_df.py | 7 +- examples/notebooks/Roost.ipynb | 12 +- examples/notebooks/Wren.ipynb | 10 +- .../compare_spglib_vs_aflow_wyckoff_labels.py | 13 +- examples/wrenformer/mat_bench/readme.md | 2 +- .../mat_bench/save_matbench_aflow_labels.py | 2 +- pyproject.toml | 7 +- tests/conftest.py | 3 +- tests/data/ABC6D2_mC40_15_e_e_3f_f.cif | 71 - tests/data/U2Pa4Tc6.json | 107 - tests/test_wyckoff_ops.py | 408 - tests/wren/test_utils.py | 10 + 17 files changed, 50 insertions(+), 17905 deletions(-) delete mode 100644 aviary/wren/wyckoff-position-multiplicities.json delete mode 100644 aviary/wren/wyckoff-position-params.json delete mode 100644 aviary/wren/wyckoff-position-relabelings.json delete mode 100644 tests/data/ABC6D2_mC40_15_e_e_3f_f.cif delete mode 100644 tests/data/U2Pa4Tc6.json delete mode 100644 tests/test_wyckoff_ops.py create mode 100644 tests/wren/test_utils.py diff --git a/aviary/wren/data.py b/aviary/wren/data.py index fd5d7257..913b4d67 100644 --- a/aviary/wren/data.py +++ b/aviary/wren/data.py @@ -7,16 +7,16 @@ import numpy as np import torch +from pymatgen.analysis.prototypes import ( + RE_SUBST_ONE_PREFIX, + RE_WYCKOFF_NO_PREFIX, + WYCKOFF_MULTIPLICITY_DICT, + WYCKOFF_POSITION_RELAB_DICT, +) from torch import LongTensor, Tensor from torch.utils.data import Dataset from aviary import PKG_DIR -from aviary.wren.utils import ( - RE_SUBST_ONE_PREFIX, - RE_WYCKOFF_NO_PREFIX, - relab_dict, - wyckoff_multiplicity_dict, -) if TYPE_CHECKING: from collections.abc import Sequence @@ -301,13 +301,13 @@ def parse_protostructure_label( elements.extend([el] * mult) wyckoff_set.extend([letter] * mult) wyckoff_site_multiplicities.extend( - [float(wyckoff_multiplicity_dict[spg_num][letter])] * mult + [float(WYCKOFF_MULTIPLICITY_DICT[spg_num][letter])] * mult ) # Create augmented Wyckoff set augmented_wyckoff_set = { tuple(",".join(wyckoff_set).translate(str.maketrans(trans)).split(",")) - for trans in relab_dict[spg_num] + for trans in WYCKOFF_POSITION_RELAB_DICT[spg_num] } return spg_num, wyckoff_site_multiplicities, elements, list(augmented_wyckoff_set) diff --git a/aviary/wren/utils.py b/aviary/wren/utils.py index e8aa5f82..c14d3d85 100644 --- a/aviary/wren/utils.py +++ b/aviary/wren/utils.py @@ -1,891 +1,6 @@ -from __future__ import annotations - -import json -import re -import subprocess -from collections import Counter, defaultdict -from itertools import chain, groupby, permutations, product -from operator import itemgetter -from os.path import abspath, dirname, join -from shutil import which -from string import ascii_uppercase, digits -from typing import Literal - -from monty.fractions import gcd -from pymatgen.core import Composition, Structure -from pymatgen.symmetry.analyzer import SpacegroupAnalyzer - -try: - from pyxtal import pyxtal - - has_pyxtal = True -except ImportError: - pyxtal = None - has_pyxtal = False - -try: - import moyopy - from moyopy.interface import MoyoAdapter - - has_moyopy = True -except ImportError: - moyopy = None - MoyoAdapter = None - has_moyopy = False - -module_dir = dirname(abspath(__file__)) - -with open(join(module_dir, "wyckoff-position-multiplicities.json")) as file: - # dictionary mapping Wyckoff letters in a given space group to their multiplicity - wyckoff_multiplicity_dict = json.load(file) - -with open(join(module_dir, "wyckoff-position-params.json")) as file: - param_dict = json.load(file) - -with open(join(module_dir, "wyckoff-position-relabelings.json")) as file: - relab_dict = json.load(file) - -relab_dict = { - spg_num: [{int(key): line for key, line in val.items()} for val in vals] - for spg_num, vals in relab_dict.items() -} - -CRYSTAL_FAMILY_SYMBOLS = { - "triclinic": "a", - "monoclinic": "m", - "orthorhombic": "o", - "tetragonal": "t", - "trigonal": "h", - "hexagonal": "h", - "cubic": "c", -} - -CRYSTAL_LATTICE_PARAMETERS_COUNTS = { - "a": 6, - "m": 4, - "o": 3, - "t": 2, - "h": 2, - "c": 1, -} - -remove_digits = str.maketrans("", "", digits) - -# Define regex patterns as constants -RE_WYCKOFF_NO_PREFIX = re.compile(r"((?" -RE_SUBST_ONE_SUFFIX = r"\g<1>1" - - -def split_alpha_numeric(s: str) -> dict[str, list[str]]: - """Split a string into separate lists of alpha and numeric groups. - - Args: - s (str): The input string to split. - - Returns: - dict[str, list[str]]: A dictionary with keys 'alpha' and 'numeric', - each containing a list of the respective groups. - """ - groups = ["".join(g) for _, g in groupby(s, str.isalpha)] - return { - "alpha": [g for g in groups if g.isalpha()], - "numeric": [g for g in groups if g.isnumeric()], - } - - -def count_values_for_wyckoff( - element_wyckoffs: list[str], - counts: list[str], - spg_num: str, - lookup_dict: dict[str, dict[str, int]], -): - """Count values from a lookup table and scale by wyckoff multiplicities.""" - return sum( - int(count) * lookup_dict[spg_num][wyckoff_letter] - for count, wyckoff_letter in zip(counts, element_wyckoffs) +def __getattr__(name): + raise ImportError( + "The functionality from aviary.wren.utils has been moved to pymatgen. " + "Please install pymatgen using 'pip install pymatgen>2025.3.10' to " + "access these features." ) - - -def get_centering(spg_sym: str) -> str: - """Get the centering for the structure, e.g. (A, B, C, S).""" - return "C" if spg_sym[0] in ("A", "B", "C", "S") else spg_sym[0] - - -def get_pearson_symbol_from_spg_analyzer(spg_analyzer: SpacegroupAnalyzer) -> str: - """Get the Pearson symbol for the structure.""" - cry_sys = spg_analyzer.get_crystal_system() - spg_sym = spg_analyzer.get_space_group_symbol() - centering = get_centering(spg_sym) - - num_sites_conventional = len(spg_analyzer.get_symmetry_dataset().std_types) - return f"{CRYSTAL_FAMILY_SYMBOLS[cry_sys]}{centering}{num_sites_conventional}" - - -def get_protostructure_label( - struct: Structure, - method: Literal["aflow", "spglib", "moyopy"], - raise_errors: bool = False, - **kwargs, -) -> str | None: - """Get protostructure label for a pymatgen Structure. - - Args: - struct (Structure): pymatgen Structure - method (Literal["aflow", "spglib", "moyopy"]): Method to use for symmetry - detection - raise_errors (bool): Whether to raise errors or annotate them. Defaults to - False. - **kwargs: Additional arguments for the specific method - - Returns: - str: protostructure_label which is constructed as `aflow_label:chemsys` or - explanation of failure if symmetry detection failed and `raise_errors` - is False. - """ - if method == "aflow": - return get_protostructure_label_from_aflow(struct, raise_errors, **kwargs) - if method == "spglib": - return get_protostructure_label_from_spglib(struct, raise_errors, **kwargs) - if method == "moyopy": - return get_protostructure_label_from_moyopy(struct, raise_errors, **kwargs) - raise ValueError(f"Invalid method: {method}") - - -def get_protostructure_label_from_aflow( - struct: Structure, - raise_errors: bool = False, - aflow_executable: str | None = None, -) -> str: - """Get protostructure label for a pymatgen Structure. Make sure you're running a - recent version of the aflow CLI as there's been several breaking changes. This code - was tested under v3.2.12. The protostructure label is constructed as - `aflow_label:chemsys`. - - Install guide: https://aflow.org/install-aflow/#install_aflow - http://aflow.org/install-aflow/install-aflow.sh -o install-aflow.sh - chmod 555 install-aflow.sh - ./install-aflow.sh --slim - - Args: - struct (Structure): pymatgen Structure - aflow_executable (str): path to aflow executable. Defaults to which("aflow"). - raise_errors (bool): Whether to raise errors or annotate them. Defaults to - False. - - Returns: - str: protostructure_label which is constructed as `aflow_label:chemsys` or - explanation of failure if symmetry detection failed and `raise_errors` - is False. - """ - if aflow_executable is None: - aflow_executable = which("aflow") - - if which(aflow_executable or "") is None: - raise FileNotFoundError( - "AFLOW could not be found, please specify path to its binary with " - "aflow_executable='...'" - ) - - cmd = f"{aflow_executable} --prototype --print=json cat".split() - - output = subprocess.run( - cmd, - input=struct.to(fmt="poscar"), - text=True, - capture_output=True, - check=True, - ) - - aflow_proto = json.loads(output.stdout) - - aflow_label = aflow_proto["aflow_prototype_label"] - chemsys = struct.chemical_system - # check that multiplicities satisfy original composition - prototype_form, pearson_symbol, spg_num, *element_wyckoffs = aflow_label.split("_") - - element_dict = {} - for elem, wyk_letters_per_elem in zip(chemsys.split("-"), element_wyckoffs): - # normalize Wyckoff letters to start with 1 if missing digit - wyk_letters_normalized = re.sub( - RE_WYCKOFF_NO_PREFIX, RE_SUBST_ONE_PREFIX, wyk_letters_per_elem - ) - sep_el_wyks = split_alpha_numeric(wyk_letters_normalized) - element_dict[elem] = count_values_for_wyckoff( - sep_el_wyks["alpha"], - sep_el_wyks["numeric"], - spg_num, - wyckoff_multiplicity_dict, - ) - - element_wyckoffs = "_".join(element_wyckoffs) - element_wyckoffs = canonicalize_element_wyckoffs(element_wyckoffs, spg_num) - - protostructure_label = ( - f"{prototype_form}_{pearson_symbol}_{spg_num}_{element_wyckoffs}:{chemsys}" - ) - - observed_formula = Composition(element_dict).reduced_formula - expected_formula = struct.composition.reduced_formula - if observed_formula != expected_formula: - err_msg = ( - f"Invalid WP multiplicities - {protostructure_label}, expected " - f"{observed_formula} to be {expected_formula}" - ) - if raise_errors: - raise ValueError(err_msg) - - return err_msg - - return protostructure_label - - -def _get_all_wyckoffs_substring_and_element_dict( - equivalent_wyckoff_labels: list[tuple[int, str, str]], - spg_num: int | str, -): - """Get Wyckoff position substring and element dict from equivalent Wyckoff labels. - - Args: - equivalent_wyckoff_labels (list[tuple[int, str, str]]): List of tuples containing - (multiplicity, element symbol, Wyckoff letter). - spg_num (int | str): Space group number. - - Returns: - tuple[str, dict]: Tuple containing: - - str: Wyckoff position substring - - dict: Dictionary mapping element symbols to their multiplicities - """ - # Pre-sort by element and wyckoff letter to ensure continuous groups in groupby - equivalent_wyckoff_labels = sorted( - equivalent_wyckoff_labels, key=lambda x: (x[1], x[2]) - ) - - # check that multiplicities satisfy original composition - element_dict = {} - element_wyckoffs = [] - for el, group in groupby(equivalent_wyckoff_labels, key=lambda x: x[1]): - # NOTE create a list from the iterator so that we can use it without exhausting - list_group = list(group) - element_dict[el] = sum( - wyckoff_multiplicity_dict[str(spg_num)][e[2]] for e in list_group - ) - # group by Wyckoff letter to get Wyckoff site multiplicity from len - element_wyckoffs.append( - "".join( - f"{len(list(occurrences))}{wyk_letter}" - for wyk_letter, occurrences in groupby(list_group, key=lambda x: x[2]) - ) - ) - all_wyckoffs = "_".join(element_wyckoffs) - all_wyckoffs = canonicalize_element_wyckoffs(all_wyckoffs, spg_num) - - return all_wyckoffs, element_dict - - -def get_protostructure_label_from_spg_analyzer( - spg_analyzer: SpacegroupAnalyzer, - raise_errors: bool = False, -) -> str: - """Get protostructure label for pymatgen SpacegroupAnalyzer. - - Args: - spg_analyzer (SpacegroupAnalyzer): pymatgen SpacegroupAnalyzer object. - raise_errors (bool): Whether to raise errors or annotate them. Defaults to - False. - - Returns: - str: protostructure_label which is constructed as `aflow_label:chemsys` or - explanation of failure if symmetry detection failed and `raise_errors` - is False. - """ - sym_struct = spg_analyzer.get_symmetrized_structure() - - spg_num = spg_analyzer.get_space_group_number() - pearson_symbol = get_pearson_symbol_from_spg_analyzer(spg_analyzer) - prototype_form = get_prototype_formula_from_composition(sym_struct.composition) - chemsys = sym_struct.chemical_system - - # get Wyckoff position substring - equivalent_wyckoff_labels = [ - # tuple of (wp multiplicity, element, wyckoff letter) - (len(s), s[0].species_string, wyk_letter.translate(remove_digits)) - for s, wyk_letter in zip(sym_struct.equivalent_sites, sym_struct.wyckoff_symbols) - ] - - all_wyckoffs, element_dict = _get_all_wyckoffs_substring_and_element_dict( - equivalent_wyckoff_labels, spg_num - ) - - protostructure_label = ( - f"{prototype_form}_{pearson_symbol}_{spg_num}_{all_wyckoffs}:{chemsys}" - ) - - observed_formula = Composition(element_dict).reduced_formula - expected_formula = sym_struct.composition.reduced_formula - if observed_formula != expected_formula: - err_msg = ( - f"Invalid WP multiplicities - {protostructure_label}, expected " - f"{observed_formula} to be {expected_formula}" - ) - if raise_errors: - raise ValueError(err_msg) - - return err_msg - - return protostructure_label - - -def get_protostructure_label_from_spglib( - struct: Structure, - raise_errors: bool = False, - init_symprec: float = 0.1, - fallback_symprec: float | None = 1e-5, -) -> str: - """Get AFLOW prototype label for pymatgen Structure. - - Args: - struct (Structure): pymatgen Structure object. - raise_errors (bool): Whether to raise errors or annotate them. Defaults to - False. - init_symprec (float): Initial symmetry precision for spglib. Defaults to 0.1. - fallback_symprec (float): Fallback symmetry precision for spglib if first - symmetry detection failed. Defaults to 1e-5. - - Returns: - str: protostructure_label which is constructed as `aflow_label:chemsys` or - explanation of failure if symmetry detection failed and `raise_errors` - is False. - """ - attempt_to_recover = False - try: - spg_analyzer = SpacegroupAnalyzer(struct, symprec=init_symprec, angle_tolerance=5) - try: - aflow_label_with_chemsys = get_protostructure_label_from_spg_analyzer( - spg_analyzer, raise_errors - ) - - if ("Invalid" in aflow_label_with_chemsys) and fallback_symprec is not None: - attempt_to_recover = True - except ValueError as exc: - if fallback_symprec is None: - raise exc - attempt_to_recover = True - - # try again with refined structure if it initially fails - # NOTE structures with magmoms fail unless all have same magnetic moment - if attempt_to_recover: - spg_analyzer = SpacegroupAnalyzer( - spg_analyzer.get_refined_structure(), - symprec=fallback_symprec, - angle_tolerance=-1, - ) - aflow_label_with_chemsys = get_protostructure_label_from_spg_analyzer( - spg_analyzer, raise_errors - ) - return aflow_label_with_chemsys - - except ValueError as exc: - if not raise_errors: - return str(exc) - raise - - -def get_protostructure_label_from_moyopy( - struct: Structure, - raise_errors: bool = False, - symprec: float = 0.1, -) -> str | None: - """Get AFLOW prototype label using Moyopy for symmetry detection. - - Args: - struct (Structure): pymatgen Structure object. - raise_errors (bool): Whether to raise errors or annotate them. Defaults to - False. - symprec (float): Initial symmetry precision for Moyopy. Defaults to 0.1. - - Returns: - str: protostructure_label which is constructed as `aflow_label:chemsys` or - explanation of failure if symmetry detection failed and `raise_errors` - is False. - """ - if not has_moyopy: - raise ImportError("moyopy not found, run pip install moyopy") - - # Convert pymatgen Structure to Moyo Cell and get symmetry data - moyo_cell = MoyoAdapter.from_structure(struct) - moyo_data = moyopy.MoyoDataset(moyo_cell, symprec=symprec) - - # Get space group number and Pearson symbol - spg_num = moyo_data.number - pearson_symbol = moyo_data.pearson_symbol - prototype_form = get_prototype_formula_from_composition(struct.composition) - chemsys = struct.chemical_system - - # Group Wyckoff positions by orbit and element - equivalent_wyckoff_labels = [] - orbit_groups: dict[int, list[int]] = {} - - # Group sites by orbit - for idx, orbit_id in enumerate(moyo_data.orbits): - if orbit_id not in orbit_groups: - orbit_groups[orbit_id] = [] - orbit_groups[orbit_id].append(idx) - - # Create equivalent_wyckoff_labels from orbit groups - for orbit in orbit_groups.values(): - # All sites in an orbit have the same Wyckoff letter and element - wyckoff = moyo_data.wyckoffs[orbit[0]] - element = struct.species[orbit[0]] - equivalent_wyckoff_labels += [ - (len(orbit), element.symbol, wyckoff.translate(remove_digits)) - ] - - all_wyckoffs, element_dict = _get_all_wyckoffs_substring_and_element_dict( - equivalent_wyckoff_labels, spg_num - ) - - protostructure_label = ( - f"{prototype_form}_{pearson_symbol}_{spg_num}_{all_wyckoffs}:{chemsys}" - ) - - # Verify multiplicities match composition - observed_formula = Composition(element_dict).reduced_formula - expected_formula = struct.composition.reduced_formula - if observed_formula != expected_formula: - err_msg = ( - f"Invalid WP multiplicities - {protostructure_label}, expected " - f"{observed_formula} to be {expected_formula}" - ) - if raise_errors: - raise ValueError(err_msg) - return err_msg - - return protostructure_label - - -def canonicalize_element_wyckoffs(element_wyckoffs: str, spg_num: int | str) -> str: - """Given an element ordering, canonicalize the associated Wyckoff positions - based on the alphabetical weight of equivalent choices of origin. - - Args: - element_wyckoffs (str): wyckoff substring section from aflow_label with the - wyckoff letters for different elements separated by underscores. - spg_num (int | str): International space group number. - - Returns: - str: element_wyckoff string with canonical ordering of the wyckoff letters. - """ - isopointal_element_wyckoffs = list( - { - element_wyckoffs.translate(str.maketrans(trans)) - for trans in relab_dict[str(spg_num)] - } - ) - - scored_element_wyckoffs = [ - sort_and_score_element_wyckoffs(element_wyckoffs) - for element_wyckoffs in isopointal_element_wyckoffs - ] - - return min(scored_element_wyckoffs, key=lambda x: (x[1], x[0]))[0] - - -def sort_and_score_element_wyckoffs(element_wyckoffs: str) -> tuple[str, int]: - """Determines the order or Wyckoff positions when canonicalizing AFLOW labels. - - Args: - element_wyckoffs (str): wyckoff substring section from aflow_label with the - wyckoff letters for different elements separated by underscores. - - Returns: - tuple: containing - - str: sorted Wyckoff position substring for AFLOW-style prototype label - - int: integer score to rank order when canonicalizing - """ - score = 0 - sorted_element_wyckoffs = [] - for el_wyks in element_wyckoffs.split("_"): - wp_counts = split_alpha_numeric(el_wyks) - sorted_element_wyckoffs.append( - "".join( - f"{count}{wyckoff_letter}" if count != "1" else wyckoff_letter - for count, wyckoff_letter in sorted( - zip(wp_counts["numeric"], wp_counts["alpha"]), - key=lambda x: x[1], - ) - ) - ) - score += sum( - 0 if wyckoff_letter == "A" else ord(wyckoff_letter) - 96 - for wyckoff_letter in wp_counts["alpha"] - ) - - return "_".join(sorted_element_wyckoffs), score - - -def get_prototype_formula_from_composition(composition: Composition) -> str: - """An anonymized formula. Unique species are arranged in alphabetical order - and assigned ascending alphabets. This format is used in the aflow structure - prototype labelling scheme. - - Args: - composition (Composition): Pymatgen Composition to process - - Returns: - str: anonymized formula where the species are in alphabetical order - """ - reduced = composition.element_composition - if all(x == int(x) for x in composition.values()): - reduced /= gcd(*(int(amt) for amt in composition.values())) - - amounts = [reduced[key] for key in sorted(reduced, key=str)] - - anon = "" - for elem, amt in zip(ascii_uppercase, amounts): - if amt == 1: - amt_str = "" - elif abs(amt % 1) < 1e-8: - amt_str = str(int(amt)) - else: - amt_str = str(amt) - anon += f"{elem}{amt_str}" - return anon - - -def get_anonymous_formula_from_prototype_formula(prototype_formula: str) -> str: - """Get an anonymous formula from a prototype formula.""" - prototype_formula = re.sub( - RE_ELEMENT_NO_SUFFIX, RE_SUBST_ONE_SUFFIX, prototype_formula - ) - anom_list = split_alpha_numeric(prototype_formula) - - return "".join( - f"{el}{num}" if num != 1 else el - for el, num in zip(anom_list["alpha"], sorted(map(int, anom_list["numeric"]))) - ) - - -def get_formula_from_protostructure_label(protostructure_label: str) -> str: - """Get a formula from a protostructure label.""" - aflow_label, chemsys = protostructure_label.split(":") - prototype_formula = aflow_label.split("_")[0] - prototype_formula = re.sub( - RE_ELEMENT_NO_SUFFIX, RE_SUBST_ONE_SUFFIX, prototype_formula - ) - anom_list = split_alpha_numeric(prototype_formula) - - return "".join( - f"{el}{num}" if num != 1 else el - for el, num in zip(chemsys.split("-"), map(int, anom_list["numeric"])) - ) - - -def count_distinct_wyckoff_letters(protostructure_label: str) -> int: - """Count number of distinct Wyckoff letters in protostructure_label. - - Args: - protostructure_label (str): label constructed as `aflow_label:chemsys` where - aflow_label is an AFLOW-style prototype label chemsys is the alphabetically - sorted chemical system. - - Returns: - int: number of distinct Wyckoff letters in protostructure_label - """ - aflow_label, _ = protostructure_label.split(":") - _, _, _, element_wyckoffs = aflow_label.split("_", 3) - element_wyckoffs = element_wyckoffs.translate(remove_digits).replace("_", "") - return len(set(element_wyckoffs)) # number of distinct Wyckoff letters - - -def count_wyckoff_positions(protostructure_label: str) -> int: - """Count number of Wyckoff positions in protostructure_label. - - Args: - protostructure_label (str): label constructed as `aflow_label:chemsys` where - aflow_label is an AFLOW-style prototype label chemsys is the alphabetically - sorted chemical system. - - Returns: - int: number of distinct Wyckoff positions in protostructure_label - """ - aflow_label, _ = protostructure_label.split(":") # remove chemical system - # discard prototype formula and spg symbol and spg number - wyk_letters = aflow_label.split("_", maxsplit=3)[-1] - # throw Wyckoff positions for all elements together - wyk_letters = wyk_letters.replace("_", "") - wyk_list = re.split("[A-z]", wyk_letters)[:-1] # split on every letter - - # count 1 for letters without prefix - return sum(1 if len(x) == 0 else int(x) for x in wyk_list) - - -def count_crystal_dof(protostructure_label: str) -> int: - """Count number of free parameters in coarse-grained protostructure_label - representation: how many degrees of freedom would remain to optimize during - a crystal structure relaxation. - - Args: - protostructure_label (str): label constructed as `aflow_label:chemsys` where - aflow_label is an AFLOW-style prototype label chemsys is the alphabetically - sorted chemical system. - - Returns: - int: Number of free-parameters in given prototype - """ - aflow_label, _ = protostructure_label.split(":") # chop off chemical system - _, pearson_symbol, spg_num, *element_wyckoffs = aflow_label.split("_") - - return ( - _count_from_dict(element_wyckoffs, param_dict, spg_num) - + CRYSTAL_LATTICE_PARAMETERS_COUNTS[pearson_symbol[0]] - ) - - -def count_crystal_sites(protostructure_label: str) -> int: - """Count number of sites from protostructure_label. - - Args: - protostructure_label (str): label constructed as `aflow_label:chemsys` where - aflow_label is an AFLOW-style prototype label chemsys is the alphabetically - sorted chemical system. - - Returns: - int: Number of free-parameters in given prototype - """ - aflow_label, _ = protostructure_label.split(":") # chop off chemical system - _, _, spg_num, *element_wyckoffs = aflow_label.split("_") - - return _count_from_dict(element_wyckoffs, wyckoff_multiplicity_dict, spg_num) - - -def _count_from_dict(element_wyckoffs: list[str], lookup_dict: dict, spg_num: str) -> int: - """Count number of sites from protostructure_label.""" - n_params = 0 - - for wyckoffs in element_wyckoffs: - # normalize Wyckoff letters to start with 1 if missing digit - sep_el_wyks = split_alpha_numeric( - re.sub(RE_WYCKOFF_NO_PREFIX, RE_SUBST_ONE_PREFIX, wyckoffs) - ) - n_params += count_values_for_wyckoff( - sep_el_wyks["alpha"], - sep_el_wyks["numeric"], - spg_num, - lookup_dict, - ) - - return int(n_params) - - -def get_prototype_from_protostructure(protostructure_label: str) -> str: - """Get a canonicalized string for the prototype. This prototype should be - the same for all isopointal protostructures. - - Args: - protostructure_label (str): label constructed as `aflow_label:chemsys` where - aflow_label is an AFLOW-style prototype label chemsys is the alphabetically - sorted chemical system. - - Returns: - str: Canonicalized AFLOW-style prototype label - """ - aflow_label, _ = protostructure_label.split(":") - prototype_formula, pearson_symbol, spg_num, *element_wyckoffs = aflow_label.split("_") - - anonymous_formula = get_anonymous_formula_from_prototype_formula(prototype_formula) - counts = [ - int(x) - for x in split_alpha_numeric( - re.sub(RE_ELEMENT_NO_SUFFIX, RE_SUBST_ONE_SUFFIX, prototype_formula) - )["numeric"] - ] - - # map to list to avoid mypy error, zip returns tuples. - counts, element_wyckoffs = map(list, zip(*sorted(zip(counts, element_wyckoffs)))) - all_wyckoffs = "_".join(element_wyckoffs) - all_wyckoffs = re.sub(RE_WYCKOFF_NO_PREFIX, RE_SUBST_ONE_PREFIX, all_wyckoffs) - if len(counts) == len(set(counts)): - all_wyckoffs = canonicalize_element_wyckoffs(all_wyckoffs, int(spg_num)) - return f"{anonymous_formula}_{pearson_symbol}_{spg_num}_{all_wyckoffs}" - - # credit Stef: https://stackoverflow.com/a/70126643/5517459 - all_wyckoffs_permutations = [ - "_".join(list(map(itemgetter(1), chain.from_iterable(p)))) - for p in product( - *[ - permutations(g) - for _, g in groupby( - sorted(zip(counts, all_wyckoffs.split("_"))), key=lambda x: x[0] - ) - ] - ) - ] - - isopointal_all_wyckoffs = list( - { - all_wyckoffs.translate(str.maketrans(trans)) - for all_wyckoffs in all_wyckoffs_permutations - for trans in relab_dict[spg_num] - } - ) - - scored_all_wyckoffs = [ - sort_and_score_element_wyckoffs(element_wyckoffs) - for element_wyckoffs in isopointal_all_wyckoffs - ] - - all_wyckoffs = min(scored_all_wyckoffs, key=lambda x: (x[1], x[0]))[0] - - return f"{anonymous_formula}_{pearson_symbol}_{spg_num}_{all_wyckoffs}" - - -def _get_anonymous_formula_dict(anonymous_formula: str) -> dict: - """Get a dictionary of element to count from an anonymous formula.""" - result: defaultdict = defaultdict(int) - element = "" - count = "" - - for char in anonymous_formula: - if char.isalpha(): - if element: - result[element] += int(count) if count else 1 - count = "" - element = char - else: - count += char - - if element: - result[element] += int(count) if count else 1 - - return dict(result) - - -def _find_translations( - dict1: dict[str, int], dict2: dict[str, int] -) -> list[dict[str, str]]: - """Find all possible translations between two dictionaries.""" - if Counter(dict1.values()) != Counter(dict2.values()): - return [] - - keys2 = list(dict2.keys()) - used = set() - - def backtrack(translation, index): - if index == len(dict1): - return [translation.copy()] - - key1 = list(dict1.keys())[index] - value1 = dict1[key1] - valid_translations = [] - - for key2 in keys2: - if key2 not in used and dict2[key2] == value1: - used.add(key2) - translation[key1] = key2 - valid_translations.extend(backtrack(translation, index + 1)) - used.remove(key2) - del translation[key1] - - return valid_translations - - return backtrack({}, 0) - - -def get_protostructures_from_aflow_label_and_composition( - aflow_label: str, composition: Composition -) -> list[str]: - """Get a canonicalized string for the prototype. - - Args: - aflow_label (str): AFLOW-style prototype label - composition (Composition): pymatgen Composition object - - Returns: - list[str]: List of possible protostructure labels that can be generated - from combinations of the input aflow_label and composition. - """ - anonymous_formula, pearson_symbol, spg_num, *element_wyckoffs = aflow_label.split("_") - - ele_amt_dict = composition.get_el_amt_dict() - proto_formula = get_prototype_formula_from_composition(composition) - anom_amt_dict = _get_anonymous_formula_dict(anonymous_formula) - - translations = _find_translations(ele_amt_dict, anom_amt_dict) - anom_ele_to_wyk = dict(zip(anom_amt_dict.keys(), element_wyckoffs)) - anonymous_formula = RE_ANONYMOUS.sub(RE_SUBST_ONE_PREFIX, anonymous_formula) - - protostructures = set() - for t in translations: - wyckoff_part = "_".join( - RE_WYCKOFF.sub(RE_SUBST_ONE_PREFIX, anom_ele_to_wyk[t[elem]]) - for elem in sorted(t.keys()) - ) - canonicalized_wyckoff = canonicalize_element_wyckoffs(wyckoff_part, spg_num) - chemical_system = "-".join(sorted(t.keys())) - - protostructures.add( - f"{proto_formula}_{pearson_symbol}_{spg_num}_{canonicalized_wyckoff}:{chemical_system}" - ) - - return list(protostructures) - - -def get_random_structure_for_protostructure( - protostructure_label: str, **kwargs -) -> Structure: - """Generate a random structure for a given prototype structure. - - NOTE that due to the random nature of the generation, the output structure - may be higher symmetry than the requested prototype structure. - - Args: - protostructure_label (str): label constructed as `aflow_label:chemsys` where - aflow_label is an AFLOW-style prototype label chemsys is the alphabetically - sorted chemical system. - **kwargs: Keyword arguments to pass to pyxtal().from_random() - """ - if not has_pyxtal: - raise ImportError("pyxtal is required for this function") - - aflow_label, chemsys = protostructure_label.split(":") - _, _, spg_num, *element_wyckoffs = aflow_label.split("_") - - sep_el_wyks = [ - split_alpha_numeric(re.sub(RE_WYCKOFF_NO_PREFIX, RE_SUBST_ONE_PREFIX, w)) - for w in element_wyckoffs - ] - - species_sites = [ - [ - site - for count, wyckoff_letter in zip(d["numeric"], d["alpha"]) - for site in [ - f"{wyckoff_multiplicity_dict[spg_num][wyckoff_letter]}{wyckoff_letter}" - ] - * int(count) - ] - for d in sep_el_wyks - ] - - species_counts = [ - sum( - wyckoff_multiplicity_dict[spg_num][wyckoff_letter] * int(count) - for count, wyckoff_letter in zip(d["numeric"], d["alpha"]) - ) - for d in sep_el_wyks - ] - - p = pyxtal() - p.from_random( - dim=3, - group=int(spg_num), - species=chemsys.split("-"), - numIons=species_counts, - sites=species_sites, - **kwargs, - ) - return p.to_pymatgen() diff --git a/aviary/wren/wyckoff-position-multiplicities.json b/aviary/wren/wyckoff-position-multiplicities.json deleted file mode 100644 index bd79dbab..00000000 --- a/aviary/wren/wyckoff-position-multiplicities.json +++ /dev/null @@ -1,2194 +0,0 @@ -{ - "0": {}, - "1": { - "a": 1 - }, - "2": { - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "3": { - "e": 2, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "4": { - "a": 2 - }, - "5": { - "c": 4, - "b": 2, - "a": 2 - }, - "6": { - "c": 2, - "b": 1, - "a": 1 - }, - "7": { - "a": 2 - }, - "8": { - "b": 4, - "a": 2 - }, - "9": { - "a": 4 - }, - "10": { - "o": 4, - "n": 2, - "m": 2, - "l": 2, - "k": 2, - "j": 2, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "11": { - "f": 4, - "e": 2, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "12": { - "j": 8, - "i": 4, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "13": { - "g": 4, - "f": 2, - "e": 2, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "14": { - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "15": { - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "16": { - "u": 4, - "t": 2, - "s": 2, - "r": 2, - "q": 2, - "p": 2, - "o": 2, - "n": 2, - "m": 2, - "l": 2, - "k": 2, - "j": 2, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "17": { - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "18": { - "c": 4, - "b": 2, - "a": 2 - }, - "19": { - "a": 4 - }, - "20": { - "c": 8, - "b": 4, - "a": 4 - }, - "21": { - "l": 8, - "k": 4, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "22": { - "k": 16, - "j": 8, - "i": 8, - "h": 8, - "g": 8, - "f": 8, - "e": 8, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "23": { - "k": 8, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "24": { - "d": 8, - "c": 4, - "b": 4, - "a": 4 - }, - "25": { - "i": 4, - "h": 2, - "g": 2, - "f": 2, - "e": 2, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "26": { - "c": 4, - "b": 2, - "a": 2 - }, - "27": { - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "28": { - "d": 4, - "c": 2, - "b": 2, - "a": 2 - }, - "29": { - "a": 4 - }, - "30": { - "c": 4, - "b": 2, - "a": 2 - }, - "31": { - "b": 4, - "a": 2 - }, - "32": { - "c": 4, - "b": 2, - "a": 2 - }, - "33": { - "a": 4 - }, - "34": { - "c": 4, - "b": 2, - "a": 2 - }, - "35": { - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "36": { - "b": 8, - "a": 4 - }, - "37": { - "d": 8, - "c": 4, - "b": 4, - "a": 4 - }, - "38": { - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "39": { - "d": 8, - "c": 4, - "b": 4, - "a": 4 - }, - "40": { - "c": 8, - "b": 4, - "a": 4 - }, - "41": { - "b": 8, - "a": 4 - }, - "42": { - "e": 16, - "d": 8, - "c": 8, - "b": 8, - "a": 4 - }, - "43": { - "b": 16, - "a": 8 - }, - "44": { - "e": 8, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "45": { - "c": 8, - "b": 4, - "a": 4 - }, - "46": { - "c": 8, - "b": 4, - "a": 4 - }, - "47": { - "A": 8, - "z": 4, - "y": 4, - "x": 4, - "w": 4, - "v": 4, - "u": 4, - "t": 2, - "s": 2, - "r": 2, - "q": 2, - "p": 2, - "o": 2, - "n": 2, - "m": 2, - "l": 2, - "k": 2, - "j": 2, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "48": { - "m": 8, - "l": 4, - "k": 4, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "49": { - "r": 8, - "q": 4, - "p": 4, - "o": 4, - "n": 4, - "m": 4, - "l": 4, - "k": 4, - "j": 4, - "i": 4, - "h": 2, - "g": 2, - "f": 2, - "e": 2, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "50": { - "m": 8, - "l": 4, - "k": 4, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "51": { - "l": 8, - "k": 4, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 2, - "e": 2, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "52": { - "e": 8, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "53": { - "i": 8, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "54": { - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "55": { - "i": 8, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "56": { - "e": 8, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "57": { - "e": 8, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "58": { - "h": 8, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "59": { - "g": 8, - "f": 4, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "60": { - "d": 8, - "c": 4, - "b": 4, - "a": 4 - }, - "61": { - "c": 8, - "b": 4, - "a": 4 - }, - "62": { - "d": 8, - "c": 4, - "b": 4, - "a": 4 - }, - "63": { - "h": 16, - "g": 8, - "f": 8, - "e": 8, - "d": 8, - "c": 4, - "b": 4, - "a": 4 - }, - "64": { - "g": 16, - "f": 8, - "e": 8, - "d": 8, - "c": 8, - "b": 4, - "a": 4 - }, - "65": { - "r": 16, - "q": 8, - "p": 8, - "o": 8, - "n": 8, - "m": 8, - "l": 4, - "k": 4, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "66": { - "m": 16, - "l": 8, - "k": 8, - "j": 8, - "i": 8, - "h": 8, - "g": 8, - "f": 4, - "e": 4, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "67": { - "o": 16, - "n": 8, - "m": 8, - "l": 8, - "k": 8, - "j": 8, - "i": 8, - "h": 8, - "g": 4, - "f": 4, - "e": 4, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "68": { - "i": 16, - "h": 8, - "g": 8, - "f": 8, - "e": 8, - "d": 8, - "c": 8, - "b": 4, - "a": 4 - }, - "69": { - "p": 32, - "o": 16, - "n": 16, - "m": 16, - "l": 16, - "k": 16, - "j": 16, - "i": 8, - "h": 8, - "g": 8, - "f": 8, - "e": 8, - "d": 8, - "c": 8, - "b": 4, - "a": 4 - }, - "70": { - "h": 32, - "g": 16, - "f": 16, - "e": 16, - "d": 16, - "c": 16, - "b": 8, - "a": 8 - }, - "71": { - "o": 16, - "n": 8, - "m": 8, - "l": 8, - "k": 8, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "72": { - "k": 16, - "j": 8, - "i": 8, - "h": 8, - "g": 8, - "f": 8, - "e": 8, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "73": { - "f": 16, - "e": 8, - "d": 8, - "c": 8, - "b": 8, - "a": 8 - }, - "74": { - "j": 16, - "i": 8, - "h": 8, - "g": 8, - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "75": { - "d": 4, - "c": 2, - "b": 1, - "a": 1 - }, - "76": { - "a": 4 - }, - "77": { - "d": 4, - "c": 2, - "b": 2, - "a": 2 - }, - "78": { - "a": 4 - }, - "79": { - "c": 8, - "b": 4, - "a": 2 - }, - "80": { - "b": 8, - "a": 4 - }, - "81": { - "h": 4, - "g": 2, - "f": 2, - "e": 2, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "82": { - "g": 8, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "83": { - "l": 8, - "k": 4, - "j": 4, - "i": 4, - "h": 2, - "g": 2, - "f": 2, - "e": 2, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "84": { - "k": 8, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 2, - "e": 2, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "85": { - "g": 8, - "f": 4, - "e": 4, - "d": 4, - "c": 2, - "b": 2, - "a": 2 - }, - "86": { - "g": 8, - "f": 4, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "87": { - "i": 16, - "h": 8, - "g": 8, - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "88": { - "f": 16, - "e": 8, - "d": 8, - "c": 8, - "b": 4, - "a": 4 - }, - "89": { - "p": 8, - "o": 4, - "n": 4, - "m": 4, - "l": 4, - "k": 4, - "j": 4, - "i": 4, - "h": 2, - "g": 2, - "f": 2, - "e": 2, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "90": { - "g": 8, - "f": 4, - "e": 4, - "d": 4, - "c": 2, - "b": 2, - "a": 2 - }, - "91": { - "d": 8, - "c": 4, - "b": 4, - "a": 4 - }, - "92": { - "b": 8, - "a": 4 - }, - "93": { - "p": 8, - "o": 4, - "n": 4, - "m": 4, - "l": 4, - "k": 4, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 2, - "e": 2, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "94": { - "g": 8, - "f": 4, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "95": { - "d": 8, - "c": 4, - "b": 4, - "a": 4 - }, - "96": { - "b": 8, - "a": 4 - }, - "97": { - "k": 16, - "j": 8, - "i": 8, - "h": 8, - "g": 8, - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "98": { - "g": 16, - "f": 8, - "e": 8, - "d": 8, - "c": 8, - "b": 4, - "a": 4 - }, - "99": { - "g": 8, - "f": 4, - "e": 4, - "d": 4, - "c": 2, - "b": 1, - "a": 1 - }, - "100": { - "d": 8, - "c": 4, - "b": 2, - "a": 2 - }, - "101": { - "e": 8, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "102": { - "d": 8, - "c": 4, - "b": 4, - "a": 2 - }, - "103": { - "d": 8, - "c": 4, - "b": 2, - "a": 2 - }, - "104": { - "c": 8, - "b": 4, - "a": 2 - }, - "105": { - "f": 8, - "e": 4, - "d": 4, - "c": 2, - "b": 2, - "a": 2 - }, - "106": { - "c": 8, - "b": 4, - "a": 4 - }, - "107": { - "e": 16, - "d": 8, - "c": 8, - "b": 4, - "a": 2 - }, - "108": { - "d": 16, - "c": 8, - "b": 4, - "a": 4 - }, - "109": { - "c": 16, - "b": 8, - "a": 4 - }, - "110": { - "b": 16, - "a": 8 - }, - "111": { - "o": 8, - "n": 4, - "m": 4, - "l": 4, - "k": 4, - "j": 4, - "i": 4, - "h": 2, - "g": 2, - "f": 2, - "e": 2, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "112": { - "n": 8, - "m": 4, - "l": 4, - "k": 4, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 2, - "e": 2, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "113": { - "f": 8, - "e": 4, - "d": 4, - "c": 2, - "b": 2, - "a": 2 - }, - "114": { - "e": 8, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "115": { - "l": 8, - "k": 4, - "j": 4, - "i": 4, - "h": 4, - "g": 2, - "f": 2, - "e": 2, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "116": { - "j": 8, - "i": 4, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "117": { - "i": 8, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "118": { - "i": 8, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "119": { - "j": 16, - "i": 8, - "h": 8, - "g": 8, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "120": { - "i": 16, - "h": 8, - "g": 8, - "f": 8, - "e": 8, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "121": { - "j": 16, - "i": 8, - "h": 8, - "g": 8, - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "122": { - "e": 16, - "d": 8, - "c": 8, - "b": 4, - "a": 4 - }, - "123": { - "u": 16, - "t": 8, - "s": 8, - "r": 8, - "q": 8, - "p": 8, - "o": 4, - "n": 4, - "m": 4, - "l": 4, - "k": 4, - "j": 4, - "i": 4, - "h": 2, - "g": 2, - "f": 2, - "e": 2, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "124": { - "n": 16, - "m": 8, - "l": 8, - "k": 8, - "j": 8, - "i": 8, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "125": { - "n": 16, - "m": 8, - "l": 8, - "k": 8, - "j": 8, - "i": 8, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "126": { - "k": 16, - "j": 8, - "i": 8, - "h": 8, - "g": 8, - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "127": { - "l": 16, - "k": 8, - "j": 8, - "i": 8, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "128": { - "i": 16, - "h": 8, - "g": 8, - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "129": { - "k": 16, - "j": 8, - "i": 8, - "h": 8, - "g": 8, - "f": 4, - "e": 4, - "d": 4, - "c": 2, - "b": 2, - "a": 2 - }, - "130": { - "g": 16, - "f": 8, - "e": 8, - "d": 8, - "c": 4, - "b": 4, - "a": 4 - }, - "131": { - "r": 16, - "q": 8, - "p": 8, - "o": 8, - "n": 8, - "m": 4, - "l": 4, - "k": 4, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 2, - "e": 2, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "132": { - "p": 16, - "o": 8, - "n": 8, - "m": 8, - "l": 8, - "k": 8, - "j": 4, - "i": 4, - "h": 4, - "g": 4, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "133": { - "k": 16, - "j": 8, - "i": 8, - "h": 8, - "g": 8, - "f": 8, - "e": 8, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "134": { - "n": 16, - "m": 8, - "l": 8, - "k": 8, - "j": 8, - "i": 8, - "h": 8, - "g": 4, - "f": 4, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "135": { - "i": 16, - "h": 8, - "g": 8, - "f": 8, - "e": 8, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "136": { - "k": 16, - "j": 8, - "i": 8, - "h": 8, - "g": 4, - "f": 4, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "137": { - "h": 16, - "g": 8, - "f": 8, - "e": 8, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "138": { - "j": 16, - "i": 8, - "h": 8, - "g": 8, - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "139": { - "o": 32, - "n": 16, - "m": 16, - "l": 16, - "k": 16, - "j": 8, - "i": 8, - "h": 8, - "g": 8, - "f": 8, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "140": { - "m": 32, - "l": 16, - "k": 16, - "j": 16, - "i": 16, - "h": 8, - "g": 8, - "f": 8, - "e": 8, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "141": { - "i": 32, - "h": 16, - "g": 16, - "f": 16, - "e": 8, - "d": 8, - "c": 8, - "b": 4, - "a": 4 - }, - "142": { - "g": 32, - "f": 16, - "e": 16, - "d": 16, - "c": 16, - "b": 8, - "a": 8 - }, - "143": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "144": { - "a": 3 - }, - "145": { - "a": 3 - }, - "146": { - "b": 9, - "a": 3 - }, - "147": { - "g": 6, - "f": 3, - "e": 3, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "148": { - "f": 18, - "e": 9, - "d": 9, - "c": 6, - "b": 3, - "a": 3 - }, - "149": { - "l": 6, - "k": 3, - "j": 3, - "i": 2, - "h": 2, - "g": 2, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "150": { - "g": 6, - "f": 3, - "e": 3, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "151": { - "c": 6, - "b": 3, - "a": 3 - }, - "152": { - "c": 6, - "b": 3, - "a": 3 - }, - "153": { - "c": 6, - "b": 3, - "a": 3 - }, - "154": { - "c": 6, - "b": 3, - "a": 3 - }, - "155": { - "f": 18, - "e": 9, - "d": 9, - "c": 6, - "b": 3, - "a": 3 - }, - "156": { - "e": 6, - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "157": { - "d": 6, - "c": 3, - "b": 2, - "a": 1 - }, - "158": { - "d": 6, - "c": 2, - "b": 2, - "a": 2 - }, - "159": { - "c": 6, - "b": 2, - "a": 2 - }, - "160": { - "c": 18, - "b": 9, - "a": 3 - }, - "161": { - "b": 18, - "a": 6 - }, - "162": { - "l": 12, - "k": 6, - "j": 6, - "i": 6, - "h": 4, - "g": 3, - "f": 3, - "e": 2, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "163": { - "i": 12, - "h": 6, - "g": 6, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "164": { - "j": 12, - "i": 6, - "h": 6, - "g": 6, - "f": 3, - "e": 3, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "165": { - "g": 12, - "f": 6, - "e": 6, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "166": { - "i": 36, - "h": 18, - "g": 18, - "f": 18, - "e": 9, - "d": 9, - "c": 6, - "b": 3, - "a": 3 - }, - "167": { - "f": 36, - "e": 18, - "d": 18, - "c": 12, - "b": 6, - "a": 6 - }, - "168": { - "d": 6, - "c": 3, - "b": 2, - "a": 1 - }, - "169": { - "a": 6 - }, - "170": { - "a": 6 - }, - "171": { - "c": 6, - "b": 3, - "a": 3 - }, - "172": { - "c": 6, - "b": 3, - "a": 3 - }, - "173": { - "c": 6, - "b": 2, - "a": 2 - }, - "174": { - "l": 6, - "k": 3, - "j": 3, - "i": 2, - "h": 2, - "g": 2, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "175": { - "l": 12, - "k": 6, - "j": 6, - "i": 6, - "h": 4, - "g": 3, - "f": 3, - "e": 2, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "176": { - "i": 12, - "h": 6, - "g": 6, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "177": { - "n": 12, - "m": 6, - "l": 6, - "k": 6, - "j": 6, - "i": 6, - "h": 4, - "g": 3, - "f": 3, - "e": 2, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "178": { - "c": 12, - "b": 6, - "a": 6 - }, - "179": { - "c": 12, - "b": 6, - "a": 6 - }, - "180": { - "k": 12, - "j": 6, - "i": 6, - "h": 6, - "g": 6, - "f": 6, - "e": 6, - "d": 3, - "c": 3, - "b": 3, - "a": 3 - }, - "181": { - "k": 12, - "j": 6, - "i": 6, - "h": 6, - "g": 6, - "f": 6, - "e": 6, - "d": 3, - "c": 3, - "b": 3, - "a": 3 - }, - "182": { - "i": 12, - "h": 6, - "g": 6, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "183": { - "f": 12, - "e": 6, - "d": 6, - "c": 3, - "b": 2, - "a": 1 - }, - "184": { - "d": 12, - "c": 6, - "b": 4, - "a": 2 - }, - "185": { - "d": 12, - "c": 6, - "b": 4, - "a": 2 - }, - "186": { - "d": 12, - "c": 6, - "b": 2, - "a": 2 - }, - "187": { - "o": 12, - "n": 6, - "m": 6, - "l": 6, - "k": 3, - "j": 3, - "i": 2, - "h": 2, - "g": 2, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "188": { - "l": 12, - "k": 6, - "j": 6, - "i": 4, - "h": 4, - "g": 4, - "f": 2, - "e": 2, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "189": { - "l": 12, - "k": 6, - "j": 6, - "i": 6, - "h": 4, - "g": 3, - "f": 3, - "e": 2, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "190": { - "i": 12, - "h": 6, - "g": 6, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "191": { - "r": 24, - "q": 12, - "p": 12, - "o": 12, - "n": 12, - "m": 6, - "l": 6, - "k": 6, - "j": 6, - "i": 6, - "h": 4, - "g": 3, - "f": 3, - "e": 2, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "192": { - "m": 24, - "l": 12, - "k": 12, - "j": 12, - "i": 12, - "h": 8, - "g": 6, - "f": 6, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "193": { - "l": 24, - "k": 12, - "j": 12, - "i": 12, - "h": 8, - "g": 6, - "f": 6, - "e": 4, - "d": 4, - "c": 4, - "b": 2, - "a": 2 - }, - "194": { - "l": 24, - "k": 12, - "j": 12, - "i": 12, - "h": 6, - "g": 6, - "f": 4, - "e": 4, - "d": 2, - "c": 2, - "b": 2, - "a": 2 - }, - "195": { - "j": 12, - "i": 6, - "h": 6, - "g": 6, - "f": 6, - "e": 4, - "d": 3, - "c": 3, - "b": 1, - "a": 1 - }, - "196": { - "h": 48, - "g": 24, - "f": 24, - "e": 16, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "197": { - "f": 24, - "e": 12, - "d": 12, - "c": 8, - "b": 6, - "a": 2 - }, - "198": { - "b": 12, - "a": 4 - }, - "199": { - "c": 24, - "b": 12, - "a": 8 - }, - "200": { - "l": 24, - "k": 12, - "j": 12, - "i": 8, - "h": 6, - "g": 6, - "f": 6, - "e": 6, - "d": 3, - "c": 3, - "b": 1, - "a": 1 - }, - "201": { - "h": 24, - "g": 12, - "f": 12, - "e": 8, - "d": 6, - "c": 4, - "b": 4, - "a": 2 - }, - "202": { - "i": 96, - "h": 48, - "g": 48, - "f": 32, - "e": 24, - "d": 24, - "c": 8, - "b": 4, - "a": 4 - }, - "203": { - "g": 96, - "f": 48, - "e": 32, - "d": 16, - "c": 16, - "b": 8, - "a": 8 - }, - "204": { - "h": 48, - "g": 24, - "f": 16, - "e": 12, - "d": 12, - "c": 8, - "b": 6, - "a": 2 - }, - "205": { - "d": 24, - "c": 8, - "b": 4, - "a": 4 - }, - "206": { - "e": 48, - "d": 24, - "c": 16, - "b": 8, - "a": 8 - }, - "207": { - "k": 24, - "j": 12, - "i": 12, - "h": 12, - "g": 8, - "f": 6, - "e": 6, - "d": 3, - "c": 3, - "b": 1, - "a": 1 - }, - "208": { - "m": 24, - "l": 12, - "k": 12, - "j": 12, - "i": 12, - "h": 12, - "g": 8, - "f": 6, - "e": 6, - "d": 6, - "c": 4, - "b": 4, - "a": 2 - }, - "209": { - "j": 96, - "i": 48, - "h": 48, - "g": 48, - "f": 32, - "e": 24, - "d": 24, - "c": 8, - "b": 4, - "a": 4 - }, - "210": { - "h": 96, - "g": 48, - "f": 48, - "e": 32, - "d": 16, - "c": 16, - "b": 8, - "a": 8 - }, - "211": { - "j": 48, - "i": 24, - "h": 24, - "g": 24, - "f": 16, - "e": 12, - "d": 12, - "c": 8, - "b": 6, - "a": 2 - }, - "212": { - "e": 24, - "d": 12, - "c": 8, - "b": 4, - "a": 4 - }, - "213": { - "e": 24, - "d": 12, - "c": 8, - "b": 4, - "a": 4 - }, - "214": { - "i": 48, - "h": 24, - "g": 24, - "f": 24, - "e": 16, - "d": 12, - "c": 12, - "b": 8, - "a": 8 - }, - "215": { - "j": 24, - "i": 12, - "h": 12, - "g": 6, - "f": 6, - "e": 4, - "d": 3, - "c": 3, - "b": 1, - "a": 1 - }, - "216": { - "i": 96, - "h": 48, - "g": 24, - "f": 24, - "e": 16, - "d": 4, - "c": 4, - "b": 4, - "a": 4 - }, - "217": { - "h": 48, - "g": 24, - "f": 24, - "e": 12, - "d": 12, - "c": 8, - "b": 6, - "a": 2 - }, - "218": { - "i": 24, - "h": 12, - "g": 12, - "f": 12, - "e": 8, - "d": 6, - "c": 6, - "b": 6, - "a": 2 - }, - "219": { - "h": 96, - "g": 48, - "f": 48, - "e": 32, - "d": 24, - "c": 24, - "b": 8, - "a": 8 - }, - "220": { - "e": 48, - "d": 24, - "c": 16, - "b": 12, - "a": 12 - }, - "221": { - "n": 48, - "m": 24, - "l": 24, - "k": 24, - "j": 12, - "i": 12, - "h": 12, - "g": 8, - "f": 6, - "e": 6, - "d": 3, - "c": 3, - "b": 1, - "a": 1 - }, - "222": { - "i": 48, - "h": 24, - "g": 24, - "f": 16, - "e": 12, - "d": 12, - "c": 8, - "b": 6, - "a": 2 - }, - "223": { - "l": 48, - "k": 24, - "j": 24, - "i": 16, - "h": 12, - "g": 12, - "f": 12, - "e": 8, - "d": 6, - "c": 6, - "b": 6, - "a": 2 - }, - "224": { - "l": 48, - "k": 24, - "j": 24, - "i": 24, - "h": 24, - "g": 12, - "f": 12, - "e": 8, - "d": 6, - "c": 4, - "b": 4, - "a": 2 - }, - "225": { - "l": 192, - "k": 96, - "j": 96, - "i": 48, - "h": 48, - "g": 48, - "f": 32, - "e": 24, - "d": 24, - "c": 8, - "b": 4, - "a": 4 - }, - "226": { - "j": 192, - "i": 96, - "h": 96, - "g": 64, - "f": 48, - "e": 48, - "d": 24, - "c": 24, - "b": 8, - "a": 8 - }, - "227": { - "i": 192, - "h": 96, - "g": 96, - "f": 48, - "e": 32, - "d": 16, - "c": 16, - "b": 8, - "a": 8 - }, - "228": { - "h": 192, - "g": 96, - "f": 96, - "e": 64, - "d": 48, - "c": 32, - "b": 32, - "a": 16 - }, - "229": { - "l": 96, - "k": 48, - "j": 48, - "i": 48, - "h": 24, - "g": 24, - "f": 16, - "e": 12, - "d": 12, - "c": 8, - "b": 6, - "a": 2 - }, - "230": { - "h": 96, - "g": 48, - "f": 48, - "e": 32, - "d": 24, - "c": 24, - "b": 16, - "a": 16 - } -} diff --git a/aviary/wren/wyckoff-position-params.json b/aviary/wren/wyckoff-position-params.json deleted file mode 100644 index 6f655cd3..00000000 --- a/aviary/wren/wyckoff-position-params.json +++ /dev/null @@ -1,2193 +0,0 @@ -{ - "1": { - "a": 3 - }, - "2": { - "i": 3, - "h": 0, - "g": 0, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "3": { - "e": 3, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "4": { - "a": 3 - }, - "5": { - "c": 3, - "b": 1, - "a": 1 - }, - "6": { - "c": 3, - "b": 2, - "a": 2 - }, - "7": { - "a": 3 - }, - "8": { - "b": 3, - "a": 2 - }, - "9": { - "a": 3 - }, - "10": { - "o": 3, - "n": 2, - "m": 2, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 0, - "g": 0, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "11": { - "f": 3, - "e": 2, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "12": { - "j": 3, - "i": 2, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "13": { - "g": 3, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "14": { - "e": 3, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "15": { - "f": 3, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "16": { - "u": 3, - "t": 1, - "s": 1, - "r": 1, - "q": 1, - "p": 1, - "o": 1, - "n": 1, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 0, - "g": 0, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "17": { - "e": 3, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "18": { - "c": 3, - "b": 1, - "a": 1 - }, - "19": { - "a": 3 - }, - "20": { - "c": 3, - "b": 1, - "a": 1 - }, - "21": { - "l": 3, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "22": { - "k": 3, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "23": { - "k": 3, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "24": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "25": { - "i": 3, - "h": 2, - "g": 2, - "f": 2, - "e": 2, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "26": { - "c": 3, - "b": 2, - "a": 2 - }, - "27": { - "e": 3, - "d": 1, - "c": 1, - "b": 1, - "a": 1 - }, - "28": { - "d": 3, - "c": 2, - "b": 1, - "a": 1 - }, - "29": { - "a": 3 - }, - "30": { - "c": 3, - "b": 1, - "a": 1 - }, - "31": { - "b": 3, - "a": 2 - }, - "32": { - "c": 3, - "b": 1, - "a": 1 - }, - "33": { - "a": 3 - }, - "34": { - "c": 3, - "b": 1, - "a": 1 - }, - "35": { - "f": 3, - "e": 2, - "d": 2, - "c": 1, - "b": 1, - "a": 1 - }, - "36": { - "b": 3, - "a": 2 - }, - "37": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "38": { - "f": 3, - "e": 2, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "39": { - "d": 3, - "c": 2, - "b": 1, - "a": 1 - }, - "40": { - "c": 3, - "b": 2, - "a": 1 - }, - "41": { - "b": 3, - "a": 1 - }, - "42": { - "e": 3, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "43": { - "b": 3, - "a": 1 - }, - "44": { - "e": 3, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "45": { - "c": 3, - "b": 1, - "a": 1 - }, - "46": { - "c": 3, - "b": 2, - "a": 1 - }, - "47": { - "A": 3, - "z": 2, - "y": 2, - "x": 2, - "w": 2, - "v": 2, - "u": 2, - "t": 1, - "s": 1, - "r": 1, - "q": 1, - "p": 1, - "o": 1, - "n": 1, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 0, - "g": 0, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "48": { - "m": 3, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "49": { - "r": 3, - "q": 2, - "p": 1, - "o": 1, - "n": 1, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 0, - "g": 0, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "50": { - "m": 3, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "51": { - "l": 3, - "k": 2, - "j": 2, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "52": { - "e": 3, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "53": { - "i": 3, - "h": 2, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "54": { - "f": 3, - "e": 1, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "55": { - "i": 3, - "h": 2, - "g": 2, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "56": { - "e": 3, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "57": { - "e": 3, - "d": 2, - "c": 1, - "b": 0, - "a": 0 - }, - "58": { - "h": 3, - "g": 2, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "59": { - "g": 3, - "f": 2, - "e": 2, - "d": 0, - "c": 0, - "b": 1, - "a": 1 - }, - "60": { - "d": 3, - "c": 1, - "b": 0, - "a": 0 - }, - "61": { - "c": 3, - "b": 0, - "a": 0 - }, - "62": { - "d": 3, - "c": 2, - "b": 0, - "a": 0 - }, - "63": { - "h": 3, - "g": 2, - "f": 2, - "e": 1, - "d": 0, - "c": 1, - "b": 0, - "a": 0 - }, - "64": { - "g": 3, - "f": 2, - "e": 1, - "d": 1, - "c": 0, - "b": 0, - "a": 0 - }, - "65": { - "r": 3, - "q": 2, - "p": 2, - "o": 2, - "n": 2, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "66": { - "m": 3, - "l": 2, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "67": { - "o": 3, - "n": 2, - "m": 2, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "68": { - "i": 3, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "69": { - "p": 3, - "o": 2, - "n": 2, - "m": 2, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "70": { - "h": 3, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "71": { - "o": 3, - "n": 2, - "m": 2, - "l": 2, - "k": 0, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "72": { - "k": 3, - "j": 2, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "73": { - "f": 3, - "e": 1, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "74": { - "j": 3, - "i": 2, - "h": 2, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "75": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "76": { - "a": 3 - }, - "77": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "78": { - "a": 3 - }, - "79": { - "c": 3, - "b": 1, - "a": 1 - }, - "80": { - "b": 3, - "a": 1 - }, - "81": { - "h": 3, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "82": { - "g": 3, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "83": { - "l": 3, - "k": 2, - "j": 2, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "84": { - "k": 3, - "j": 2, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "85": { - "g": 3, - "f": 1, - "e": 0, - "d": 0, - "c": 1, - "b": 0, - "a": 0 - }, - "86": { - "g": 3, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "87": { - "i": 3, - "h": 2, - "g": 1, - "f": 0, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "88": { - "f": 3, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "89": { - "p": 3, - "o": 1, - "n": 1, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "90": { - "g": 3, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "91": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "92": { - "b": 3, - "a": 1 - }, - "93": { - "p": 3, - "o": 1, - "n": 1, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "94": { - "g": 3, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "95": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "96": { - "b": 3, - "a": 1 - }, - "97": { - "k": 3, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "98": { - "g": 3, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "99": { - "g": 3, - "f": 2, - "e": 2, - "d": 2, - "c": 1, - "b": 1, - "a": 1 - }, - "100": { - "d": 3, - "c": 2, - "b": 1, - "a": 1 - }, - "101": { - "e": 3, - "d": 2, - "c": 1, - "b": 1, - "a": 1 - }, - "102": { - "d": 3, - "c": 2, - "b": 1, - "a": 1 - }, - "103": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "104": { - "c": 3, - "b": 1, - "a": 1 - }, - "105": { - "f": 3, - "e": 2, - "d": 2, - "c": 1, - "b": 1, - "a": 1 - }, - "106": { - "c": 3, - "b": 1, - "a": 1 - }, - "107": { - "e": 3, - "d": 2, - "c": 2, - "b": 1, - "a": 1 - }, - "108": { - "d": 3, - "c": 2, - "b": 1, - "a": 1 - }, - "109": { - "c": 3, - "b": 2, - "a": 1 - }, - "110": { - "b": 3, - "a": 1 - }, - "111": { - "o": 3, - "n": 2, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "112": { - "n": 3, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "113": { - "f": 3, - "e": 2, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "114": { - "e": 3, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "115": { - "l": 3, - "k": 2, - "j": 2, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "116": { - "j": 3, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "117": { - "i": 3, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "118": { - "i": 3, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "119": { - "j": 3, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "120": { - "i": 3, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "121": { - "j": 3, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "122": { - "e": 3, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "123": { - "u": 3, - "t": 2, - "s": 2, - "r": 2, - "q": 2, - "p": 2, - "o": 1, - "n": 1, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "124": { - "n": 3, - "m": 2, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "125": { - "n": 3, - "m": 2, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "126": { - "k": 3, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "127": { - "l": 3, - "k": 2, - "j": 2, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "128": { - "i": 3, - "h": 2, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "129": { - "k": 3, - "j": 2, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 0, - "d": 0, - "c": 1, - "b": 0, - "a": 0 - }, - "130": { - "g": 3, - "f": 1, - "e": 1, - "d": 0, - "c": 1, - "b": 0, - "a": 0 - }, - "131": { - "r": 3, - "q": 2, - "p": 2, - "o": 2, - "n": 1, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "132": { - "p": 3, - "o": 2, - "n": 2, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "133": { - "k": 3, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "134": { - "n": 3, - "m": 2, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "135": { - "i": 3, - "h": 2, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "136": { - "k": 3, - "j": 2, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "137": { - "h": 3, - "g": 2, - "f": 1, - "e": 0, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "138": { - "j": 3, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "139": { - "o": 3, - "n": 2, - "m": 2, - "l": 2, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "140": { - "m": 3, - "l": 2, - "k": 2, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "141": { - "i": 3, - "h": 2, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "142": { - "g": 3, - "f": 1, - "e": 1, - "d": 1, - "c": 0, - "b": 0, - "a": 0 - }, - "143": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "144": { - "a": 3 - }, - "145": { - "a": 3 - }, - "146": { - "b": 3, - "a": 1 - }, - "147": { - "g": 3, - "f": 0, - "e": 0, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "148": { - "f": 3, - "e": 0, - "d": 0, - "c": 1, - "b": 0, - "a": 0 - }, - "149": { - "l": 3, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "150": { - "g": 3, - "f": 1, - "e": 1, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "151": { - "c": 3, - "b": 1, - "a": 1 - }, - "152": { - "c": 3, - "b": 1, - "a": 1 - }, - "153": { - "c": 3, - "b": 1, - "a": 1 - }, - "154": { - "c": 3, - "b": 1, - "a": 1 - }, - "155": { - "f": 3, - "e": 1, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "156": { - "e": 3, - "d": 2, - "c": 1, - "b": 1, - "a": 1 - }, - "157": { - "d": 3, - "c": 2, - "b": 1, - "a": 1 - }, - "158": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "159": { - "c": 3, - "b": 1, - "a": 1 - }, - "160": { - "c": 3, - "b": 2, - "a": 1 - }, - "161": { - "b": 3, - "a": 1 - }, - "162": { - "l": 3, - "k": 2, - "j": 1, - "i": 1, - "h": 1, - "g": 0, - "f": 0, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "163": { - "i": 3, - "h": 1, - "g": 0, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "164": { - "j": 3, - "i": 2, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "165": { - "g": 3, - "f": 1, - "e": 0, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "166": { - "i": 3, - "h": 2, - "g": 1, - "f": 1, - "e": 0, - "d": 0, - "c": 1, - "b": 0, - "a": 0 - }, - "167": { - "f": 3, - "e": 1, - "d": 0, - "c": 1, - "b": 0, - "a": 0 - }, - "168": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "169": { - "a": 3 - }, - "170": { - "a": 3 - }, - "171": { - "c": 3, - "b": 1, - "a": 1 - }, - "172": { - "c": 3, - "b": 1, - "a": 1 - }, - "173": { - "c": 3, - "b": 1, - "a": 1 - }, - "174": { - "l": 3, - "k": 2, - "j": 2, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "175": { - "l": 3, - "k": 2, - "j": 2, - "i": 1, - "h": 1, - "g": 0, - "f": 0, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "176": { - "i": 3, - "h": 2, - "g": 0, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "177": { - "n": 3, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 0, - "f": 0, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "178": { - "c": 3, - "b": 1, - "a": 1 - }, - "179": { - "c": 3, - "b": 1, - "a": 1 - }, - "180": { - "k": 3, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "181": { - "k": 3, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "182": { - "i": 3, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "183": { - "f": 3, - "e": 2, - "d": 2, - "c": 1, - "b": 1, - "a": 1 - }, - "184": { - "d": 3, - "c": 1, - "b": 1, - "a": 1 - }, - "185": { - "d": 3, - "c": 2, - "b": 1, - "a": 1 - }, - "186": { - "d": 3, - "c": 2, - "b": 1, - "a": 1 - }, - "187": { - "o": 3, - "n": 2, - "m": 2, - "l": 2, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "188": { - "l": 3, - "k": 2, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "189": { - "l": 3, - "k": 2, - "j": 2, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "190": { - "i": 3, - "h": 2, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "191": { - "r": 3, - "q": 2, - "p": 2, - "o": 2, - "n": 2, - "m": 1, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 0, - "f": 0, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "192": { - "m": 3, - "l": 2, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 0, - "f": 0, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "193": { - "l": 3, - "k": 2, - "j": 2, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "194": { - "l": 3, - "k": 2, - "j": 2, - "i": 1, - "h": 1, - "g": 0, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "195": { - "j": 3, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "196": { - "h": 3, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "197": { - "f": 3, - "e": 1, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "198": { - "b": 3, - "a": 1 - }, - "199": { - "c": 3, - "b": 1, - "a": 1 - }, - "200": { - "l": 3, - "k": 2, - "j": 2, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "201": { - "h": 3, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "202": { - "i": 3, - "h": 2, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "203": { - "g": 3, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "204": { - "h": 3, - "g": 2, - "f": 1, - "e": 1, - "d": 1, - "c": 0, - "b": 0, - "a": 0 - }, - "205": { - "d": 3, - "c": 1, - "b": 0, - "a": 0 - }, - "206": { - "e": 3, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "207": { - "k": 3, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "208": { - "m": 3, - "l": 1, - "k": 1, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "209": { - "j": 3, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "210": { - "h": 3, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "211": { - "j": 3, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "212": { - "e": 3, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "213": { - "e": 3, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "214": { - "i": 3, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "215": { - "j": 3, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "216": { - "i": 3, - "h": 2, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "217": { - "h": 3, - "g": 2, - "f": 1, - "e": 1, - "d": 0, - "c": 1, - "b": 0, - "a": 0 - }, - "218": { - "i": 3, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "219": { - "h": 3, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "220": { - "e": 3, - "d": 1, - "c": 1, - "b": 0, - "a": 0 - }, - "221": { - "n": 3, - "m": 2, - "l": 2, - "k": 2, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "222": { - "i": 3, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "223": { - "l": 3, - "k": 2, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 0, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "224": { - "l": 3, - "k": 2, - "j": 1, - "i": 1, - "h": 1, - "g": 1, - "f": 0, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "225": { - "l": 3, - "k": 2, - "j": 2, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "226": { - "j": 3, - "i": 2, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "227": { - "i": 3, - "h": 1, - "g": 2, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "228": { - "h": 3, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "229": { - "l": 3, - "k": 2, - "j": 2, - "i": 1, - "h": 1, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - }, - "230": { - "h": 3, - "g": 1, - "f": 1, - "e": 1, - "d": 0, - "c": 0, - "b": 0, - "a": 0 - } -} diff --git a/aviary/wren/wyckoff-position-relabelings.json b/aviary/wren/wyckoff-position-relabelings.json deleted file mode 100644 index d0ed532d..00000000 --- a/aviary/wren/wyckoff-position-relabelings.json +++ /dev/null @@ -1,12005 +0,0 @@ -{ - "1": [ - { - "97": "a" - } - ], - "2": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "g", - "100": "f", - "101": "h", - "102": "d", - "103": "c", - "104": "e", - "105": "i" - }, - { - "97": "c", - "98": "g", - "99": "a", - "100": "e", - "101": "d", - "102": "h", - "103": "b", - "104": "f", - "105": "i" - }, - { - "97": "d", - "98": "f", - "99": "e", - "100": "a", - "101": "c", - "102": "b", - "103": "h", - "104": "g", - "105": "i" - }, - { - "97": "e", - "98": "h", - "99": "d", - "100": "c", - "101": "a", - "102": "g", - "103": "f", - "104": "b", - "105": "i" - }, - { - "97": "f", - "98": "d", - "99": "h", - "100": "b", - "101": "g", - "102": "a", - "103": "e", - "104": "c", - "105": "i" - }, - { - "97": "g", - "98": "c", - "99": "b", - "100": "h", - "101": "f", - "102": "e", - "103": "a", - "104": "d", - "105": "i" - }, - { - "97": "h", - "98": "e", - "99": "f", - "100": "g", - "101": "b", - "102": "c", - "103": "d", - "104": "a", - "105": "i" - } - ], - "3": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e" - } - ], - "4": [ - { - "97": "a" - } - ], - "5": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "6": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "7": [ - { - "97": "a" - } - ], - "8": [ - { - "97": "a", - "98": "b" - } - ], - "9": [ - { - "97": "a" - } - ], - "10": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "b", - "98": "a", - "99": "f", - "100": "e", - "101": "d", - "102": "c", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "n", - "110": "m", - "111": "o" - }, - { - "97": "c", - "98": "f", - "99": "a", - "100": "g", - "101": "h", - "102": "b", - "103": "d", - "104": "e", - "105": "k", - "106": "l", - "107": "i", - "108": "j", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "d", - "98": "e", - "99": "g", - "100": "a", - "101": "b", - "102": "h", - "103": "c", - "104": "f", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "e", - "98": "d", - "99": "h", - "100": "b", - "101": "a", - "102": "g", - "103": "f", - "104": "c", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "n", - "110": "m", - "111": "o" - }, - { - "97": "f", - "98": "c", - "99": "b", - "100": "h", - "101": "g", - "102": "a", - "103": "e", - "104": "d", - "105": "k", - "106": "l", - "107": "i", - "108": "j", - "109": "n", - "110": "m", - "111": "o" - }, - { - "97": "g", - "98": "h", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "a", - "104": "b", - "105": "l", - "106": "k", - "107": "j", - "108": "i", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "h", - "98": "g", - "99": "e", - "100": "f", - "101": "c", - "102": "d", - "103": "b", - "104": "a", - "105": "l", - "106": "k", - "107": "j", - "108": "i", - "109": "n", - "110": "m", - "111": "o" - } - ], - "11": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e", - "102": "f" - } - ], - "12": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - } - ], - "13": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "g" - } - ], - "14": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e" - } - ], - "15": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "e", - "102": "f" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "e", - "102": "f" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e", - "102": "f" - } - ], - "16": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p", - "113": "q", - "114": "r", - "115": "s", - "116": "t", - "117": "u" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "l", - "109": "q", - "110": "s", - "111": "r", - "112": "t", - "113": "m", - "114": "o", - "115": "n", - "116": "p", - "117": "u" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "m", - "106": "n", - "107": "o", - "108": "p", - "109": "i", - "110": "j", - "111": "k", - "112": "l", - "113": "q", - "114": "s", - "115": "r", - "116": "t", - "117": "u" - }, - { - "97": "a", - "98": "c", - "99": "d", - "100": "b", - "101": "g", - "102": "e", - "103": "f", - "104": "h", - "105": "m", - "106": "o", - "107": "n", - "108": "p", - "109": "q", - "110": "r", - "111": "s", - "112": "t", - "113": "i", - "114": "k", - "115": "j", - "116": "l", - "117": "u" - }, - { - "97": "a", - "98": "d", - "99": "b", - "100": "c", - "101": "f", - "102": "g", - "103": "e", - "104": "h", - "105": "q", - "106": "s", - "107": "r", - "108": "t", - "109": "i", - "110": "k", - "111": "j", - "112": "l", - "113": "m", - "114": "n", - "115": "o", - "116": "p", - "117": "u" - }, - { - "97": "a", - "98": "d", - "99": "c", - "100": "b", - "101": "g", - "102": "f", - "103": "e", - "104": "h", - "105": "q", - "106": "r", - "107": "s", - "108": "t", - "109": "m", - "110": "o", - "111": "n", - "112": "p", - "113": "i", - "114": "j", - "115": "k", - "116": "l", - "117": "u" - }, - { - "97": "b", - "98": "a", - "99": "e", - "100": "f", - "101": "c", - "102": "d", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "o", - "110": "p", - "111": "m", - "112": "n", - "113": "r", - "114": "q", - "115": "t", - "116": "s", - "117": "u" - }, - { - "97": "b", - "98": "a", - "99": "f", - "100": "e", - "101": "d", - "102": "c", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "l", - "109": "r", - "110": "t", - "111": "q", - "112": "s", - "113": "o", - "114": "m", - "115": "p", - "116": "n", - "117": "u" - }, - { - "97": "b", - "98": "e", - "99": "a", - "100": "f", - "101": "c", - "102": "h", - "103": "d", - "104": "g", - "105": "o", - "106": "p", - "107": "m", - "108": "n", - "109": "i", - "110": "j", - "111": "k", - "112": "l", - "113": "r", - "114": "t", - "115": "q", - "116": "s", - "117": "u" - }, - { - "97": "b", - "98": "e", - "99": "f", - "100": "a", - "101": "h", - "102": "c", - "103": "d", - "104": "g", - "105": "o", - "106": "m", - "107": "p", - "108": "n", - "109": "r", - "110": "q", - "111": "t", - "112": "s", - "113": "i", - "114": "k", - "115": "j", - "116": "l", - "117": "u" - }, - { - "97": "b", - "98": "f", - "99": "a", - "100": "e", - "101": "d", - "102": "h", - "103": "c", - "104": "g", - "105": "r", - "106": "t", - "107": "q", - "108": "s", - "109": "i", - "110": "k", - "111": "j", - "112": "l", - "113": "o", - "114": "p", - "115": "m", - "116": "n", - "117": "u" - }, - { - "97": "b", - "98": "f", - "99": "e", - "100": "a", - "101": "h", - "102": "d", - "103": "c", - "104": "g", - "105": "r", - "106": "q", - "107": "t", - "108": "s", - "109": "o", - "110": "m", - "111": "p", - "112": "n", - "113": "i", - "114": "j", - "115": "k", - "116": "l", - "117": "u" - }, - { - "97": "c", - "98": "a", - "99": "e", - "100": "g", - "101": "b", - "102": "d", - "103": "h", - "104": "f", - "105": "m", - "106": "n", - "107": "o", - "108": "p", - "109": "k", - "110": "l", - "111": "i", - "112": "j", - "113": "s", - "114": "q", - "115": "t", - "116": "r", - "117": "u" - }, - { - "97": "c", - "98": "a", - "99": "g", - "100": "e", - "101": "d", - "102": "b", - "103": "h", - "104": "f", - "105": "m", - "106": "o", - "107": "n", - "108": "p", - "109": "s", - "110": "t", - "111": "q", - "112": "r", - "113": "k", - "114": "i", - "115": "l", - "116": "j", - "117": "u" - }, - { - "97": "c", - "98": "e", - "99": "a", - "100": "g", - "101": "b", - "102": "h", - "103": "d", - "104": "f", - "105": "k", - "106": "l", - "107": "i", - "108": "j", - "109": "m", - "110": "n", - "111": "o", - "112": "p", - "113": "s", - "114": "t", - "115": "q", - "116": "r", - "117": "u" - }, - { - "97": "c", - "98": "e", - "99": "g", - "100": "a", - "101": "h", - "102": "b", - "103": "d", - "104": "f", - "105": "k", - "106": "i", - "107": "l", - "108": "j", - "109": "s", - "110": "q", - "111": "t", - "112": "r", - "113": "m", - "114": "o", - "115": "n", - "116": "p", - "117": "u" - }, - { - "97": "c", - "98": "g", - "99": "a", - "100": "e", - "101": "d", - "102": "h", - "103": "b", - "104": "f", - "105": "s", - "106": "t", - "107": "q", - "108": "r", - "109": "m", - "110": "o", - "111": "n", - "112": "p", - "113": "k", - "114": "l", - "115": "i", - "116": "j", - "117": "u" - }, - { - "97": "c", - "98": "g", - "99": "e", - "100": "a", - "101": "h", - "102": "d", - "103": "b", - "104": "f", - "105": "s", - "106": "q", - "107": "t", - "108": "r", - "109": "k", - "110": "i", - "111": "l", - "112": "j", - "113": "m", - "114": "n", - "115": "o", - "116": "p", - "117": "u" - }, - { - "97": "d", - "98": "a", - "99": "f", - "100": "g", - "101": "b", - "102": "c", - "103": "h", - "104": "e", - "105": "q", - "106": "s", - "107": "r", - "108": "t", - "109": "j", - "110": "l", - "111": "i", - "112": "k", - "113": "n", - "114": "m", - "115": "p", - "116": "o", - "117": "u" - }, - { - "97": "d", - "98": "a", - "99": "g", - "100": "f", - "101": "c", - "102": "b", - "103": "h", - "104": "e", - "105": "q", - "106": "r", - "107": "s", - "108": "t", - "109": "n", - "110": "p", - "111": "m", - "112": "o", - "113": "j", - "114": "i", - "115": "l", - "116": "k", - "117": "u" - }, - { - "97": "d", - "98": "f", - "99": "a", - "100": "g", - "101": "b", - "102": "h", - "103": "c", - "104": "e", - "105": "j", - "106": "l", - "107": "i", - "108": "k", - "109": "q", - "110": "s", - "111": "r", - "112": "t", - "113": "n", - "114": "p", - "115": "m", - "116": "o", - "117": "u" - }, - { - "97": "d", - "98": "f", - "99": "g", - "100": "a", - "101": "h", - "102": "b", - "103": "c", - "104": "e", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "n", - "110": "m", - "111": "p", - "112": "o", - "113": "q", - "114": "r", - "115": "s", - "116": "t", - "117": "u" - }, - { - "97": "d", - "98": "g", - "99": "a", - "100": "f", - "101": "c", - "102": "h", - "103": "b", - "104": "e", - "105": "n", - "106": "p", - "107": "m", - "108": "o", - "109": "q", - "110": "r", - "111": "s", - "112": "t", - "113": "j", - "114": "l", - "115": "i", - "116": "k", - "117": "u" - }, - { - "97": "d", - "98": "g", - "99": "f", - "100": "a", - "101": "h", - "102": "c", - "103": "b", - "104": "e", - "105": "n", - "106": "m", - "107": "p", - "108": "o", - "109": "j", - "110": "i", - "111": "l", - "112": "k", - "113": "q", - "114": "s", - "115": "r", - "116": "t", - "117": "u" - }, - { - "97": "e", - "98": "b", - "99": "c", - "100": "h", - "101": "a", - "102": "f", - "103": "g", - "104": "d", - "105": "o", - "106": "p", - "107": "m", - "108": "n", - "109": "k", - "110": "l", - "111": "i", - "112": "j", - "113": "t", - "114": "r", - "115": "s", - "116": "q", - "117": "u" - }, - { - "97": "e", - "98": "b", - "99": "h", - "100": "c", - "101": "f", - "102": "a", - "103": "g", - "104": "d", - "105": "o", - "106": "m", - "107": "p", - "108": "n", - "109": "t", - "110": "s", - "111": "r", - "112": "q", - "113": "k", - "114": "i", - "115": "l", - "116": "j", - "117": "u" - }, - { - "97": "e", - "98": "c", - "99": "b", - "100": "h", - "101": "a", - "102": "g", - "103": "f", - "104": "d", - "105": "k", - "106": "l", - "107": "i", - "108": "j", - "109": "o", - "110": "p", - "111": "m", - "112": "n", - "113": "t", - "114": "s", - "115": "r", - "116": "q", - "117": "u" - }, - { - "97": "e", - "98": "c", - "99": "h", - "100": "b", - "101": "g", - "102": "a", - "103": "f", - "104": "d", - "105": "k", - "106": "i", - "107": "l", - "108": "j", - "109": "t", - "110": "r", - "111": "s", - "112": "q", - "113": "o", - "114": "m", - "115": "p", - "116": "n", - "117": "u" - }, - { - "97": "e", - "98": "h", - "99": "b", - "100": "c", - "101": "f", - "102": "g", - "103": "a", - "104": "d", - "105": "t", - "106": "s", - "107": "r", - "108": "q", - "109": "o", - "110": "m", - "111": "p", - "112": "n", - "113": "k", - "114": "l", - "115": "i", - "116": "j", - "117": "u" - }, - { - "97": "e", - "98": "h", - "99": "c", - "100": "b", - "101": "g", - "102": "f", - "103": "a", - "104": "d", - "105": "t", - "106": "r", - "107": "s", - "108": "q", - "109": "k", - "110": "i", - "111": "l", - "112": "j", - "113": "o", - "114": "p", - "115": "m", - "116": "n", - "117": "u" - }, - { - "97": "f", - "98": "b", - "99": "d", - "100": "h", - "101": "a", - "102": "e", - "103": "g", - "104": "c", - "105": "r", - "106": "t", - "107": "q", - "108": "s", - "109": "j", - "110": "l", - "111": "i", - "112": "k", - "113": "p", - "114": "o", - "115": "n", - "116": "m", - "117": "u" - }, - { - "97": "f", - "98": "b", - "99": "h", - "100": "d", - "101": "e", - "102": "a", - "103": "g", - "104": "c", - "105": "r", - "106": "q", - "107": "t", - "108": "s", - "109": "p", - "110": "n", - "111": "o", - "112": "m", - "113": "j", - "114": "i", - "115": "l", - "116": "k", - "117": "u" - }, - { - "97": "f", - "98": "d", - "99": "b", - "100": "h", - "101": "a", - "102": "g", - "103": "e", - "104": "c", - "105": "j", - "106": "l", - "107": "i", - "108": "k", - "109": "r", - "110": "t", - "111": "q", - "112": "s", - "113": "p", - "114": "n", - "115": "o", - "116": "m", - "117": "u" - }, - { - "97": "f", - "98": "d", - "99": "h", - "100": "b", - "101": "g", - "102": "a", - "103": "e", - "104": "c", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "p", - "110": "o", - "111": "n", - "112": "m", - "113": "r", - "114": "q", - "115": "t", - "116": "s", - "117": "u" - }, - { - "97": "f", - "98": "h", - "99": "b", - "100": "d", - "101": "e", - "102": "g", - "103": "a", - "104": "c", - "105": "p", - "106": "n", - "107": "o", - "108": "m", - "109": "r", - "110": "q", - "111": "t", - "112": "s", - "113": "j", - "114": "l", - "115": "i", - "116": "k", - "117": "u" - }, - { - "97": "f", - "98": "h", - "99": "d", - "100": "b", - "101": "g", - "102": "e", - "103": "a", - "104": "c", - "105": "p", - "106": "o", - "107": "n", - "108": "m", - "109": "j", - "110": "i", - "111": "l", - "112": "k", - "113": "r", - "114": "t", - "115": "q", - "116": "s", - "117": "u" - }, - { - "97": "g", - "98": "c", - "99": "d", - "100": "h", - "101": "a", - "102": "e", - "103": "f", - "104": "b", - "105": "s", - "106": "t", - "107": "q", - "108": "r", - "109": "n", - "110": "p", - "111": "m", - "112": "o", - "113": "l", - "114": "k", - "115": "j", - "116": "i", - "117": "u" - }, - { - "97": "g", - "98": "c", - "99": "h", - "100": "d", - "101": "e", - "102": "a", - "103": "f", - "104": "b", - "105": "s", - "106": "q", - "107": "t", - "108": "r", - "109": "l", - "110": "j", - "111": "k", - "112": "i", - "113": "n", - "114": "m", - "115": "p", - "116": "o", - "117": "u" - }, - { - "97": "g", - "98": "d", - "99": "c", - "100": "h", - "101": "a", - "102": "f", - "103": "e", - "104": "b", - "105": "n", - "106": "p", - "107": "m", - "108": "o", - "109": "s", - "110": "t", - "111": "q", - "112": "r", - "113": "l", - "114": "j", - "115": "k", - "116": "i", - "117": "u" - }, - { - "97": "g", - "98": "d", - "99": "h", - "100": "c", - "101": "f", - "102": "a", - "103": "e", - "104": "b", - "105": "n", - "106": "m", - "107": "p", - "108": "o", - "109": "l", - "110": "k", - "111": "j", - "112": "i", - "113": "s", - "114": "q", - "115": "t", - "116": "r", - "117": "u" - }, - { - "97": "g", - "98": "h", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "a", - "104": "b", - "105": "l", - "106": "j", - "107": "k", - "108": "i", - "109": "s", - "110": "q", - "111": "t", - "112": "r", - "113": "n", - "114": "p", - "115": "m", - "116": "o", - "117": "u" - }, - { - "97": "g", - "98": "h", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "a", - "104": "b", - "105": "l", - "106": "k", - "107": "j", - "108": "i", - "109": "n", - "110": "m", - "111": "p", - "112": "o", - "113": "s", - "114": "t", - "115": "q", - "116": "r", - "117": "u" - }, - { - "97": "h", - "98": "e", - "99": "f", - "100": "g", - "101": "b", - "102": "c", - "103": "d", - "104": "a", - "105": "t", - "106": "s", - "107": "r", - "108": "q", - "109": "p", - "110": "n", - "111": "o", - "112": "m", - "113": "l", - "114": "k", - "115": "j", - "116": "i", - "117": "u" - }, - { - "97": "h", - "98": "e", - "99": "g", - "100": "f", - "101": "c", - "102": "b", - "103": "d", - "104": "a", - "105": "t", - "106": "r", - "107": "s", - "108": "q", - "109": "l", - "110": "j", - "111": "k", - "112": "i", - "113": "p", - "114": "o", - "115": "n", - "116": "m", - "117": "u" - }, - { - "97": "h", - "98": "f", - "99": "e", - "100": "g", - "101": "b", - "102": "d", - "103": "c", - "104": "a", - "105": "p", - "106": "n", - "107": "o", - "108": "m", - "109": "t", - "110": "s", - "111": "r", - "112": "q", - "113": "l", - "114": "j", - "115": "k", - "116": "i", - "117": "u" - }, - { - "97": "h", - "98": "f", - "99": "g", - "100": "e", - "101": "d", - "102": "b", - "103": "c", - "104": "a", - "105": "p", - "106": "o", - "107": "n", - "108": "m", - "109": "l", - "110": "k", - "111": "j", - "112": "i", - "113": "t", - "114": "r", - "115": "s", - "116": "q", - "117": "u" - }, - { - "97": "h", - "98": "g", - "99": "e", - "100": "f", - "101": "c", - "102": "d", - "103": "b", - "104": "a", - "105": "l", - "106": "j", - "107": "k", - "108": "i", - "109": "t", - "110": "r", - "111": "s", - "112": "q", - "113": "p", - "114": "n", - "115": "o", - "116": "m", - "117": "u" - }, - { - "97": "h", - "98": "g", - "99": "f", - "100": "e", - "101": "d", - "102": "c", - "103": "b", - "104": "a", - "105": "l", - "106": "k", - "107": "j", - "108": "i", - "109": "p", - "110": "o", - "111": "n", - "112": "m", - "113": "t", - "114": "s", - "115": "r", - "116": "q", - "117": "u" - } - ], - "17": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "e" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "e" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e" - } - ], - "18": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "19": [ - { - "97": "a" - } - ], - "20": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "21": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "g", - "102": "h", - "103": "e", - "104": "f", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "g", - "102": "h", - "103": "e", - "104": "f", - "105": "j", - "106": "i", - "107": "k", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "h", - "102": "g", - "103": "f", - "104": "e", - "105": "j", - "106": "i", - "107": "k", - "108": "l" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "h", - "102": "g", - "103": "f", - "104": "e", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - } - ], - "22": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "i", - "105": "h", - "106": "j", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "g", - "103": "e", - "104": "j", - "105": "h", - "106": "i", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "g", - "102": "e", - "103": "f", - "104": "i", - "105": "j", - "106": "h", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "g", - "102": "f", - "103": "e", - "104": "j", - "105": "i", - "106": "h", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "i", - "105": "h", - "106": "j", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "f", - "102": "g", - "103": "e", - "104": "j", - "105": "h", - "106": "i", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "g", - "102": "e", - "103": "f", - "104": "i", - "105": "j", - "106": "h", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "g", - "102": "f", - "103": "e", - "104": "j", - "105": "i", - "106": "h", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "i", - "105": "h", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "g", - "103": "e", - "104": "j", - "105": "h", - "106": "i", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "g", - "102": "e", - "103": "f", - "104": "i", - "105": "j", - "106": "h", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "g", - "102": "f", - "103": "e", - "104": "j", - "105": "i", - "106": "h", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "i", - "105": "h", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "g", - "103": "e", - "104": "j", - "105": "h", - "106": "i", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "g", - "102": "e", - "103": "f", - "104": "i", - "105": "j", - "106": "h", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "g", - "102": "f", - "103": "e", - "104": "j", - "105": "i", - "106": "h", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "h", - "102": "i", - "103": "j", - "104": "e", - "105": "f", - "106": "g", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "h", - "102": "j", - "103": "i", - "104": "f", - "105": "e", - "106": "g", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "i", - "102": "h", - "103": "j", - "104": "e", - "105": "g", - "106": "f", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "i", - "102": "j", - "103": "h", - "104": "g", - "105": "e", - "106": "f", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "j", - "102": "h", - "103": "i", - "104": "f", - "105": "g", - "106": "e", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "j", - "102": "i", - "103": "h", - "104": "g", - "105": "f", - "106": "e", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "h", - "102": "i", - "103": "j", - "104": "e", - "105": "f", - "106": "g", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "h", - "102": "j", - "103": "i", - "104": "f", - "105": "e", - "106": "g", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "i", - "102": "h", - "103": "j", - "104": "e", - "105": "g", - "106": "f", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "i", - "102": "j", - "103": "h", - "104": "g", - "105": "e", - "106": "f", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "j", - "102": "h", - "103": "i", - "104": "f", - "105": "g", - "106": "e", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "j", - "102": "i", - "103": "h", - "104": "g", - "105": "f", - "106": "e", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "h", - "102": "i", - "103": "j", - "104": "e", - "105": "f", - "106": "g", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "h", - "102": "j", - "103": "i", - "104": "f", - "105": "e", - "106": "g", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "i", - "102": "h", - "103": "j", - "104": "e", - "105": "g", - "106": "f", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "i", - "102": "j", - "103": "h", - "104": "g", - "105": "e", - "106": "f", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "j", - "102": "h", - "103": "i", - "104": "f", - "105": "g", - "106": "e", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "j", - "102": "i", - "103": "h", - "104": "g", - "105": "f", - "106": "e", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "h", - "102": "i", - "103": "j", - "104": "e", - "105": "f", - "106": "g", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "h", - "102": "j", - "103": "i", - "104": "f", - "105": "e", - "106": "g", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "i", - "102": "h", - "103": "j", - "104": "e", - "105": "g", - "106": "f", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "i", - "102": "j", - "103": "h", - "104": "g", - "105": "e", - "106": "f", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "j", - "102": "h", - "103": "i", - "104": "f", - "105": "g", - "106": "e", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "j", - "102": "i", - "103": "h", - "104": "g", - "105": "f", - "106": "e", - "107": "k" - } - ], - "23": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "i", - "104": "j", - "105": "g", - "106": "h", - "107": "k" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "i", - "102": "j", - "103": "g", - "104": "h", - "105": "e", - "106": "f", - "107": "k" - }, - { - "97": "a", - "98": "c", - "99": "d", - "100": "b", - "101": "i", - "102": "j", - "103": "e", - "104": "f", - "105": "g", - "106": "h", - "107": "k" - }, - { - "97": "a", - "98": "d", - "99": "b", - "100": "c", - "101": "g", - "102": "h", - "103": "i", - "104": "j", - "105": "e", - "106": "f", - "107": "k" - }, - { - "97": "a", - "98": "d", - "99": "c", - "100": "b", - "101": "g", - "102": "h", - "103": "e", - "104": "f", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "j", - "104": "i", - "105": "h", - "106": "g", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k" - }, - { - "97": "b", - "98": "c", - "99": "a", - "100": "d", - "101": "h", - "102": "g", - "103": "j", - "104": "i", - "105": "e", - "106": "f", - "107": "k" - }, - { - "97": "b", - "98": "c", - "99": "d", - "100": "a", - "101": "h", - "102": "g", - "103": "e", - "104": "f", - "105": "j", - "106": "i", - "107": "k" - }, - { - "97": "b", - "98": "d", - "99": "a", - "100": "c", - "101": "j", - "102": "i", - "103": "h", - "104": "g", - "105": "e", - "106": "f", - "107": "k" - }, - { - "97": "b", - "98": "d", - "99": "c", - "100": "a", - "101": "j", - "102": "i", - "103": "e", - "104": "f", - "105": "h", - "106": "g", - "107": "k" - }, - { - "97": "c", - "98": "a", - "99": "b", - "100": "d", - "101": "i", - "102": "j", - "103": "f", - "104": "e", - "105": "h", - "106": "g", - "107": "k" - }, - { - "97": "c", - "98": "a", - "99": "d", - "100": "b", - "101": "i", - "102": "j", - "103": "h", - "104": "g", - "105": "f", - "106": "e", - "107": "k" - }, - { - "97": "c", - "98": "b", - "99": "a", - "100": "d", - "101": "h", - "102": "g", - "103": "f", - "104": "e", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "c", - "98": "b", - "99": "d", - "100": "a", - "101": "h", - "102": "g", - "103": "i", - "104": "j", - "105": "f", - "106": "e", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "i", - "104": "j", - "105": "h", - "106": "g", - "107": "k" - }, - { - "97": "d", - "98": "a", - "99": "b", - "100": "c", - "101": "g", - "102": "h", - "103": "f", - "104": "e", - "105": "j", - "106": "i", - "107": "k" - }, - { - "97": "d", - "98": "a", - "99": "c", - "100": "b", - "101": "g", - "102": "h", - "103": "j", - "104": "i", - "105": "f", - "106": "e", - "107": "k" - }, - { - "97": "d", - "98": "b", - "99": "a", - "100": "c", - "101": "j", - "102": "i", - "103": "f", - "104": "e", - "105": "g", - "106": "h", - "107": "k" - }, - { - "97": "d", - "98": "b", - "99": "c", - "100": "a", - "101": "j", - "102": "i", - "103": "g", - "104": "h", - "105": "f", - "106": "e", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "j", - "104": "i", - "105": "g", - "106": "h", - "107": "k" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k" - } - ], - "24": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "c", - "99": "a", - "100": "d" - }, - { - "97": "c", - "98": "a", - "99": "b", - "100": "d" - }, - { - "97": "c", - "98": "b", - "99": "a", - "100": "d" - } - ], - "25": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "g", - "102": "h", - "103": "e", - "104": "f", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "d", - "99": "a", - "100": "c", - "101": "g", - "102": "h", - "103": "f", - "104": "e", - "105": "i" - }, - { - "97": "c", - "98": "a", - "99": "d", - "100": "b", - "101": "h", - "102": "g", - "103": "e", - "104": "f", - "105": "i" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i" - }, - { - "97": "d", - "98": "b", - "99": "c", - "100": "a", - "101": "h", - "102": "g", - "103": "f", - "104": "e", - "105": "i" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i" - } - ], - "26": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "27": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e" - }, - { - "97": "b", - "98": "d", - "99": "a", - "100": "c", - "101": "e" - }, - { - "97": "c", - "98": "a", - "99": "d", - "100": "b", - "101": "e" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e" - }, - { - "97": "d", - "98": "b", - "99": "c", - "100": "a", - "101": "e" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e" - } - ], - "28": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "29": [ - { - "97": "a" - } - ], - "30": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "31": [ - { - "97": "a", - "98": "b" - } - ], - "32": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "33": [ - { - "97": "a" - } - ], - "34": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "35": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "e", - "101": "d", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f" - } - ], - "36": [ - { - "97": "a", - "98": "b" - } - ], - "37": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "38": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f" - } - ], - "39": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "40": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "41": [ - { - "97": "a", - "98": "b" - } - ], - "42": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e" - } - ], - "43": [ - { - "97": "a", - "98": "b" - } - ], - "44": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e" - } - ], - "45": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "46": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "47": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p", - "113": "q", - "114": "r", - "115": "s", - "116": "t", - "117": "u", - "118": "v", - "119": "w", - "120": "x", - "121": "y", - "122": "z", - "65": "A" - }, - { - "97": "a", - "98": "b", - "99": "e", - "100": "f", - "101": "c", - "102": "d", - "103": "g", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "l", - "109": "q", - "110": "r", - "111": "s", - "112": "t", - "113": "m", - "114": "n", - "115": "o", - "116": "p", - "117": "u", - "118": "v", - "119": "y", - "120": "z", - "121": "w", - "122": "x", - "65": "A" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "q", - "106": "s", - "107": "r", - "108": "t", - "109": "m", - "110": "o", - "111": "n", - "112": "p", - "113": "i", - "114": "k", - "115": "j", - "116": "l", - "117": "y", - "118": "z", - "119": "w", - "120": "x", - "121": "u", - "122": "v", - "65": "A" - }, - { - "97": "a", - "98": "c", - "99": "e", - "100": "g", - "101": "b", - "102": "d", - "103": "f", - "104": "h", - "105": "q", - "106": "r", - "107": "s", - "108": "t", - "109": "i", - "110": "k", - "111": "j", - "112": "l", - "113": "m", - "114": "o", - "115": "n", - "116": "p", - "117": "y", - "118": "z", - "119": "u", - "120": "v", - "121": "w", - "122": "x", - "65": "A" - }, - { - "97": "a", - "98": "e", - "99": "b", - "100": "f", - "101": "c", - "102": "g", - "103": "d", - "104": "h", - "105": "m", - "106": "o", - "107": "n", - "108": "p", - "109": "q", - "110": "s", - "111": "r", - "112": "t", - "113": "i", - "114": "j", - "115": "k", - "116": "l", - "117": "w", - "118": "x", - "119": "y", - "120": "z", - "121": "u", - "122": "v", - "65": "A" - }, - { - "97": "a", - "98": "e", - "99": "c", - "100": "g", - "101": "b", - "102": "f", - "103": "d", - "104": "h", - "105": "m", - "106": "n", - "107": "o", - "108": "p", - "109": "i", - "110": "j", - "111": "k", - "112": "l", - "113": "q", - "114": "s", - "115": "r", - "116": "t", - "117": "w", - "118": "x", - "119": "u", - "120": "v", - "121": "y", - "122": "z", - "65": "A" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "o", - "110": "p", - "111": "m", - "112": "n", - "113": "s", - "114": "t", - "115": "q", - "116": "r", - "117": "v", - "118": "u", - "119": "w", - "120": "x", - "121": "y", - "122": "z", - "65": "A" - }, - { - "97": "b", - "98": "a", - "99": "f", - "100": "e", - "101": "d", - "102": "c", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "l", - "109": "s", - "110": "t", - "111": "q", - "112": "r", - "113": "o", - "114": "p", - "115": "m", - "116": "n", - "117": "v", - "118": "u", - "119": "y", - "120": "z", - "121": "w", - "122": "x", - "65": "A" - }, - { - "97": "b", - "98": "d", - "99": "a", - "100": "c", - "101": "f", - "102": "h", - "103": "e", - "104": "g", - "105": "s", - "106": "q", - "107": "t", - "108": "r", - "109": "o", - "110": "m", - "111": "p", - "112": "n", - "113": "i", - "114": "k", - "115": "j", - "116": "l", - "117": "y", - "118": "z", - "119": "w", - "120": "x", - "121": "v", - "122": "u", - "65": "A" - }, - { - "97": "b", - "98": "d", - "99": "f", - "100": "h", - "101": "a", - "102": "c", - "103": "e", - "104": "g", - "105": "s", - "106": "t", - "107": "q", - "108": "r", - "109": "i", - "110": "k", - "111": "j", - "112": "l", - "113": "o", - "114": "m", - "115": "p", - "116": "n", - "117": "y", - "118": "z", - "119": "v", - "120": "u", - "121": "w", - "122": "x", - "65": "A" - }, - { - "97": "b", - "98": "f", - "99": "a", - "100": "e", - "101": "d", - "102": "h", - "103": "c", - "104": "g", - "105": "o", - "106": "m", - "107": "p", - "108": "n", - "109": "s", - "110": "q", - "111": "t", - "112": "r", - "113": "i", - "114": "j", - "115": "k", - "116": "l", - "117": "w", - "118": "x", - "119": "y", - "120": "z", - "121": "v", - "122": "u", - "65": "A" - }, - { - "97": "b", - "98": "f", - "99": "d", - "100": "h", - "101": "a", - "102": "e", - "103": "c", - "104": "g", - "105": "o", - "106": "p", - "107": "m", - "108": "n", - "109": "i", - "110": "j", - "111": "k", - "112": "l", - "113": "s", - "114": "q", - "115": "t", - "116": "r", - "117": "w", - "118": "x", - "119": "v", - "120": "u", - "121": "y", - "122": "z", - "65": "A" - }, - { - "97": "c", - "98": "a", - "99": "d", - "100": "b", - "101": "g", - "102": "e", - "103": "h", - "104": "f", - "105": "q", - "106": "s", - "107": "r", - "108": "t", - "109": "n", - "110": "p", - "111": "m", - "112": "o", - "113": "j", - "114": "l", - "115": "i", - "116": "k", - "117": "z", - "118": "y", - "119": "w", - "120": "x", - "121": "u", - "122": "v", - "65": "A" - }, - { - "97": "c", - "98": "a", - "99": "g", - "100": "e", - "101": "d", - "102": "b", - "103": "h", - "104": "f", - "105": "q", - "106": "r", - "107": "s", - "108": "t", - "109": "j", - "110": "l", - "111": "i", - "112": "k", - "113": "n", - "114": "p", - "115": "m", - "116": "o", - "117": "z", - "118": "y", - "119": "u", - "120": "v", - "121": "w", - "122": "x", - "65": "A" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "g", - "102": "h", - "103": "e", - "104": "f", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "n", - "110": "m", - "111": "p", - "112": "o", - "113": "q", - "114": "r", - "115": "s", - "116": "t", - "117": "u", - "118": "v", - "119": "w", - "120": "x", - "121": "z", - "122": "y", - "65": "A" - }, - { - "97": "c", - "98": "d", - "99": "g", - "100": "h", - "101": "a", - "102": "b", - "103": "e", - "104": "f", - "105": "j", - "106": "l", - "107": "i", - "108": "k", - "109": "q", - "110": "r", - "111": "s", - "112": "t", - "113": "n", - "114": "m", - "115": "p", - "116": "o", - "117": "u", - "118": "v", - "119": "z", - "120": "y", - "121": "w", - "122": "x", - "65": "A" - }, - { - "97": "c", - "98": "g", - "99": "a", - "100": "e", - "101": "d", - "102": "h", - "103": "b", - "104": "f", - "105": "n", - "106": "m", - "107": "p", - "108": "o", - "109": "j", - "110": "i", - "111": "l", - "112": "k", - "113": "q", - "114": "s", - "115": "r", - "116": "t", - "117": "w", - "118": "x", - "119": "u", - "120": "v", - "121": "z", - "122": "y", - "65": "A" - }, - { - "97": "c", - "98": "g", - "99": "d", - "100": "h", - "101": "a", - "102": "e", - "103": "b", - "104": "f", - "105": "n", - "106": "p", - "107": "m", - "108": "o", - "109": "q", - "110": "s", - "111": "r", - "112": "t", - "113": "j", - "114": "i", - "115": "l", - "116": "k", - "117": "w", - "118": "x", - "119": "z", - "120": "y", - "121": "u", - "122": "v", - "65": "A" - }, - { - "97": "d", - "98": "b", - "99": "c", - "100": "a", - "101": "h", - "102": "f", - "103": "g", - "104": "e", - "105": "s", - "106": "q", - "107": "t", - "108": "r", - "109": "p", - "110": "n", - "111": "o", - "112": "m", - "113": "j", - "114": "l", - "115": "i", - "116": "k", - "117": "z", - "118": "y", - "119": "w", - "120": "x", - "121": "v", - "122": "u", - "65": "A" - }, - { - "97": "d", - "98": "b", - "99": "h", - "100": "f", - "101": "c", - "102": "a", - "103": "g", - "104": "e", - "105": "s", - "106": "t", - "107": "q", - "108": "r", - "109": "j", - "110": "l", - "111": "i", - "112": "k", - "113": "p", - "114": "n", - "115": "o", - "116": "m", - "117": "z", - "118": "y", - "119": "v", - "120": "u", - "121": "w", - "122": "x", - "65": "A" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "h", - "102": "g", - "103": "f", - "104": "e", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "p", - "110": "o", - "111": "n", - "112": "m", - "113": "s", - "114": "t", - "115": "q", - "116": "r", - "117": "v", - "118": "u", - "119": "w", - "120": "x", - "121": "z", - "122": "y", - "65": "A" - }, - { - "97": "d", - "98": "c", - "99": "h", - "100": "g", - "101": "b", - "102": "a", - "103": "f", - "104": "e", - "105": "j", - "106": "l", - "107": "i", - "108": "k", - "109": "s", - "110": "t", - "111": "q", - "112": "r", - "113": "p", - "114": "o", - "115": "n", - "116": "m", - "117": "v", - "118": "u", - "119": "z", - "120": "y", - "121": "w", - "122": "x", - "65": "A" - }, - { - "97": "d", - "98": "h", - "99": "b", - "100": "f", - "101": "c", - "102": "g", - "103": "a", - "104": "e", - "105": "p", - "106": "o", - "107": "n", - "108": "m", - "109": "j", - "110": "i", - "111": "l", - "112": "k", - "113": "s", - "114": "q", - "115": "t", - "116": "r", - "117": "w", - "118": "x", - "119": "v", - "120": "u", - "121": "z", - "122": "y", - "65": "A" - }, - { - "97": "d", - "98": "h", - "99": "c", - "100": "g", - "101": "b", - "102": "f", - "103": "a", - "104": "e", - "105": "p", - "106": "n", - "107": "o", - "108": "m", - "109": "s", - "110": "q", - "111": "t", - "112": "r", - "113": "j", - "114": "i", - "115": "l", - "116": "k", - "117": "w", - "118": "x", - "119": "z", - "120": "y", - "121": "v", - "122": "u", - "65": "A" - }, - { - "97": "e", - "98": "a", - "99": "f", - "100": "b", - "101": "g", - "102": "c", - "103": "h", - "104": "d", - "105": "m", - "106": "o", - "107": "n", - "108": "p", - "109": "r", - "110": "t", - "111": "q", - "112": "s", - "113": "k", - "114": "l", - "115": "i", - "116": "j", - "117": "x", - "118": "w", - "119": "y", - "120": "z", - "121": "u", - "122": "v", - "65": "A" - }, - { - "97": "e", - "98": "a", - "99": "g", - "100": "c", - "101": "f", - "102": "b", - "103": "h", - "104": "d", - "105": "m", - "106": "n", - "107": "o", - "108": "p", - "109": "k", - "110": "l", - "111": "i", - "112": "j", - "113": "r", - "114": "t", - "115": "q", - "116": "s", - "117": "x", - "118": "w", - "119": "u", - "120": "v", - "121": "y", - "122": "z", - "65": "A" - }, - { - "97": "e", - "98": "f", - "99": "a", - "100": "b", - "101": "g", - "102": "h", - "103": "c", - "104": "d", - "105": "k", - "106": "i", - "107": "l", - "108": "j", - "109": "r", - "110": "q", - "111": "t", - "112": "s", - "113": "m", - "114": "n", - "115": "o", - "116": "p", - "117": "u", - "118": "v", - "119": "y", - "120": "z", - "121": "x", - "122": "w", - "65": "A" - }, - { - "97": "e", - "98": "f", - "99": "g", - "100": "h", - "101": "a", - "102": "b", - "103": "c", - "104": "d", - "105": "k", - "106": "l", - "107": "i", - "108": "j", - "109": "m", - "110": "n", - "111": "o", - "112": "p", - "113": "r", - "114": "q", - "115": "t", - "116": "s", - "117": "u", - "118": "v", - "119": "x", - "120": "w", - "121": "y", - "122": "z", - "65": "A" - }, - { - "97": "e", - "98": "g", - "99": "a", - "100": "c", - "101": "f", - "102": "h", - "103": "b", - "104": "d", - "105": "r", - "106": "q", - "107": "t", - "108": "s", - "109": "k", - "110": "i", - "111": "l", - "112": "j", - "113": "m", - "114": "o", - "115": "n", - "116": "p", - "117": "y", - "118": "z", - "119": "u", - "120": "v", - "121": "x", - "122": "w", - "65": "A" - }, - { - "97": "e", - "98": "g", - "99": "f", - "100": "h", - "101": "a", - "102": "c", - "103": "b", - "104": "d", - "105": "r", - "106": "t", - "107": "q", - "108": "s", - "109": "m", - "110": "o", - "111": "n", - "112": "p", - "113": "k", - "114": "i", - "115": "l", - "116": "j", - "117": "y", - "118": "z", - "119": "x", - "120": "w", - "121": "u", - "122": "v", - "65": "A" - }, - { - "97": "f", - "98": "b", - "99": "e", - "100": "a", - "101": "h", - "102": "d", - "103": "g", - "104": "c", - "105": "o", - "106": "m", - "107": "p", - "108": "n", - "109": "t", - "110": "r", - "111": "s", - "112": "q", - "113": "k", - "114": "l", - "115": "i", - "116": "j", - "117": "x", - "118": "w", - "119": "y", - "120": "z", - "121": "v", - "122": "u", - "65": "A" - }, - { - "97": "f", - "98": "b", - "99": "h", - "100": "d", - "101": "e", - "102": "a", - "103": "g", - "104": "c", - "105": "o", - "106": "p", - "107": "m", - "108": "n", - "109": "k", - "110": "l", - "111": "i", - "112": "j", - "113": "t", - "114": "r", - "115": "s", - "116": "q", - "117": "x", - "118": "w", - "119": "v", - "120": "u", - "121": "y", - "122": "z", - "65": "A" - }, - { - "97": "f", - "98": "e", - "99": "b", - "100": "a", - "101": "h", - "102": "g", - "103": "d", - "104": "c", - "105": "k", - "106": "i", - "107": "l", - "108": "j", - "109": "t", - "110": "s", - "111": "r", - "112": "q", - "113": "o", - "114": "p", - "115": "m", - "116": "n", - "117": "v", - "118": "u", - "119": "y", - "120": "z", - "121": "x", - "122": "w", - "65": "A" - }, - { - "97": "f", - "98": "e", - "99": "h", - "100": "g", - "101": "b", - "102": "a", - "103": "d", - "104": "c", - "105": "k", - "106": "l", - "107": "i", - "108": "j", - "109": "o", - "110": "p", - "111": "m", - "112": "n", - "113": "t", - "114": "s", - "115": "r", - "116": "q", - "117": "v", - "118": "u", - "119": "x", - "120": "w", - "121": "y", - "122": "z", - "65": "A" - }, - { - "97": "f", - "98": "h", - "99": "b", - "100": "d", - "101": "e", - "102": "g", - "103": "a", - "104": "c", - "105": "t", - "106": "s", - "107": "r", - "108": "q", - "109": "k", - "110": "i", - "111": "l", - "112": "j", - "113": "o", - "114": "m", - "115": "p", - "116": "n", - "117": "y", - "118": "z", - "119": "v", - "120": "u", - "121": "x", - "122": "w", - "65": "A" - }, - { - "97": "f", - "98": "h", - "99": "e", - "100": "g", - "101": "b", - "102": "d", - "103": "a", - "104": "c", - "105": "t", - "106": "r", - "107": "s", - "108": "q", - "109": "o", - "110": "m", - "111": "p", - "112": "n", - "113": "k", - "114": "i", - "115": "l", - "116": "j", - "117": "y", - "118": "z", - "119": "x", - "120": "w", - "121": "v", - "122": "u", - "65": "A" - }, - { - "97": "g", - "98": "c", - "99": "e", - "100": "a", - "101": "h", - "102": "d", - "103": "f", - "104": "b", - "105": "n", - "106": "m", - "107": "p", - "108": "o", - "109": "l", - "110": "k", - "111": "j", - "112": "i", - "113": "r", - "114": "t", - "115": "q", - "116": "s", - "117": "x", - "118": "w", - "119": "u", - "120": "v", - "121": "z", - "122": "y", - "65": "A" - }, - { - "97": "g", - "98": "c", - "99": "h", - "100": "d", - "101": "e", - "102": "a", - "103": "f", - "104": "b", - "105": "n", - "106": "p", - "107": "m", - "108": "o", - "109": "r", - "110": "t", - "111": "q", - "112": "s", - "113": "l", - "114": "k", - "115": "j", - "116": "i", - "117": "x", - "118": "w", - "119": "z", - "120": "y", - "121": "u", - "122": "v", - "65": "A" - }, - { - "97": "g", - "98": "e", - "99": "c", - "100": "a", - "101": "h", - "102": "f", - "103": "d", - "104": "b", - "105": "r", - "106": "q", - "107": "t", - "108": "s", - "109": "l", - "110": "j", - "111": "k", - "112": "i", - "113": "n", - "114": "p", - "115": "m", - "116": "o", - "117": "z", - "118": "y", - "119": "u", - "120": "v", - "121": "x", - "122": "w", - "65": "A" - }, - { - "97": "g", - "98": "e", - "99": "h", - "100": "f", - "101": "c", - "102": "a", - "103": "d", - "104": "b", - "105": "r", - "106": "t", - "107": "q", - "108": "s", - "109": "n", - "110": "p", - "111": "m", - "112": "o", - "113": "l", - "114": "j", - "115": "k", - "116": "i", - "117": "z", - "118": "y", - "119": "x", - "120": "w", - "121": "u", - "122": "v", - "65": "A" - }, - { - "97": "g", - "98": "h", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "a", - "104": "b", - "105": "l", - "106": "j", - "107": "k", - "108": "i", - "109": "r", - "110": "q", - "111": "t", - "112": "s", - "113": "n", - "114": "m", - "115": "p", - "116": "o", - "117": "u", - "118": "v", - "119": "z", - "120": "y", - "121": "x", - "122": "w", - "65": "A" - }, - { - "97": "g", - "98": "h", - "99": "e", - "100": "f", - "101": "c", - "102": "d", - "103": "a", - "104": "b", - "105": "l", - "106": "k", - "107": "j", - "108": "i", - "109": "n", - "110": "m", - "111": "p", - "112": "o", - "113": "r", - "114": "q", - "115": "t", - "116": "s", - "117": "u", - "118": "v", - "119": "x", - "120": "w", - "121": "z", - "122": "y", - "65": "A" - }, - { - "97": "h", - "98": "d", - "99": "f", - "100": "b", - "101": "g", - "102": "c", - "103": "e", - "104": "a", - "105": "p", - "106": "o", - "107": "n", - "108": "m", - "109": "l", - "110": "k", - "111": "j", - "112": "i", - "113": "t", - "114": "r", - "115": "s", - "116": "q", - "117": "x", - "118": "w", - "119": "v", - "120": "u", - "121": "z", - "122": "y", - "65": "A" - }, - { - "97": "h", - "98": "d", - "99": "g", - "100": "c", - "101": "f", - "102": "b", - "103": "e", - "104": "a", - "105": "p", - "106": "n", - "107": "o", - "108": "m", - "109": "t", - "110": "r", - "111": "s", - "112": "q", - "113": "l", - "114": "k", - "115": "j", - "116": "i", - "117": "x", - "118": "w", - "119": "z", - "120": "y", - "121": "v", - "122": "u", - "65": "A" - }, - { - "97": "h", - "98": "f", - "99": "d", - "100": "b", - "101": "g", - "102": "e", - "103": "c", - "104": "a", - "105": "t", - "106": "s", - "107": "r", - "108": "q", - "109": "l", - "110": "j", - "111": "k", - "112": "i", - "113": "p", - "114": "n", - "115": "o", - "116": "m", - "117": "z", - "118": "y", - "119": "v", - "120": "u", - "121": "x", - "122": "w", - "65": "A" - }, - { - "97": "h", - "98": "f", - "99": "g", - "100": "e", - "101": "d", - "102": "b", - "103": "c", - "104": "a", - "105": "t", - "106": "r", - "107": "s", - "108": "q", - "109": "p", - "110": "n", - "111": "o", - "112": "m", - "113": "l", - "114": "j", - "115": "k", - "116": "i", - "117": "z", - "118": "y", - "119": "x", - "120": "w", - "121": "v", - "122": "u", - "65": "A" - }, - { - "97": "h", - "98": "g", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "b", - "104": "a", - "105": "l", - "106": "j", - "107": "k", - "108": "i", - "109": "t", - "110": "s", - "111": "r", - "112": "q", - "113": "p", - "114": "o", - "115": "n", - "116": "m", - "117": "v", - "118": "u", - "119": "z", - "120": "y", - "121": "x", - "122": "w", - "65": "A" - }, - { - "97": "h", - "98": "g", - "99": "f", - "100": "e", - "101": "d", - "102": "c", - "103": "b", - "104": "a", - "105": "l", - "106": "k", - "107": "j", - "108": "i", - "109": "p", - "110": "o", - "111": "n", - "112": "m", - "113": "t", - "114": "s", - "115": "r", - "116": "q", - "117": "v", - "118": "u", - "119": "x", - "120": "w", - "121": "z", - "122": "y", - "65": "A" - } - ], - "48": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "k", - "106": "l", - "107": "i", - "108": "j", - "109": "m" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "k", - "106": "l", - "107": "i", - "108": "j", - "109": "m" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "e", - "102": "f", - "103": "k", - "104": "l", - "105": "i", - "106": "j", - "107": "g", - "108": "h", - "109": "m" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "f", - "102": "e", - "103": "k", - "104": "l", - "105": "i", - "106": "j", - "107": "g", - "108": "h", - "109": "m" - }, - { - "97": "a", - "98": "c", - "99": "d", - "100": "b", - "101": "e", - "102": "f", - "103": "k", - "104": "l", - "105": "g", - "106": "h", - "107": "i", - "108": "j", - "109": "m" - }, - { - "97": "a", - "98": "c", - "99": "d", - "100": "b", - "101": "f", - "102": "e", - "103": "k", - "104": "l", - "105": "g", - "106": "h", - "107": "i", - "108": "j", - "109": "m" - }, - { - "97": "a", - "98": "d", - "99": "b", - "100": "c", - "101": "e", - "102": "f", - "103": "i", - "104": "j", - "105": "k", - "106": "l", - "107": "g", - "108": "h", - "109": "m" - }, - { - "97": "a", - "98": "d", - "99": "b", - "100": "c", - "101": "f", - "102": "e", - "103": "i", - "104": "j", - "105": "k", - "106": "l", - "107": "g", - "108": "h", - "109": "m" - }, - { - "97": "a", - "98": "d", - "99": "c", - "100": "b", - "101": "e", - "102": "f", - "103": "i", - "104": "j", - "105": "g", - "106": "h", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "a", - "98": "d", - "99": "c", - "100": "b", - "101": "f", - "102": "e", - "103": "i", - "104": "j", - "105": "g", - "106": "h", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "l", - "106": "k", - "107": "j", - "108": "i", - "109": "m" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "l", - "106": "k", - "107": "j", - "108": "i", - "109": "m" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "b", - "98": "c", - "99": "a", - "100": "d", - "101": "e", - "102": "f", - "103": "j", - "104": "i", - "105": "l", - "106": "k", - "107": "g", - "108": "h", - "109": "m" - }, - { - "97": "b", - "98": "c", - "99": "a", - "100": "d", - "101": "f", - "102": "e", - "103": "j", - "104": "i", - "105": "l", - "106": "k", - "107": "g", - "108": "h", - "109": "m" - }, - { - "97": "b", - "98": "c", - "99": "d", - "100": "a", - "101": "e", - "102": "f", - "103": "j", - "104": "i", - "105": "g", - "106": "h", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "b", - "98": "c", - "99": "d", - "100": "a", - "101": "f", - "102": "e", - "103": "j", - "104": "i", - "105": "g", - "106": "h", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "b", - "98": "d", - "99": "a", - "100": "c", - "101": "e", - "102": "f", - "103": "l", - "104": "k", - "105": "j", - "106": "i", - "107": "g", - "108": "h", - "109": "m" - }, - { - "97": "b", - "98": "d", - "99": "a", - "100": "c", - "101": "f", - "102": "e", - "103": "l", - "104": "k", - "105": "j", - "106": "i", - "107": "g", - "108": "h", - "109": "m" - }, - { - "97": "b", - "98": "d", - "99": "c", - "100": "a", - "101": "e", - "102": "f", - "103": "l", - "104": "k", - "105": "g", - "106": "h", - "107": "j", - "108": "i", - "109": "m" - }, - { - "97": "b", - "98": "d", - "99": "c", - "100": "a", - "101": "f", - "102": "e", - "103": "l", - "104": "k", - "105": "g", - "106": "h", - "107": "j", - "108": "i", - "109": "m" - }, - { - "97": "c", - "98": "a", - "99": "b", - "100": "d", - "101": "e", - "102": "f", - "103": "k", - "104": "l", - "105": "h", - "106": "g", - "107": "j", - "108": "i", - "109": "m" - }, - { - "97": "c", - "98": "a", - "99": "b", - "100": "d", - "101": "f", - "102": "e", - "103": "k", - "104": "l", - "105": "h", - "106": "g", - "107": "j", - "108": "i", - "109": "m" - }, - { - "97": "c", - "98": "a", - "99": "d", - "100": "b", - "101": "e", - "102": "f", - "103": "k", - "104": "l", - "105": "j", - "106": "i", - "107": "h", - "108": "g", - "109": "m" - }, - { - "97": "c", - "98": "a", - "99": "d", - "100": "b", - "101": "f", - "102": "e", - "103": "k", - "104": "l", - "105": "j", - "106": "i", - "107": "h", - "108": "g", - "109": "m" - }, - { - "97": "c", - "98": "b", - "99": "a", - "100": "d", - "101": "e", - "102": "f", - "103": "j", - "104": "i", - "105": "h", - "106": "g", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "c", - "98": "b", - "99": "a", - "100": "d", - "101": "f", - "102": "e", - "103": "j", - "104": "i", - "105": "h", - "106": "g", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "c", - "98": "b", - "99": "d", - "100": "a", - "101": "e", - "102": "f", - "103": "j", - "104": "i", - "105": "k", - "106": "l", - "107": "h", - "108": "g", - "109": "m" - }, - { - "97": "c", - "98": "b", - "99": "d", - "100": "a", - "101": "f", - "102": "e", - "103": "j", - "104": "i", - "105": "k", - "106": "l", - "107": "h", - "108": "g", - "109": "m" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "k", - "106": "l", - "107": "j", - "108": "i", - "109": "m" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "k", - "106": "l", - "107": "j", - "108": "i", - "109": "m" - }, - { - "97": "d", - "98": "a", - "99": "b", - "100": "c", - "101": "e", - "102": "f", - "103": "i", - "104": "j", - "105": "h", - "106": "g", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "d", - "98": "a", - "99": "b", - "100": "c", - "101": "f", - "102": "e", - "103": "i", - "104": "j", - "105": "h", - "106": "g", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "d", - "98": "a", - "99": "c", - "100": "b", - "101": "e", - "102": "f", - "103": "i", - "104": "j", - "105": "l", - "106": "k", - "107": "h", - "108": "g", - "109": "m" - }, - { - "97": "d", - "98": "a", - "99": "c", - "100": "b", - "101": "f", - "102": "e", - "103": "i", - "104": "j", - "105": "l", - "106": "k", - "107": "h", - "108": "g", - "109": "m" - }, - { - "97": "d", - "98": "b", - "99": "a", - "100": "c", - "101": "e", - "102": "f", - "103": "l", - "104": "k", - "105": "h", - "106": "g", - "107": "i", - "108": "j", - "109": "m" - }, - { - "97": "d", - "98": "b", - "99": "a", - "100": "c", - "101": "f", - "102": "e", - "103": "l", - "104": "k", - "105": "h", - "106": "g", - "107": "i", - "108": "j", - "109": "m" - }, - { - "97": "d", - "98": "b", - "99": "c", - "100": "a", - "101": "e", - "102": "f", - "103": "l", - "104": "k", - "105": "i", - "106": "j", - "107": "h", - "108": "g", - "109": "m" - }, - { - "97": "d", - "98": "b", - "99": "c", - "100": "a", - "101": "f", - "102": "e", - "103": "l", - "104": "k", - "105": "i", - "106": "j", - "107": "h", - "108": "g", - "109": "m" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "l", - "106": "k", - "107": "i", - "108": "j", - "109": "m" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "l", - "106": "k", - "107": "i", - "108": "j", - "109": "m" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "l", - "108": "k", - "109": "m" - } - ], - "49": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p", - "113": "q", - "114": "r" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "k", - "106": "l", - "107": "i", - "108": "j", - "109": "m", - "110": "n", - "111": "p", - "112": "o", - "113": "q", - "114": "r" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "h", - "102": "f", - "103": "g", - "104": "e", - "105": "l", - "106": "k", - "107": "j", - "108": "i", - "109": "n", - "110": "m", - "111": "o", - "112": "p", - "113": "q", - "114": "r" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "h", - "102": "g", - "103": "f", - "104": "e", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "n", - "110": "m", - "111": "p", - "112": "o", - "113": "q", - "114": "r" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "g", - "102": "h", - "103": "e", - "104": "f", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "o", - "110": "p", - "111": "m", - "112": "n", - "113": "q", - "114": "r" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "g", - "102": "e", - "103": "h", - "104": "f", - "105": "k", - "106": "l", - "107": "j", - "108": "i", - "109": "o", - "110": "p", - "111": "n", - "112": "m", - "113": "q", - "114": "r" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "f", - "102": "h", - "103": "e", - "104": "g", - "105": "l", - "106": "k", - "107": "i", - "108": "j", - "109": "p", - "110": "o", - "111": "m", - "112": "n", - "113": "q", - "114": "r" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "l", - "108": "k", - "109": "p", - "110": "o", - "111": "n", - "112": "m", - "113": "q", - "114": "r" - } - ], - "50": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "i", - "104": "j", - "105": "g", - "106": "h", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "i", - "104": "j", - "105": "g", - "106": "h", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "j", - "104": "i", - "105": "h", - "106": "g", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "j", - "104": "i", - "105": "h", - "106": "g", - "107": "k", - "108": "l", - "109": "m" - } - ], - "51": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "l" - } - ], - "52": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - } - ], - "53": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i" - } - ], - "54": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f" - } - ], - "55": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i" - } - ], - "56": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e" - } - ], - "57": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - } - ], - "58": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "g", - "104": "h" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "g", - "104": "h" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "g", - "104": "h" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "g", - "104": "h" - } - ], - "59": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g" - } - ], - "60": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "61": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "62": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "63": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - } - ], - "64": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - } - ], - "65": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p", - "113": "q", - "114": "r" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "i", - "104": "j", - "105": "g", - "106": "h", - "107": "k", - "108": "l", - "109": "m", - "110": "o", - "111": "n", - "112": "p", - "113": "q", - "114": "r" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "l", - "108": "k", - "109": "m", - "110": "n", - "111": "o", - "112": "p", - "113": "q", - "114": "r" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "i", - "104": "j", - "105": "g", - "106": "h", - "107": "l", - "108": "k", - "109": "m", - "110": "o", - "111": "n", - "112": "p", - "113": "q", - "114": "r" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m", - "110": "n", - "111": "o", - "112": "q", - "113": "p", - "114": "r" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "j", - "104": "i", - "105": "h", - "106": "g", - "107": "l", - "108": "k", - "109": "m", - "110": "o", - "111": "n", - "112": "q", - "113": "p", - "114": "r" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "q", - "113": "p", - "114": "r" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "j", - "104": "i", - "105": "h", - "106": "g", - "107": "k", - "108": "l", - "109": "m", - "110": "o", - "111": "n", - "112": "q", - "113": "p", - "114": "r" - } - ], - "66": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m" - } - ], - "67": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "a", - "98": "b", - "99": "e", - "100": "f", - "101": "c", - "102": "d", - "103": "g", - "104": "j", - "105": "k", - "106": "h", - "107": "i", - "108": "l", - "109": "n", - "110": "m", - "111": "o" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "i", - "105": "h", - "106": "k", - "107": "j", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "b", - "98": "a", - "99": "f", - "100": "e", - "101": "d", - "102": "c", - "103": "g", - "104": "k", - "105": "j", - "106": "i", - "107": "h", - "108": "l", - "109": "n", - "110": "m", - "111": "o" - } - ], - "68": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i" - } - ], - "69": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "e", - "101": "d", - "102": "f", - "103": "g", - "104": "i", - "105": "h", - "106": "k", - "107": "j", - "108": "l", - "109": "m", - "110": "o", - "111": "n", - "112": "p" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "l", - "108": "k", - "109": "n", - "110": "m", - "111": "o", - "112": "p" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "e", - "101": "c", - "102": "f", - "103": "h", - "104": "i", - "105": "g", - "106": "l", - "107": "j", - "108": "k", - "109": "n", - "110": "o", - "111": "m", - "112": "p" - }, - { - "97": "a", - "98": "b", - "99": "e", - "100": "c", - "101": "d", - "102": "f", - "103": "i", - "104": "g", - "105": "h", - "106": "k", - "107": "l", - "108": "j", - "109": "o", - "110": "m", - "111": "n", - "112": "p" - }, - { - "97": "a", - "98": "b", - "99": "e", - "100": "d", - "101": "c", - "102": "f", - "103": "i", - "104": "h", - "105": "g", - "106": "l", - "107": "k", - "108": "j", - "109": "o", - "110": "n", - "111": "m", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f", - "103": "g", - "104": "i", - "105": "h", - "106": "k", - "107": "j", - "108": "l", - "109": "m", - "110": "o", - "111": "n", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "l", - "108": "k", - "109": "n", - "110": "m", - "111": "o", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "e", - "101": "c", - "102": "f", - "103": "h", - "104": "i", - "105": "g", - "106": "l", - "107": "j", - "108": "k", - "109": "n", - "110": "o", - "111": "m", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "e", - "100": "c", - "101": "d", - "102": "f", - "103": "i", - "104": "g", - "105": "h", - "106": "k", - "107": "l", - "108": "j", - "109": "o", - "110": "m", - "111": "n", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "e", - "100": "d", - "101": "c", - "102": "f", - "103": "i", - "104": "h", - "105": "g", - "106": "l", - "107": "k", - "108": "j", - "109": "o", - "110": "n", - "111": "m", - "112": "p" - } - ], - "70": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "h" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "g", - "103": "e", - "104": "h" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "g", - "102": "e", - "103": "f", - "104": "h" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "g", - "102": "f", - "103": "e", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "g", - "103": "e", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "g", - "102": "e", - "103": "f", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "g", - "102": "f", - "103": "e", - "104": "h" - } - ], - "71": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "i", - "104": "j", - "105": "g", - "106": "h", - "107": "k", - "108": "l", - "109": "n", - "110": "m", - "111": "o" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "i", - "102": "j", - "103": "g", - "104": "h", - "105": "e", - "106": "f", - "107": "k", - "108": "n", - "109": "m", - "110": "l", - "111": "o" - }, - { - "97": "a", - "98": "c", - "99": "d", - "100": "b", - "101": "i", - "102": "j", - "103": "e", - "104": "f", - "105": "g", - "106": "h", - "107": "k", - "108": "n", - "109": "l", - "110": "m", - "111": "o" - }, - { - "97": "a", - "98": "d", - "99": "b", - "100": "c", - "101": "g", - "102": "h", - "103": "i", - "104": "j", - "105": "e", - "106": "f", - "107": "k", - "108": "m", - "109": "n", - "110": "l", - "111": "o" - }, - { - "97": "a", - "98": "d", - "99": "c", - "100": "b", - "101": "g", - "102": "h", - "103": "e", - "104": "f", - "105": "i", - "106": "j", - "107": "k", - "108": "m", - "109": "l", - "110": "n", - "111": "o" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "j", - "104": "i", - "105": "h", - "106": "g", - "107": "k", - "108": "l", - "109": "n", - "110": "m", - "111": "o" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "b", - "98": "c", - "99": "a", - "100": "d", - "101": "h", - "102": "g", - "103": "j", - "104": "i", - "105": "e", - "106": "f", - "107": "k", - "108": "m", - "109": "n", - "110": "l", - "111": "o" - }, - { - "97": "b", - "98": "c", - "99": "d", - "100": "a", - "101": "h", - "102": "g", - "103": "e", - "104": "f", - "105": "j", - "106": "i", - "107": "k", - "108": "m", - "109": "l", - "110": "n", - "111": "o" - }, - { - "97": "b", - "98": "d", - "99": "a", - "100": "c", - "101": "j", - "102": "i", - "103": "h", - "104": "g", - "105": "e", - "106": "f", - "107": "k", - "108": "n", - "109": "m", - "110": "l", - "111": "o" - }, - { - "97": "b", - "98": "d", - "99": "c", - "100": "a", - "101": "j", - "102": "i", - "103": "e", - "104": "f", - "105": "h", - "106": "g", - "107": "k", - "108": "n", - "109": "l", - "110": "m", - "111": "o" - }, - { - "97": "c", - "98": "a", - "99": "b", - "100": "d", - "101": "i", - "102": "j", - "103": "f", - "104": "e", - "105": "h", - "106": "g", - "107": "k", - "108": "n", - "109": "l", - "110": "m", - "111": "o" - }, - { - "97": "c", - "98": "a", - "99": "d", - "100": "b", - "101": "i", - "102": "j", - "103": "h", - "104": "g", - "105": "f", - "106": "e", - "107": "k", - "108": "n", - "109": "m", - "110": "l", - "111": "o" - }, - { - "97": "c", - "98": "b", - "99": "a", - "100": "d", - "101": "h", - "102": "g", - "103": "f", - "104": "e", - "105": "i", - "106": "j", - "107": "k", - "108": "m", - "109": "l", - "110": "n", - "111": "o" - }, - { - "97": "c", - "98": "b", - "99": "d", - "100": "a", - "101": "h", - "102": "g", - "103": "i", - "104": "j", - "105": "f", - "106": "e", - "107": "k", - "108": "m", - "109": "n", - "110": "l", - "111": "o" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "i", - "104": "j", - "105": "h", - "106": "g", - "107": "k", - "108": "l", - "109": "n", - "110": "m", - "111": "o" - }, - { - "97": "d", - "98": "a", - "99": "b", - "100": "c", - "101": "g", - "102": "h", - "103": "f", - "104": "e", - "105": "j", - "106": "i", - "107": "k", - "108": "m", - "109": "l", - "110": "n", - "111": "o" - }, - { - "97": "d", - "98": "a", - "99": "c", - "100": "b", - "101": "g", - "102": "h", - "103": "j", - "104": "i", - "105": "f", - "106": "e", - "107": "k", - "108": "m", - "109": "n", - "110": "l", - "111": "o" - }, - { - "97": "d", - "98": "b", - "99": "a", - "100": "c", - "101": "j", - "102": "i", - "103": "f", - "104": "e", - "105": "g", - "106": "h", - "107": "k", - "108": "n", - "109": "l", - "110": "m", - "111": "o" - }, - { - "97": "d", - "98": "b", - "99": "c", - "100": "a", - "101": "j", - "102": "i", - "103": "g", - "104": "h", - "105": "f", - "106": "e", - "107": "k", - "108": "n", - "109": "m", - "110": "l", - "111": "o" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "j", - "104": "i", - "105": "g", - "106": "h", - "107": "k", - "108": "l", - "109": "n", - "110": "m", - "111": "o" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - } - ], - "72": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "i", - "105": "h", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "i", - "105": "h", - "106": "j", - "107": "k" - } - ], - "73": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "e", - "101": "c", - "102": "f" - }, - { - "97": "a", - "98": "b", - "99": "e", - "100": "c", - "101": "d", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "e", - "100": "d", - "101": "c", - "102": "f" - } - ], - "74": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "g", - "103": "f", - "104": "i", - "105": "h", - "106": "j" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "e", - "102": "g", - "103": "f", - "104": "i", - "105": "h", - "106": "j" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "e", - "102": "g", - "103": "f", - "104": "i", - "105": "h", - "106": "j" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e", - "102": "g", - "103": "f", - "104": "i", - "105": "h", - "106": "j" - } - ], - "75": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "76": [ - { - "97": "a" - } - ], - "77": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "78": [ - { - "97": "a" - } - ], - "79": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "80": [ - { - "97": "a", - "98": "b" - } - ], - "81": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "g", - "104": "h" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "g", - "104": "h" - } - ], - "82": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "g" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "g" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "g" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "g" - } - ], - "83": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - } - ], - "84": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k" - } - ], - "85": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f", - "103": "g" - } - ], - "86": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g" - } - ], - "87": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "88": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f" - } - ], - "89": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "n", - "109": "o", - "110": "l", - "111": "m", - "112": "p" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "o", - "109": "n", - "110": "m", - "111": "l", - "112": "p" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "o", - "111": "n", - "112": "p" - } - ], - "90": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g" - } - ], - "91": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "92": [ - { - "97": "a", - "98": "b" - } - ], - "93": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "o", - "111": "n", - "112": "p" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "l", - "107": "m", - "108": "j", - "109": "k", - "110": "n", - "111": "o", - "112": "p" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "l", - "107": "m", - "108": "j", - "109": "k", - "110": "o", - "111": "n", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "n", - "111": "o", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "o", - "111": "n", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "m", - "107": "l", - "108": "k", - "109": "j", - "110": "n", - "111": "o", - "112": "p" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "m", - "107": "l", - "108": "k", - "109": "j", - "110": "o", - "111": "n", - "112": "p" - } - ], - "94": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g" - } - ], - "95": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "96": [ - { - "97": "a", - "98": "b" - } - ], - "97": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "i", - "105": "h", - "106": "j", - "107": "k" - } - ], - "98": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "e", - "101": "d", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f", - "103": "g" - } - ], - "99": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g" - } - ], - "100": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - } - ], - "101": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - } - ], - "102": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - } - ], - "103": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "104": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "105": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f" - } - ], - "106": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "107": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - } - ], - "108": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - } - ], - "109": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "110": [ - { - "97": "a", - "98": "b" - } - ], - "111": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "k", - "106": "l", - "107": "i", - "108": "j", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "l", - "106": "k", - "107": "j", - "108": "i", - "109": "m", - "110": "n", - "111": "o" - } - ], - "112": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n" - }, - { - "97": "a", - "98": "d", - "99": "c", - "100": "b", - "101": "e", - "102": "f", - "103": "j", - "104": "i", - "105": "h", - "106": "g", - "107": "k", - "108": "l", - "109": "m", - "110": "n" - }, - { - "97": "c", - "98": "b", - "99": "a", - "100": "d", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m", - "110": "n" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "i", - "104": "j", - "105": "g", - "106": "h", - "107": "l", - "108": "k", - "109": "m", - "110": "n" - } - ], - "113": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - } - ], - "114": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - } - ], - "115": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "g", - "104": "i", - "105": "h", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e", - "102": "f", - "103": "g", - "104": "i", - "105": "h", - "106": "j", - "107": "k", - "108": "l" - } - ], - "116": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - } - ], - "117": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i" - } - ], - "118": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i" - } - ], - "119": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - } - ], - "120": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "h", - "102": "g", - "103": "f", - "104": "e", - "105": "i" - } - ], - "121": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i", - "106": "j" - } - ], - "122": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - } - ], - "123": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p", - "113": "q", - "114": "r", - "115": "s", - "116": "t", - "117": "u" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "o", - "111": "n", - "112": "q", - "113": "p", - "114": "r", - "115": "s", - "116": "t", - "117": "u" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "n", - "109": "o", - "110": "l", - "111": "m", - "112": "p", - "113": "q", - "114": "r", - "115": "t", - "116": "s", - "117": "u" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "o", - "109": "n", - "110": "m", - "111": "l", - "112": "q", - "113": "p", - "114": "r", - "115": "t", - "116": "s", - "117": "u" - } - ], - "124": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "l", - "108": "k", - "109": "m", - "110": "n" - } - ], - "125": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m", - "110": "n" - } - ], - "126": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k" - } - ], - "127": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "l" - } - ], - "128": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "129": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k" - } - ], - "130": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - } - ], - "131": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p", - "113": "q", - "114": "r" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "l", - "107": "m", - "108": "j", - "109": "k", - "110": "n", - "111": "o", - "112": "p", - "113": "q", - "114": "r" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "n", - "111": "p", - "112": "o", - "113": "q", - "114": "r" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "m", - "107": "l", - "108": "k", - "109": "j", - "110": "n", - "111": "p", - "112": "o", - "113": "q", - "114": "r" - } - ], - "132": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "m", - "109": "l", - "110": "n", - "111": "o", - "112": "p" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k", - "108": "m", - "109": "l", - "110": "n", - "111": "o", - "112": "p" - } - ], - "133": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "i", - "105": "h", - "106": "j", - "107": "k" - } - ], - "134": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "l", - "108": "k", - "109": "m", - "110": "n" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m", - "110": "n" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m", - "110": "n" - } - ], - "135": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "136": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - } - ], - "137": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - } - ], - "138": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - } - ], - "139": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - } - ], - "140": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m" - } - ], - "141": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "142": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - } - ], - "143": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "c", - "99": "a", - "100": "d" - }, - { - "97": "c", - "98": "a", - "99": "b", - "100": "d" - }, - { - "97": "c", - "98": "b", - "99": "a", - "100": "d" - } - ], - "144": [ - { - "97": "a" - } - ], - "145": [ - { - "97": "a" - } - ], - "146": [ - { - "97": "a", - "98": "b" - } - ], - "147": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g" - } - ], - "148": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f" - } - ], - "149": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "a", - "98": "b", - "99": "e", - "100": "f", - "101": "c", - "102": "d", - "103": "g", - "104": "i", - "105": "h", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "f", - "100": "e", - "101": "d", - "102": "c", - "103": "g", - "104": "i", - "105": "h", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "e", - "100": "f", - "101": "a", - "102": "b", - "103": "h", - "104": "i", - "105": "g", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "d", - "98": "c", - "99": "f", - "100": "e", - "101": "b", - "102": "a", - "103": "h", - "104": "i", - "105": "g", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "e", - "98": "f", - "99": "a", - "100": "b", - "101": "c", - "102": "d", - "103": "i", - "104": "g", - "105": "h", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "e", - "98": "f", - "99": "c", - "100": "d", - "101": "a", - "102": "b", - "103": "i", - "104": "h", - "105": "g", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "f", - "98": "e", - "99": "b", - "100": "a", - "101": "d", - "102": "c", - "103": "i", - "104": "g", - "105": "h", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "f", - "98": "e", - "99": "d", - "100": "c", - "101": "b", - "102": "a", - "103": "i", - "104": "h", - "105": "g", - "106": "k", - "107": "j", - "108": "l" - } - ], - "150": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g" - } - ], - "151": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "152": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "153": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "154": [ - { - "97": "a", - "98": "b", - "99": "c" - }, - { - "97": "b", - "98": "a", - "99": "c" - } - ], - "155": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "f" - } - ], - "156": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "c", - "99": "a", - "100": "d", - "101": "e" - }, - { - "97": "c", - "98": "a", - "99": "b", - "100": "d", - "101": "e" - }, - { - "97": "c", - "98": "b", - "99": "a", - "100": "d", - "101": "e" - } - ], - "157": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - } - ], - "158": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "c", - "99": "a", - "100": "d" - }, - { - "97": "c", - "98": "a", - "99": "b", - "100": "d" - }, - { - "97": "c", - "98": "b", - "99": "a", - "100": "d" - } - ], - "159": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "160": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "161": [ - { - "97": "a", - "98": "b" - } - ], - "162": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l" - } - ], - "163": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "164": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - } - ], - "165": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - } - ], - "166": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "e", - "101": "d", - "102": "g", - "103": "f", - "104": "h", - "105": "i" - } - ], - "167": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - } - ], - "168": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - } - ], - "169": [ - { - "97": "a" - } - ], - "170": [ - { - "97": "a" - } - ], - "171": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "172": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "173": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "174": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "a", - "98": "b", - "99": "e", - "100": "f", - "101": "c", - "102": "d", - "103": "g", - "104": "i", - "105": "h", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "f", - "100": "e", - "101": "d", - "102": "c", - "103": "g", - "104": "i", - "105": "h", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "e", - "100": "f", - "101": "a", - "102": "b", - "103": "h", - "104": "i", - "105": "g", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "d", - "98": "c", - "99": "f", - "100": "e", - "101": "b", - "102": "a", - "103": "h", - "104": "i", - "105": "g", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "e", - "98": "f", - "99": "a", - "100": "b", - "101": "c", - "102": "d", - "103": "i", - "104": "g", - "105": "h", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "e", - "98": "f", - "99": "c", - "100": "d", - "101": "a", - "102": "b", - "103": "i", - "104": "h", - "105": "g", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "f", - "98": "e", - "99": "b", - "100": "a", - "101": "d", - "102": "c", - "103": "i", - "104": "g", - "105": "h", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "f", - "98": "e", - "99": "d", - "100": "c", - "101": "b", - "102": "a", - "103": "i", - "104": "h", - "105": "g", - "106": "k", - "107": "j", - "108": "l" - } - ], - "175": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - } - ], - "176": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "177": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "n" - } - ], - "178": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "179": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "180": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k" - } - ], - "181": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "j", - "106": "i", - "107": "k" - } - ], - "182": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "183": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - } - ], - "184": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - } - ], - "185": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - } - ], - "186": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - } - ], - "187": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "a", - "98": "b", - "99": "e", - "100": "f", - "101": "c", - "102": "d", - "103": "g", - "104": "i", - "105": "h", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "n", - "111": "o" - }, - { - "97": "b", - "98": "a", - "99": "f", - "100": "e", - "101": "d", - "102": "c", - "103": "g", - "104": "i", - "105": "h", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "n", - "111": "o" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "c", - "98": "d", - "99": "e", - "100": "f", - "101": "a", - "102": "b", - "103": "h", - "104": "i", - "105": "g", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "f", - "102": "e", - "103": "h", - "104": "g", - "105": "i", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "n", - "111": "o" - }, - { - "97": "d", - "98": "c", - "99": "f", - "100": "e", - "101": "b", - "102": "a", - "103": "h", - "104": "i", - "105": "g", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "n", - "111": "o" - }, - { - "97": "e", - "98": "f", - "99": "a", - "100": "b", - "101": "c", - "102": "d", - "103": "i", - "104": "g", - "105": "h", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "e", - "98": "f", - "99": "c", - "100": "d", - "101": "a", - "102": "b", - "103": "i", - "104": "h", - "105": "g", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o" - }, - { - "97": "f", - "98": "e", - "99": "b", - "100": "a", - "101": "d", - "102": "c", - "103": "i", - "104": "g", - "105": "h", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "n", - "111": "o" - }, - { - "97": "f", - "98": "e", - "99": "d", - "100": "c", - "101": "b", - "102": "a", - "103": "i", - "104": "h", - "105": "g", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "n", - "111": "o" - } - ], - "188": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "a", - "98": "b", - "99": "e", - "100": "f", - "101": "c", - "102": "d", - "103": "g", - "104": "i", - "105": "h", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "c", - "98": "d", - "99": "e", - "100": "f", - "101": "a", - "102": "b", - "103": "h", - "104": "i", - "105": "g", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "e", - "98": "f", - "99": "a", - "100": "b", - "101": "c", - "102": "d", - "103": "i", - "104": "g", - "105": "h", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "e", - "98": "f", - "99": "c", - "100": "d", - "101": "a", - "102": "b", - "103": "i", - "104": "h", - "105": "g", - "106": "j", - "107": "k", - "108": "l" - } - ], - "189": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - } - ], - "190": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "191": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n", - "111": "o", - "112": "p", - "113": "q", - "114": "r" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i", - "106": "k", - "107": "j", - "108": "m", - "109": "l", - "110": "n", - "111": "o", - "112": "q", - "113": "p", - "114": "r" - } - ], - "192": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m" - } - ], - "193": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - } - ], - "194": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - } - ], - "195": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "i", - "103": "g", - "104": "h", - "105": "f", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "i", - "103": "h", - "104": "g", - "105": "f", - "106": "j" - } - ], - "196": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "g", - "103": "f", - "104": "h" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "e", - "102": "g", - "103": "f", - "104": "h" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "e", - "102": "g", - "103": "f", - "104": "h" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e", - "102": "g", - "103": "f", - "104": "h" - } - ], - "197": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f" - } - ], - "198": [ - { - "97": "a", - "98": "b" - } - ], - "199": [ - { - "97": "a", - "98": "b", - "99": "c" - } - ], - "200": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "h", - "102": "f", - "103": "g", - "104": "e", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "h", - "102": "g", - "103": "f", - "104": "e", - "105": "i", - "106": "k", - "107": "j", - "108": "l" - } - ], - "201": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - } - ], - "202": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "203": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g" - } - ], - "204": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - } - ], - "205": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d" - } - ], - "206": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - } - ], - "207": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k" - } - ], - "208": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l", - "109": "m" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "l", - "108": "k", - "109": "m" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m" - } - ], - "209": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j" - } - ], - "210": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - } - ], - "211": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - } - ], - "212": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - } - ], - "213": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - } - ], - "214": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i" - } - ], - "215": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i", - "106": "j" - } - ], - "216": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "c", - "98": "d", - "99": "a", - "100": "b", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i" - }, - { - "97": "c", - "98": "d", - "99": "b", - "100": "a", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i" - }, - { - "97": "d", - "98": "c", - "99": "a", - "100": "b", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i" - }, - { - "97": "d", - "98": "c", - "99": "b", - "100": "a", - "101": "e", - "102": "g", - "103": "f", - "104": "h", - "105": "i" - } - ], - "217": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - } - ], - "218": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i" - } - ], - "219": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "g", - "103": "f", - "104": "h" - } - ], - "220": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e" - } - ], - "221": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l", - "109": "m", - "110": "n" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "f", - "102": "e", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "l", - "108": "k", - "109": "m", - "110": "n" - } - ], - "222": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "223": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "a", - "98": "b", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "h", - "104": "g", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - } - ], - "224": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "a", - "98": "c", - "99": "b", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "j", - "106": "i", - "107": "k", - "108": "l" - } - ], - "225": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - }, - { - "97": "b", - "98": "a", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "i", - "105": "h", - "106": "j", - "107": "k", - "108": "l" - } - ], - "226": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j" - } - ], - "227": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - }, - { - "97": "b", - "98": "a", - "99": "d", - "100": "c", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i" - } - ], - "228": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - } - ], - "229": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h", - "105": "i", - "106": "j", - "107": "k", - "108": "l" - } - ], - "230": [ - { - "97": "a", - "98": "b", - "99": "c", - "100": "d", - "101": "e", - "102": "f", - "103": "g", - "104": "h" - } - ] -} diff --git a/examples/inputs/poscar_to_df.py b/examples/inputs/poscar_to_df.py index bd496c49..012d700d 100644 --- a/examples/inputs/poscar_to_df.py +++ b/examples/inputs/poscar_to_df.py @@ -5,13 +5,12 @@ import os import pandas as pd -from pymatgen.core import Composition, Structure -from tqdm import tqdm - -from aviary.wren.utils import ( +from pymatgen.analysis.prototypes import ( count_wyckoff_positions, get_protostructure_label_from_spglib, ) +from pymatgen.core import Composition, Structure +from tqdm import tqdm tqdm.pandas() # prime progress_map functionality diff --git a/examples/notebooks/Roost.ipynb b/examples/notebooks/Roost.ipynb index 7f53ec1b..74379cde 100644 --- a/examples/notebooks/Roost.ipynb +++ b/examples/notebooks/Roost.ipynb @@ -28,17 +28,17 @@ "\n", "import pandas as pd\n", "import torch\n", + "from pymatgen.analysis.prototypes import (\n", + " count_wyckoff_positions,\n", + " get_protostructure_label_from_spglib,\n", + ")\n", "from pymatgen.core import Structure\n", "from sklearn.model_selection import train_test_split as split\n", "\n", "from aviary.roost.data import CompositionData\n", "from aviary.roost.data import collate_batch as roost_cb\n", "from aviary.roost.model import Roost\n", - "from aviary.utils import results_multitask, train_ensemble\n", - "from aviary.wren.utils import (\n", - " count_wyckoff_positions,\n", - " get_protostructure_label_from_spglib,\n", - ")" + "from aviary.utils import results_multitask, train_ensemble" ] }, { @@ -239,7 +239,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.2" + "version": "3.12.9" }, "vscode": { "interpreter": { diff --git a/examples/notebooks/Wren.ipynb b/examples/notebooks/Wren.ipynb index 5be4cfa2..413d4981 100644 --- a/examples/notebooks/Wren.ipynb +++ b/examples/notebooks/Wren.ipynb @@ -28,17 +28,17 @@ "\n", "import pandas as pd\n", "import torch\n", + "from pymatgen.analysis.prototypes import (\n", + " count_wyckoff_positions,\n", + " get_protostructure_label_from_spglib,\n", + ")\n", "from pymatgen.core import Structure\n", "from sklearn.model_selection import train_test_split as split\n", "\n", "from aviary.utils import results_multitask, train_ensemble\n", "from aviary.wren.data import WyckoffData\n", "from aviary.wren.data import collate_batch as wren_cb\n", - "from aviary.wren.model import Wren\n", - "from aviary.wren.utils import (\n", - " count_wyckoff_positions,\n", - " get_protostructure_label_from_spglib,\n", - ")" + "from aviary.wren.model import Wren" ] }, { diff --git a/examples/wrenformer/mat_bench/compare_spglib_vs_aflow_wyckoff_labels.py b/examples/wrenformer/mat_bench/compare_spglib_vs_aflow_wyckoff_labels.py index b6339be4..3fbc8db2 100644 --- a/examples/wrenformer/mat_bench/compare_spglib_vs_aflow_wyckoff_labels.py +++ b/examples/wrenformer/mat_bench/compare_spglib_vs_aflow_wyckoff_labels.py @@ -4,11 +4,14 @@ import pandas as pd import pymatviz as pmv from matminer.datasets import load_dataset +from pymatgen.analysis.prototypes import ( + get_protostructure_label_from_aflow, + get_protostructure_label_from_spglib, +) from pymatgen.core import Structure from pymatgen.symmetry.analyzer import SpacegroupAnalyzer from tqdm import tqdm -import aviary.wren.utils as wren_utils from aviary import ROOT from examples.wrenformer.mat_bench import DATA_PATHS @@ -36,17 +39,15 @@ # takes ~6h (when running uninterrupted) for idx, struct in tqdm(df_perov.structure.items(), total=len(df_perov)): if pd.isna(df_perov.aflow_wyckoff[idx]): - df_perov.loc[idx, "aflow_wyckoff"] = ( - wren_utils.get_protostructure_label_from_aflow( - struct, "/Users/janosh/bin/aflow" - ) + df_perov.loc[idx, "aflow_wyckoff"] = get_protostructure_label_from_aflow( + struct, "/Users/janosh/bin/aflow" ) # %% # takes ~30 sec for struct in tqdm(df_perov.structure, total=len(df_perov)): - wren_utils.get_protostructure_label_from_spglib(struct) + get_protostructure_label_from_spglib(struct) # %% diff --git a/examples/wrenformer/mat_bench/readme.md b/examples/wrenformer/mat_bench/readme.md index 5b8882bd..1e6edb1a 100644 --- a/examples/wrenformer/mat_bench/readme.md +++ b/examples/wrenformer/mat_bench/readme.md @@ -24,7 +24,7 @@ According to Rhys, Wren could run 500 epochs in 5.5 h on a P100 training on 120k ```py import pandas as pd -from aviary.wren.utils import count_wyckoff_positions +from pymatgen.analysis.prototypes import count_wyckoff_positions from examples.wrenformer.mat_bench import DATA_PATHS df = pd.read_json(DATA_PATHS["matbench_mp_e_form"]) diff --git a/examples/wrenformer/mat_bench/save_matbench_aflow_labels.py b/examples/wrenformer/mat_bench/save_matbench_aflow_labels.py index fc6d894a..abd7f50a 100644 --- a/examples/wrenformer/mat_bench/save_matbench_aflow_labels.py +++ b/examples/wrenformer/mat_bench/save_matbench_aflow_labels.py @@ -1,9 +1,9 @@ import pandas as pd from matbench import MatbenchBenchmark +from pymatgen.analysis.prototypes import get_protostructure_label_from_spglib from tqdm import tqdm from aviary import ROOT -from aviary.wren.utils import get_protostructure_label_from_spglib __author__ = "Janosh Riebesell" __date__ = "2022-04-11" diff --git a/pyproject.toml b/pyproject.toml index 0f05974e..93315c70 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "aviary" -version = "1.1.1" +version = "1.2.0" description = "A collection of machine learning models for materials discovery" authors = [{ name = "Rhys Goodall", email = "rhys.goodall@outlook.com" }] readme = "README.md" @@ -37,7 +37,7 @@ requires-python = ">=3.9" dependencies = [ "numpy>=2,<3", "pandas", - "pymatgen", + "pymatgen>2025.3.10", "scikit_learn", "tensorboard", "torch>=2.3.0", @@ -49,8 +49,7 @@ dependencies = [ Repo = "https://github.com/CompRhys/aviary" [project.optional-dependencies] -test = ["matminer", "moyopy>=0.3.3", "pytest", "pytest-cov", "pyxtal"] -pyxtal = ["pyxtal"] +test = ["matminer", "moyopy>=0.3.3", "pytest", "pytest-cov"] moyopy = ["moyopy>=0.3.3"] [tool.setuptools.packages] diff --git a/tests/conftest.py b/tests/conftest.py index 15cb7cb5..ffeac5af 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,8 +3,7 @@ import pytest import torch from matminer.datasets import load_dataset - -from aviary.wren.utils import get_protostructure_label_from_spglib +from pymatgen.analysis.prototypes import get_protostructure_label_from_spglib __author__ = "Janosh Riebesell" __date__ = "2022-04-09" diff --git a/tests/data/ABC6D2_mC40_15_e_e_3f_f.cif b/tests/data/ABC6D2_mC40_15_e_e_3f_f.cif deleted file mode 100644 index 25bf163d..00000000 --- a/tests/data/ABC6D2_mC40_15_e_e_3f_f.cif +++ /dev/null @@ -1,71 +0,0 @@ -# CIF file - -data_findsym-output -_audit_creation_method FINDSYM - -_chemical_name_mineral 'Esseneite' -_chemical_formula_sum 'Ca Fe O6 Si2' - -loop_ -_publ_author_name - 'Michael A. Cosca' - 'Donald R. Peacor' -_journal_name_full -; -American Mineralogist -; -_journal_volume 72 -_journal_year 1987 -_journal_page_first 148 -_journal_page_last 156 -_publ_Section_title -; - Chemistry and structure of esseneite (CaFe$^{3+}$AlSiO$_6$), a new pyroxene produced by pyrometamorphism -; - -# Found in AMS Database - -_aflow_proto 'ABC6D2_mC40_15_e_e_3f_f' -_aflow_params 'a,b/a,c/a,\beta,y1,y2,x3,y3,z3,x4,y4,z4,x5,y5,z5,x6,y6,z6' -_aflow_params_values '9.79,0.901123595506,0.548518896834,105.81,0.3082,-0.0942,0.3888,0.4123,0.8659,0.1365,0.2411,0.6799,0.1468,0.4802,0.0124,0.2117,0.4057,0.7764' -_aflow_Strukturbericht 'None' -_aflow_Pearson 'mC40' - -_symmetry_space_group_name_Hall "-C 2yc" -_symmetry_space_group_name_H-M "C 1 2/c 1" -_symmetry_Int_Tables_number 15 - -_cell_length_a 9.79000 -_cell_length_b 8.82200 -_cell_length_c 5.37000 -_cell_angle_alpha 90.00000 -_cell_angle_beta 105.81000 -_cell_angle_gamma 90.00000 - -loop_ -_space_group_symop_id -_space_group_symop_operation_xyz -1 x,y,z -2 -x,y,-z+1/2 -3 -x,-y,-z -4 x,-y,z+1/2 -5 x+1/2,y+1/2,z -6 -x+1/2,y+1/2,-z+1/2 -7 -x+1/2,-y+1/2,-z -8 x+1/2,-y+1/2,z+1/2 - -loop_ -_atom_site_label -_atom_site_type_symbol -_atom_site_symmetry_multiplicity -_atom_site_Wyckoff_label -_atom_site_fract_x -_atom_site_fract_y -_atom_site_fract_z -_atom_site_occupancy -Ca1 Ca 4 e 0.00000 0.30820 0.25000 1.00000 -Fe1 Fe 4 e 0.00000 -0.09420 0.25000 1.00000 -O1 O 8 f 0.38880 0.41230 0.86590 1.00000 -O2 O 8 f 0.13650 0.24110 0.67990 1.00000 -O3 O 8 f 0.14680 0.48020 0.01240 1.00000 -Si1 Si 8 f 0.21170 0.40570 0.77640 1.00000 diff --git a/tests/data/U2Pa4Tc6.json b/tests/data/U2Pa4Tc6.json deleted file mode 100644 index aa7ba3b8..00000000 --- a/tests/data/U2Pa4Tc6.json +++ /dev/null @@ -1,107 +0,0 @@ -{ - "@module": "pymatgen.core.structure", - "@class": "Structure", - "charge": 0, - "lattice": { - "matrix": [ - [5.989671, 0.00015953, 7.795e-05], - [0.00021958, 8.25008569, -0.03720131], - [-2.99487801, -4.14847393, 5.20632921] - ], - "pbc": [true, true, true], - "a": 5.9896710026317, - "b": 8.250169566622487, - "c": 7.299657121096198, - "alpha": 124.85712587044729, - "beta": 114.22257511338135, - "gamma": 89.99695241219993, - "volume": 256.349880211745 - }, - "properties": {}, - "sites": [ - { - "species": [{"element": "U", "occu": 1}], - "abc": [0.49997316, 0.25000333, 0.50000537], - "xyz": [1.4972745454666476, -0.011630586301441285, 2.5939310845153174], - "properties": {}, - "label": "U" - }, - { - "species": [{"element": "U", "occu": 1}], - "abc": [0.50002684, 0.74999667, 0.49999463], - "xyz": [1.497738024533353, 4.113401876301443, 2.5752747654846826], - "properties": {}, - "label": "U" - }, - { - "species": [{"element": "Pa", "occu": 1}], - "abc": [0.16664895, 0.91662717, 0.83327202], - "xyz": [-1.4971743930568415, 4.105472032220753, 4.304201716381764], - "properties": {}, - "label": "Pa" - }, - { - "species": [{"element": "Pa", "occu": 1}], - "abc": [0.16662875, 0.41663202, 0.83327108], - "xyz": [-1.4974023581607492, -0.019526903520663105, 4.322797295431363], - "properties": {}, - "label": "Pa" - }, - { - "species": [{"element": "Pa", "occu": 1}], - "abc": [0.83337125, 0.58336798, 0.16672892], - "xyz": [4.492414928160749, 4.121298193520663, 0.8464085545686368], - "properties": {}, - "label": "Pa" - }, - { - "species": [{"element": "Pa", "occu": 1}], - "abc": [0.83335105, 0.08337283, 0.16672798], - "xyz": [4.4921869630568425, -0.003700742220752091, 0.8650041336182359], - "properties": {}, - "label": "Pa" - }, - { - "species": [{"element": "Tc", "occu": 1}], - "abc": [5.1e-07, 0.74999811, 0.99999918], - "xyz": [-2.994707814882828, 2.03907814666803, 5.178424028660278], - "properties": {}, - "label": "Tc" - }, - { - "species": [{"element": "Tc", "occu": 1}], - "abc": [0.99999949, 0.25000189, 8.2e-07], - "xyz": [5.989720384882829, 2.062693143331971, -0.0092181786602782], - "properties": {}, - "label": "Tc" - }, - { - "species": [{"element": "Tc", "occu": 1}], - "abc": [0.49999907, 0.74998284, 0.99999871], - "xyz": [0.00012046423061040414, 2.0390338824125678, 5.1784611246373045], - "properties": {}, - "label": "Tc" - }, - { - "species": [{"element": "Tc", "occu": 1}], - "abc": [0.0, 0.0, 0.5], - "xyz": [-1.497439005, -2.074236965, 2.603164605], - "properties": {}, - "label": "Tc" - }, - { - "species": [{"element": "Tc", "occu": 1}], - "abc": [0.0, 0.5, 0.5], - "xyz": [-1.497329215, 2.0508058800000004, 2.5845639499999997], - "properties": {}, - "label": "Tc" - }, - { - "species": [{"element": "Tc", "occu": 1}], - "abc": [0.50000093, 0.25001716, 1.29e-06], - "xyz": [2.9948921057693902, 2.062737407587434, -0.0092552746373052], - "properties": {}, - "label": "Tc" - } - ] -} diff --git a/tests/test_wyckoff_ops.py b/tests/test_wyckoff_ops.py deleted file mode 100644 index 66ea0cac..00000000 --- a/tests/test_wyckoff_ops.py +++ /dev/null @@ -1,408 +0,0 @@ -import inspect -import re -from itertools import permutations, product -from shutil import which - -import pytest -from pymatgen.core.structure import Composition, Lattice, Structure -from pymatgen.symmetry.analyzer import SpacegroupAnalyzer - -from aviary.wren.utils import ( - _find_translations, - count_crystal_dof, - count_crystal_sites, - count_distinct_wyckoff_letters, - count_wyckoff_positions, - get_anonymous_formula_from_prototype_formula, - get_formula_from_protostructure_label, - get_protostructure_label, - get_protostructure_label_from_aflow, - get_protostructure_label_from_moyopy, - get_protostructure_label_from_spg_analyzer, - get_protostructure_label_from_spglib, - get_protostructures_from_aflow_label_and_composition, - get_prototype_formula_from_composition, - get_prototype_from_protostructure, - get_random_structure_for_protostructure, - relab_dict, -) - -from .conftest import TEST_DIR - -try: - import pyxtal -except ImportError: - pyxtal = None - - -PROTOSTRUCTURE_SET = [ - ("A20BC14D8E5F2_oP800_61_40c_2c_28c_16c_10c_4c:C-Cd-H-N-O-S"), - ("ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si"), - ("ABC6D2_mC40_15_e_a_3f_f:Ca-Fe-O-Si"), - ("A6B11CD7_aP50_2_6i_ac10i_i_7i:C-H-N-O"), - ("ABC2D2_mC24_15_e_e_f_f:Ca-Fe-O-Si"), - ("A3B2CD4_tP10_115_ag_g_b_cdg:Al-Ce-Ga-Pd"), - ("AB2_cF576_228_h_fgh:Ba-Ti"), - ("AB3C_cP5_221_a_c_b:Ba-O-Ti"), -] - -TEST_STRUCTS = [ - Structure( # NaCl structure - lattice=[[2, 2, 0], [0, 2, 2], [2, 0, 2]], - species=["Na", "Cl"], - coords=[[0, 0, 0], [0.5, 0.5, 0.5]], - ), - Structure( # CsCl structure - lattice=[[4, 0, 0], [0, 4, 0], [0, 0, 4]], - species=["Cs", "Cl"], - coords=[[0, 0, 0], [0.5, 0.5, 0.5]], - ), - Structure( # ZnO zincblende structure - lattice=[[2, 2, 0], [0, 2, 2], [2, 0, 2]], - species=["Zn", "O"], - coords=[[0, 0, 0], [0.25, 0.25, 0.25]], - ), - Structure( # ZnO wurtzite structure - lattice=Lattice.from_parameters( - a=3.8227, b=3.8227, c=6.2607, alpha=90, beta=90, gamma=120 - ), - species=["Zn", "O", "Zn", "O"], - coords=[ - [1 / 3, 2 / 3, 0], - [2 / 3, 1 / 3, 0.3748], - [2 / 3, 1 / 3, 1 / 2], - [1 / 3, 2 / 3, 1 / 2 + 0.3748], - ], - ), - Structure( - lattice=[[3.9, 0, 0], [0, 3.9, 0], [0, 0, 3.9]], - species=["Sr", "Ti", "O", "O", "O"], - coords=[[0, 0, 0], [0.5, 0.5, 0.5], [0.5, 0.5, 0], [0.5, 0, 0.5], [0, 0.5, 0.5]], - ), - Structure( - lattice=[[5.76, 0, 0], [0, 5.76, 0], [0, 0, 5.76]], - species=["Al", "Fe", "Fe", "Fe", "Al", "Fe", "Fe", "Fe"], - coords=[ - [0, 0, 0], - [0.25, 0.25, 0.25], - [0.5, 0.5, 0], - [0.75, 0.75, 0.25], - [0, 0.5, 0.5], - [0.25, 0.75, 0.75], - [0.5, 0, 0.5], - [0.75, 0.25, 0.75], - ], - ), - Structure.from_file(f"{TEST_DIR}/data/ABC6D2_mC40_15_e_e_3f_f.cif"), -] - -TEST_PROTOSTRUCTURES = [ - "AB_cF8_225_a_b:Cl-Na", - "AB_cP2_221_a_b:Cl-Cs", - "AB_cF8_216_a_c:O-Zn", - "AB_hP4_186_b_b:O-Zn", - "A3BC_cP5_221_c_a_b:O-Sr-Ti", - "AB3_tP4_115_a_cg:Al-Fe", - "ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si", -] - - -@pytest.mark.parametrize("structure, expected", zip(TEST_STRUCTS, TEST_PROTOSTRUCTURES)) -def test_get_protostructure_label_from_spglib(structure, expected): - """Check that spglib gives correct protostructure label simple cases.""" - assert get_protostructure_label_from_spglib(structure) == expected - - -def test_get_protostructure_label_from_spglib_edge_case(): - """Check edge case where the symmetry precision is too low.""" - struct = Structure.from_file(f"{TEST_DIR}/data/U2Pa4Tc6.json") - - defaults = inspect.signature(get_protostructure_label_from_spglib).parameters - - assert defaults["init_symprec"].default == 0.1 - - spg_analyzer = SpacegroupAnalyzer( - struct, symprec=defaults["init_symprec"].default, angle_tolerance=5 - ) - - raises_str = ( - "Invalid WP multiplicities - A2B3C_hP6_191_c_2g_a:Pa-Tc-U, " - "expected U(PaTc3)2 to be UPa2Tc3" - ) - with pytest.raises(ValueError, match=re.escape(raises_str)): - get_protostructure_label_from_spg_analyzer(spg_analyzer, raise_errors=True) - - assert ( - get_protostructure_label_from_spg_analyzer(spg_analyzer, raise_errors=False) - == raises_str - ) - - # Test that it gives invalid protostructure if fallback is None. - with pytest.raises(ValueError, match=re.escape(raises_str)): - get_protostructure_label_from_spglib( - struct, raise_errors=True, fallback_symprec=None - ) - - assert ( - get_protostructure_label_from_spglib( - struct, raise_errors=False, fallback_symprec=None - ) - == raises_str - ) - - assert get_protostructure_label_from_spglib(struct, raise_errors=True) == ( - "A2B3C_hP6_191_c_g_a:Pa-Tc-U" - ) - - assert get_protostructure_label_from_spglib(struct, raise_errors=False) == ( - "A2B3C_hP6_191_c_g_a:Pa-Tc-U" - ) - - -@pytest.mark.parametrize( - "protostructure_label, expected", - [ - ("ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si", 6), # esseneite - ("A6B11CD7_aP50_2_6i_ac10i_i_7i:C-H-N-O", 26), - ("foo_bar_47_abc_A_b:X-Y-Z", 5), - ], -) -def test_count_wyckoff_positions(protostructure_label, expected): - count = count_wyckoff_positions(protostructure_label) - assert isinstance(count, int) - assert count == expected - - -def test_count_crystal_dof(): - """Count the number of coarse-grained parameters in esseneite""" - count = count_crystal_dof("ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si") - assert isinstance(count, int) - assert count == 18 - - -def test_count_crystal_sites(): - """Count the number of sites in esseneite""" - count = count_crystal_sites("ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si") - assert isinstance(count, int) - assert count == 40 - - -@pytest.mark.parametrize( - "protostructure_label, expected", - [ - ("ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si", "ABC2D6_mC40_15_e_e_f_3f"), - ("ABC6D2_mC40_15_e_a_3f_f:Ca-Fe-O-Si", "ABC2D6_mC40_15_a_e_f_3f"), - # this case failing means doesn't handle single element materials - ("A_tI8_141_ea:Ca", "A_tI8_141_ae"), # not ea is non-canonical - # this case failing means not reordering elements based on int but first digit - ("A4BC20D2_oC108_41_2b_a_10b_b:B-Ca-H-N", "AB2C4D20_oC108_41_a_b_2b_10b"), - ], -) -def test_get_prototype_from_protostructure(protostructure_label, expected): - """Get a recanonicalized prototype string without chemical system""" - aflow_label, chemsys = protostructure_label.split(":") - prototype_formula, pearson_symbol, spg_num, *wyckoffs = aflow_label.split("_") - - element_wyckoff = "_".join(wyckoffs) - - isopointal_element_wyckoffs = list( - {element_wyckoff.translate(str.maketrans(trans)) for trans in relab_dict[spg_num]} - ) - - protostructure_labels = [ - f"{prototype_formula}_{pearson_symbol}_{spg_num}_{element_wyckoff}:{chemsys}" - for element_wyckoff in isopointal_element_wyckoffs - ] - - assert all( - get_prototype_from_protostructure(protostructure_label) == expected - for protostructure_label in protostructure_labels - ) - - -@pytest.mark.parametrize( - "aflow_label, composition, expected", - [ - ( - "AB2C3D4_tP10_115_a_g_bg_cdg", - "Ce2Al3GaPd4", - "A3B2CD4_tP10_115_ag_g_b_cdg:Al-Ce-Ga-Pd", - ), - # checks that we can handle cases where one element could be on multiple sites - ( - "ABC3_oP20_62_a_c_cd", - "YbNiO3", - "AB3C_oP20_62_c_cd_a:Ni-O-Yb AB3C_oP20_62_a_cd_c:Ni-O-Yb", - ), - ], -) -def test_get_protostructures_from_aflow_label_and_composition( - aflow_label, composition, expected -): - protostructures = get_protostructures_from_aflow_label_and_composition( - aflow_label, Composition(composition) - ) - assert set(protostructures) == set(expected.split(" ")) - - # check the round trip - assert all( - get_prototype_from_protostructure(protostructure) == aflow_label - for protostructure in protostructures - ) - - -@pytest.mark.parametrize( - "dict1, dict2, expected", - [ - # Test case 1: Simple valid translation - ({"a": 1, "b": 2}, {"x": 1, "y": 2}, [{"a": "x", "b": "y"}]), - # Test case 2: Multiple valid translations - ( - {"a": 1, "b": 1, "c": 1}, - {"x": 1, "y": 1, "z": 1}, - [dict(zip(["a", "b", "c"], perm)) for perm in permutations(["x", "y", "z"])], - ), - # Test case 3: No valid translations (different values) - ({"a": 1, "b": 2}, {"x": 1, "y": 3}, []), - # Test case 4: No valid translations (different number of items) - ({"a": 1, "b": 2}, {"x": 1, "y": 2, "z": 3}, []), - # Test case 5: Empty dictionaries - ({}, {}, [{}]), - # Test case 6: Larger dictionaries - ( - {"a": 1, "b": 4, "c": 3, "d": 4}, - {"w": 4, "x": 3, "y": 4, "z": 1}, - [ - {"a": "z", "b": "y", "c": "x", "d": "w"}, - {"a": "z", "b": "w", "c": "x", "d": "y"}, - ], - ), - ], -) -def test_find_translations(dict1, dict2, expected): - result = _find_translations(dict1, dict2) - assert len(result) == len(expected) - for translation in result: - assert translation in expected - - -# Additional test for performance with larger input -def test_find_translations_performance(): - dict1 = {f"key{idx}": idx for idx in range(8)} - dict2 = {f"val{idx}": idx for idx in range(8)} - result = _find_translations(dict1, dict2) - assert len(result) == 1 # There should be only one valid translation - - -@pytest.mark.parametrize( - "composition, expected", - [("Ce2Al3GaPd4", "A3B2CD4"), ("YbNiO3", "AB3C"), ("K2NaAlF6", "AB6C2D")], -) -def test_get_prototype_formula_from_composition(composition: str, expected: str): - assert get_prototype_formula_from_composition(Composition(composition)) == expected - - -@pytest.mark.parametrize( - "protostructure_label, expected", - [("AB3C_oP20_62_c_cd_a:Ni-O-Yb", "NiO3Yb")], -) -def test_get_formula_from_protostructure_label(protostructure_label: str, expected: str): - assert get_formula_from_protostructure_label(protostructure_label) == expected - - -@pytest.mark.parametrize( - "anonymous_formula, prototype_formula", - [("AB", "AB"), ("A2B", "AB2"), ("A3B2CD4", "AB2C3D4")], -) -def test_get_anonymous_formula_from_prototype_formula( - anonymous_formula: str, prototype_formula: str -): - assert ( - get_anonymous_formula_from_prototype_formula(anonymous_formula) - == prototype_formula - ) - - -@pytest.mark.parametrize( - "protostructure_label, expected", - [ - ("A20BC14D8E5F2_oP800_61_40c_2c_28c_16c_10c_4c:C-Cd-H-N-O-S", 1), - ("ABC6D2_mC40_15_e_e_3f_f:Ca-Fe-O-Si", 2), - ("ABC6D2_mC40_15_e_a_3f_f:Ca-Fe-O-Si", 3), - ("A6B11CD7_aP50_2_6i_ac10i_i_7i:C-H-N-O", 3), - ], -) -def test_count_distinct_wyckoff_letters(protostructure_label, expected): - assert count_distinct_wyckoff_letters(protostructure_label) == expected - - -@pytest.mark.skipif(which("aflow") is None, reason="AFLOW CLI not installed") -@pytest.mark.parametrize("structure, expected", zip(TEST_STRUCTS, TEST_PROTOSTRUCTURES)) -def test_get_protostructure_label_from_aflow(structure, expected): - """Check that AFLOW CLI gives correct protostructure label simple cases.""" - assert ( - get_protostructure_label_from_aflow(structure, aflow_executable=which("aflow")) - == expected - ) - - -@pytest.mark.parametrize("structure, expected", zip(TEST_STRUCTS, TEST_PROTOSTRUCTURES)) -def test_get_protostructure_label_from_moyopy(structure, expected): - """Check that moyopy gives correct protostructure label simple cases.""" - assert ( - get_protostructure_label_from_moyopy(structure) == expected - ), f"unexpected moyopy protostructure for {structure=}" - - -@pytest.mark.parametrize( - "protostructure", - PROTOSTRUCTURE_SET, -) -def test_moyopy_spglib_consistency(protostructure): - """Check that moyopy and spglib give consistent results.""" - struct = get_random_structure_for_protostructure(protostructure) - - moyopy_label = get_protostructure_label_from_moyopy(struct) - spglib_label = get_protostructure_label_from_spglib(struct) - - assert ( - moyopy_label == spglib_label - ), f"spglib moyopy protostructure mismatch for {protostructure}" - - -@pytest.mark.skipif(pyxtal is None, reason="pyxtal not installed") -@pytest.mark.xfail( - reason="pyxtal is non-deterministic and symmetry can increase in random crystal" -) -@pytest.mark.parametrize( - "protostructure, method", - list(product(PROTOSTRUCTURE_SET, ["spglib", "moyopy"])), -) -def test_get_random_structure_for_protostructure_roundtrip( - protostructure: str, method: str -): - """Check roundtrip for generating a random structure from a prototype string""" - assert protostructure == get_protostructure_label( - get_random_structure_for_protostructure(protostructure), - method=method, - ) - - -@pytest.mark.skipif(pyxtal is None, reason="pyxtal not installed") -@pytest.mark.parametrize( - "protostructure", - PROTOSTRUCTURE_SET, -) -def test_get_random_structure_for_protostructure_random(protostructure): - """Check roundtrip for generating a random structure from a prototype string""" - s1 = get_random_structure_for_protostructure(protostructure) - s2 = get_random_structure_for_protostructure(protostructure) - - assert s1.composition == s2.composition - assert s1.lattice != s2.lattice - - -if __name__ == "__main__": - import pytest - - pytest.main(["-v", __file__]) diff --git a/tests/wren/test_utils.py b/tests/wren/test_utils.py new file mode 100644 index 00000000..7beb365c --- /dev/null +++ b/tests/wren/test_utils.py @@ -0,0 +1,10 @@ +import pytest + + +def test_utils_import_error(): + with pytest.raises(ImportError) as exc_info: + from aviary.wren.utils import relab_dict # noqa: F401 + + assert "functionality from aviary.wren.utils has been moved to pymatgen" in str( + exc_info.value + ) From 8ce99d6748967aeeaafd49185db8b707db9d302c Mon Sep 17 00:00:00 2001 From: Rhys Goodall Date: Tue, 25 Mar 2025 21:45:01 -0400 Subject: [PATCH 2/3] clean: mat_bench -> matbench --- .../wrenformer/{mat_bench => matbench}/__init__.py | 0 .../compare_spglib_vs_aflow_wyckoff_labels.py | 2 +- .../wrenformer/{mat_bench => matbench}/make_plots.py | 12 ++++++------ .../{mat_bench => matbench}/plotting_functions.py | 3 ++- .../wrenformer/{mat_bench => matbench}/readme.md | 4 ++-- .../save_matbench_aflow_labels.py | 2 +- .../{mat_bench => matbench}/train_wrenformer.py | 8 ++++---- examples/wrenformer/{mat_bench => matbench}/utils.py | 0 8 files changed, 16 insertions(+), 15 deletions(-) rename examples/wrenformer/{mat_bench => matbench}/__init__.py (100%) rename examples/wrenformer/{mat_bench => matbench}/compare_spglib_vs_aflow_wyckoff_labels.py (98%) rename examples/wrenformer/{mat_bench => matbench}/make_plots.py (97%) rename examples/wrenformer/{mat_bench => matbench}/plotting_functions.py (99%) rename examples/wrenformer/{mat_bench => matbench}/readme.md (95%) rename examples/wrenformer/{mat_bench => matbench}/save_matbench_aflow_labels.py (100%) rename examples/wrenformer/{mat_bench => matbench}/train_wrenformer.py (96%) rename examples/wrenformer/{mat_bench => matbench}/utils.py (100%) diff --git a/examples/wrenformer/mat_bench/__init__.py b/examples/wrenformer/matbench/__init__.py similarity index 100% rename from examples/wrenformer/mat_bench/__init__.py rename to examples/wrenformer/matbench/__init__.py diff --git a/examples/wrenformer/mat_bench/compare_spglib_vs_aflow_wyckoff_labels.py b/examples/wrenformer/matbench/compare_spglib_vs_aflow_wyckoff_labels.py similarity index 98% rename from examples/wrenformer/mat_bench/compare_spglib_vs_aflow_wyckoff_labels.py rename to examples/wrenformer/matbench/compare_spglib_vs_aflow_wyckoff_labels.py index 3fbc8db2..471c94df 100644 --- a/examples/wrenformer/mat_bench/compare_spglib_vs_aflow_wyckoff_labels.py +++ b/examples/wrenformer/matbench/compare_spglib_vs_aflow_wyckoff_labels.py @@ -13,7 +13,7 @@ from tqdm import tqdm from aviary import ROOT -from examples.wrenformer.mat_bench import DATA_PATHS +from examples.wrenformer.matbench import DATA_PATHS __author__ = "Janosh Riebesell" __date__ = "2022-05-17" diff --git a/examples/wrenformer/mat_bench/make_plots.py b/examples/wrenformer/matbench/make_plots.py similarity index 97% rename from examples/wrenformer/mat_bench/make_plots.py rename to examples/wrenformer/matbench/make_plots.py index f324353b..dac82e3a 100644 --- a/examples/wrenformer/mat_bench/make_plots.py +++ b/examples/wrenformer/matbench/make_plots.py @@ -11,19 +11,19 @@ import pandas as pd import plotly.express as px import pymatviz as pmv -from matbench import MatbenchBenchmark -from matbench.constants import CLF_KEY, REG_KEY -from matbench.metadata import mbv01_metadata as matbench_metadata from sklearn.metrics import r2_score, roc_auc_score -from examples.wrenformer.mat_bench import DATA_PATHS -from examples.wrenformer.mat_bench.plotting_functions import ( +from examples.wrenformer.matbench import DATA_PATHS +from examples.wrenformer.matbench.plotting_functions import ( dataset_labels_html, error_heatmap, plot_leaderboard, scale_errors, ) -from examples.wrenformer.mat_bench.utils import recursive_dict_merge +from examples.wrenformer.matbench.utils import recursive_dict_merge +from matbench import MatbenchBenchmark +from matbench.constants import CLF_KEY, REG_KEY +from matbench.metadata import mbv01_metadata as matbench_metadata __author__ = "Janosh Riebesell" __date__ = "2022-04-25" diff --git a/examples/wrenformer/mat_bench/plotting_functions.py b/examples/wrenformer/matbench/plotting_functions.py similarity index 99% rename from examples/wrenformer/mat_bench/plotting_functions.py rename to examples/wrenformer/matbench/plotting_functions.py index 26e83764..33a1eb05 100644 --- a/examples/wrenformer/mat_bench/plotting_functions.py +++ b/examples/wrenformer/matbench/plotting_functions.py @@ -5,10 +5,11 @@ import numpy as np import plotly.express as px import plotly.io as pio +from sklearn.metrics import accuracy_score, auc, roc_curve + from matbench.constants import CLF_KEY, REG_KEY from matbench.metadata import mbv01_metadata from matbench.metadata import mbv01_metadata as matbench_metadata -from sklearn.metrics import accuracy_score, auc, roc_curve if TYPE_CHECKING: import pandas as pd diff --git a/examples/wrenformer/mat_bench/readme.md b/examples/wrenformer/matbench/readme.md similarity index 95% rename from examples/wrenformer/mat_bench/readme.md rename to examples/wrenformer/matbench/readme.md index 1e6edb1a..c447f4fc 100644 --- a/examples/wrenformer/mat_bench/readme.md +++ b/examples/wrenformer/matbench/readme.md @@ -4,7 +4,7 @@ This directory contains the files needed to create Matbench submissions for Roos Added in [aviary#44](https://github.com/CompRhys/aviary/pull/44). -Directory is named `mat_bench` to avoid shadowing the `matbench` package. +Directory is named `matbench` to avoid shadowing the `matbench` package. The important files are: @@ -25,7 +25,7 @@ According to Rhys, Wren could run 500 epochs in 5.5 h on a P100 training on 120k ```py import pandas as pd from pymatgen.analysis.prototypes import count_wyckoff_positions -from examples.wrenformer.mat_bench import DATA_PATHS +from examples.wrenformer.matbench import DATA_PATHS df = pd.read_json(DATA_PATHS["matbench_mp_e_form"]) diff --git a/examples/wrenformer/mat_bench/save_matbench_aflow_labels.py b/examples/wrenformer/matbench/save_matbench_aflow_labels.py similarity index 100% rename from examples/wrenformer/mat_bench/save_matbench_aflow_labels.py rename to examples/wrenformer/matbench/save_matbench_aflow_labels.py index abd7f50a..a0b4c128 100644 --- a/examples/wrenformer/mat_bench/save_matbench_aflow_labels.py +++ b/examples/wrenformer/matbench/save_matbench_aflow_labels.py @@ -1,9 +1,9 @@ import pandas as pd -from matbench import MatbenchBenchmark from pymatgen.analysis.prototypes import get_protostructure_label_from_spglib from tqdm import tqdm from aviary import ROOT +from matbench import MatbenchBenchmark __author__ = "Janosh Riebesell" __date__ = "2022-04-11" diff --git a/examples/wrenformer/mat_bench/train_wrenformer.py b/examples/wrenformer/matbench/train_wrenformer.py similarity index 96% rename from examples/wrenformer/mat_bench/train_wrenformer.py rename to examples/wrenformer/matbench/train_wrenformer.py index 14a6e118..103b5922 100644 --- a/examples/wrenformer/mat_bench/train_wrenformer.py +++ b/examples/wrenformer/matbench/train_wrenformer.py @@ -5,14 +5,14 @@ import pandas as pd import wandb -from matbench.metadata import mbv01_metadata -from matbench.task import MatbenchTask from matbench_discovery.slurm import slurm_submit from aviary.core import TaskType from aviary.train import train_wrenformer -from examples.wrenformer.mat_bench import DATA_PATHS -from examples.wrenformer.mat_bench.utils import merge_json_on_disk +from examples.wrenformer.matbench import DATA_PATHS +from examples.wrenformer.matbench.utils import merge_json_on_disk +from matbench.metadata import mbv01_metadata +from matbench.task import MatbenchTask __author__ = "Janosh Riebesell" __date__ = "2022-04-11" diff --git a/examples/wrenformer/mat_bench/utils.py b/examples/wrenformer/matbench/utils.py similarity index 100% rename from examples/wrenformer/mat_bench/utils.py rename to examples/wrenformer/matbench/utils.py From 4b858acdb842cdf1e26a03f9ee7f5f1039005d44 Mon Sep 17 00:00:00 2001 From: Rhys Goodall Date: Fri, 11 Apr 2025 14:03:20 -0400 Subject: [PATCH 3/3] tests: fix python version for ci --- .github/workflows/test.yml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 27cbae07..b0cfc0ec 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,15 @@ on: jobs: tests: - runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-14] + version: + - { python: "3.10", resolution: highest } + - { python: "3.12", resolution: lowest-direct } + runs-on: ${{ matrix.os }} + steps: - name: Check out repo uses: actions/checkout@v4 @@ -18,12 +26,10 @@ jobs: - name: Set up Python uses: actions/setup-python@v5 with: - python-version: 3.9 - cache: pip - cache-dependency-path: pyproject.toml + python-version: ${{ matrix.version.python }} - - name: Install uv - run: pip install uv + - name: Set up uv + uses: astral-sh/setup-uv@v2 - name: Install dependencies run: |