Source code for muesr.core.spg

# File from ASE distribution (GPL)
# Copyright (C) 2010, Jesper Friis
# (see accompanying license files for details).

"""Definition of the Spacegroup class.

This module only depends on NumPy and the space group database.
"""

from __future__ import print_function, division

import os
import warnings
from functools import total_ordering
from codecs import decode
import numpy as np
from muesr.core.isstr import isstr

# check if we have access to get_spacegroup from spglib
# https://atztogo.github.io/spglib/
has_spglib = False
try:
    import spglib                   # For version 1.9 or later
    has_spglib = True
except ImportError:
    try:
        from pyspglib import spglib  # For versions 1.8.x or before
        has_spglib = True
    except ImportError:
        pass

try:
    from StringIO import StringIO
except ImportError:
    from io import StringIO

import numpy as np

__all__ = ['Spacegroup']


class SpacegroupError(Exception):
    """Base exception for the spacegroup module."""
    pass


class SpacegroupNotFoundError(SpacegroupError):
    """Raised when given space group cannot be found in data base."""
    pass


class SpacegroupValueError(SpacegroupError):
    """Raised when arguments have invalid value."""
    pass


[docs]@total_ordering class Spacegroup(object): """A space group class. The instances of Spacegroup describes the symmetry operations for the given space group. Example: >>> from muesr.core.spg import Spacegroup >>> >>> sg = Spacegroup(225) >>> print('Space group', sg.no, sg.symbol) Space group 225 F m -3 m >>> sg.scaled_primitive_cell array([[ 0. , 0.5, 0.5], [ 0.5, 0. , 0.5], [ 0.5, 0.5, 0. ]]) >>> sites, kinds = sg.equivalent_sites([[0,0,0]]) >>> sites array([[ 0. , 0. , 0. ], [ 0. , 0.5, 0.5], [ 0.5, 0. , 0.5], [ 0.5, 0.5, 0. ]]) """ no = property( lambda self: self._no, doc='Space group number in International Tables of Crystallography.') symbol = property( lambda self: self._symbol, doc='Hermann-Mauguin (or international) symbol for the space group.') setting = property( lambda self: self._setting, doc='Space group setting. Either one or two.') lattice = property( lambda self: self._symbol[0], doc="""Lattice type: P primitive I body centering, h+k+l=2n F face centering, h,k,l all odd or even A,B,C single face centering, k+l=2n, h+l=2n, h+k=2n R rhombohedral centering, -h+k+l=3n (obverse); h-k+l=3n (reverse) """) centrosymmetric = property( lambda self: self._centrosymmetric, doc='Whether a center of symmetry exists.') scaled_primitive_cell = property( lambda self: self._scaled_primitive_cell, doc='Primitive cell in scaled coordinates as a matrix with the ' 'primitive vectors along the rows.') reciprocal_cell = property( lambda self: self._reciprocal_cell, doc='Tree Miller indices that span all kinematically non-forbidden ' 'reflections as a matrix with the Miller indices along the rows.') nsubtrans = property( lambda self: len(self._subtrans), doc='Number of cell-subtranslation vectors.') def _get_nsymop(self): """Returns total number of symmetry operations.""" if self.centrosymmetric: return 2 * len(self._rotations) * len(self._subtrans) else: return len(self._rotations) * len(self._subtrans) nsymop = property(_get_nsymop, doc='Total number of symmetry operations.') subtrans = property( lambda self: self._subtrans, doc='Translations vectors belonging to cell-sub-translations.') rotations = property( lambda self: self._rotations, doc='Symmetry rotation matrices. The invertions are not included ' 'for centrosymmetrical crystals.') translations = property( lambda self: self._translations, doc='Symmetry translations. The invertions are not included ' 'for centrosymmetrical crystals.') def __init__(self, spacegroup, setting=1, datafile=None): """Returns a new Spacegroup instance. Parameters: spacegroup : int | string | Spacegroup instance The space group number in International Tables of Crystallography or its Hermann-Mauguin symbol. E.g. spacegroup=225 and spacegroup='F m -3 m' are equivalent. setting : 1 | 2 Some space groups have more than one setting. `setting` determines Which of these should be used. datafile : None | string Path to database file. If `None`, the the default database will be used. """ if isinstance(spacegroup, Spacegroup): for k, v in spacegroup.__dict__.items(): setattr(self, k, v) return if not datafile: f = StringIO(decode(spacegroupdat,'zlib').decode('utf8')) else: datafile = get_datafile() f = open(datafile, 'r') try: _read_datafile(self, spacegroup, setting, f) finally: f.close() def __repr__(self): return 'Spacegroup(%d, setting=%d)' % (self.no, self.setting)
[docs] def todict(self): return {'number': self.no, 'setting': self.setting}
def __str__(self): """Return a string representation of the space group data in the same format as found the database.""" retval = [] # no, symbol retval.append('%-3d %s\n' % (self.no, self.symbol)) # setting retval.append(' setting %d\n' % (self.setting)) # centrosymmetric retval.append(' centrosymmetric %d\n' % (self.centrosymmetric)) # primitive vectors retval.append(' primitive vectors\n') for i in range(3): retval.append(' ') for j in range(3): retval.append(' %13.10f' % (self.scaled_primitive_cell[i, j])) retval.append('\n') # primitive reciprocal vectors retval.append(' reciprocal vectors\n') for i in range(3): retval.append(' ') for j in range(3): retval.append(' %3d' % (self.reciprocal_cell[i, j])) retval.append('\n') # sublattice retval.append(' %d subtranslations\n' % self.nsubtrans) for i in range(self.nsubtrans): retval.append(' ') for j in range(3): retval.append(' %13.10f' % (self.subtrans[i, j])) retval.append('\n') # symmetry operations nrot = len(self.rotations) retval.append(' %d symmetry operations (rot+trans)\n' % nrot) for i in range(nrot): retval.append(' ') for j in range(3): retval.append(' ') for k in range(3): retval.append(' %2d' % (self.rotations[i, j, k])) retval.append(' ') for j in range(3): retval.append(' %13.10f' % self.translations[i, j]) retval.append('\n') retval.append('\n') return ''.join(retval) def __eq__(self, other): return self.no == other.no and self.setting == other.setting def __ne__(self, other): return not self.__eq__(other) def __lt__(self, other): return self.no < other.no or ( self.no == other.no and self.setting < other.setting) def __index__(self): return self.no
[docs] def get_symop(self): """Returns all symmetry operations (including inversions and subtranslations) as a sequence of (rotation, translation) tuples.""" symop = [] parities = [1] if self.centrosymmetric: parities.append(-1) for parity in parities: for subtrans in self.subtrans: for rot, trans in zip(self.rotations, self.translations): newtrans = np.mod(trans + subtrans, 1) symop.append((parity * rot, newtrans)) return symop
[docs] def get_op(self): """Returns all symmetry operations (including inversions and subtranslations), but unlike get_symop(), they are returned as two ndarrays.""" if self.centrosymmetric: rot = np.tile(np.vstack((self.rotations, -self.rotations)), (self.nsubtrans, 1, 1)) trans = np.tile(np.vstack((self.translations, -self.translations)), (self.nsubtrans, 1)) trans += np.repeat(self.subtrans, 2 * len(self.rotations), axis=0) trans = np.mod(trans, 1) else: rot = np.tile(self.rotations, (self.nsubtrans, 1, 1)) trans = np.tile(self.translations, (self.nsubtrans, 1)) trans += np.repeat(self.subtrans, len(self.rotations), axis=0) trans = np.mod(trans, 1) return rot, trans
[docs] def get_rotations(self): """Return all rotations, including inversions for centrosymmetric crystals.""" if self.centrosymmetric: return np.vstack((self.rotations, -self.rotations)) else: return self.rotations
[docs] def equivalent_reflections(self, hkl): """Return all equivalent reflections to the list of Miller indices in hkl. Example: >>> from muesr.core.spg import Spacegroup >>> sg = Spacegroup(225) # fcc >>> sg.equivalent_reflections([[0, 0, 2]]) array([[ 0, 0, -2], [ 0, -2, 0], [-2, 0, 0], [ 2, 0, 0], [ 0, 2, 0], [ 0, 0, 2]]) """ hkl = np.array(hkl, dtype='int', ndmin=2) rot = self.get_rotations() n, nrot = len(hkl), len(rot) R = rot.transpose(0, 2, 1).reshape((3 * nrot, 3)).T refl = np.dot(hkl, R).reshape((n * nrot, 3)) ind = np.lexsort(refl.T) refl = refl[ind] diff = np.diff(refl, axis=0) mask = np.any(diff, axis=1) return np.vstack((refl[:-1][mask], refl[-1, :]))
[docs] def equivalent_lattice_points(self, uvw): """Return all lattice points equivalent to any of the lattice points in `uvw` with respect to rotations only. Only equivalent lattice points that conserves the distance to origo are included in the output (making this a kind of real space version of the equivalent_reflections() method). Example: >>> from ase.spacegroup import Spacegroup >>> sg = Spacegroup(225) # fcc >>> sg.equivalent_lattice_points([[0, 0, 2]]) array([[ 0, 0, -2], [ 0, -2, 0], [-2, 0, 0], [ 2, 0, 0], [ 0, 2, 0], [ 0, 0, 2]]) """ uvw = np.array(uvw, ndmin=2) rot = self.get_rotations() n, nrot = len(uvw), len(rot) directions = np.dot(uvw, rot).reshape((n * nrot, 3)) ind = np.lexsort(directions.T) directions = directions[ind] diff = np.diff(directions, axis=0) mask = np.any(diff, axis=1) return np.vstack((directions[:-1][mask], directions[-1:]))
[docs] def symmetry_normalised_reflections(self, hkl): """Returns an array of same size as *hkl*, containing the corresponding symmetry-equivalent reflections of lowest indices. Example: >>> from muesr.core.spg import Spacegroup >>> sg = Spacegroup(225) # fcc >>> sg.symmetry_normalised_reflections([[2, 0, 0], [0, 2, 0]]) array([[ 0, 0, -2], [ 0, 0, -2]]) """ hkl = np.array(hkl, dtype=int, ndmin=2) normalised = np.empty(hkl.shape, int) R = self.get_rotations().transpose(0, 2, 1) for i, g in enumerate(hkl): gsym = np.dot(R, g) j = np.lexsort(gsym.T)[0] normalised[i, :] = gsym[j] return normalised
[docs] def unique_reflections(self, hkl): """Returns a subset *hkl* containing only the symmetry-unique reflections. Example: >>> from muesr.core.spg import Spacegroup >>> sg = Spacegroup(225) # fcc >>> sg.unique_reflections([[ 2, 0, 0], ... [ 0, -2, 0], ... [ 2, 2, 0], ... [ 0, -2, -2]]) array([[2, 0, 0], [2, 2, 0]]) """ hkl = np.array(hkl, dtype=int, ndmin=2) hklnorm = self.symmetry_normalised_reflections(hkl) perm = np.lexsort(hklnorm.T) iperm = perm.argsort() xmask = np.abs(np.diff(hklnorm[perm], axis=0)).any(axis=1) mask = np.concatenate(([True], xmask)) imask = mask[iperm] return hkl[imask]
[docs] def equivalent_sites(self, scaled_positions, onduplicates='error', symprec=1e-3): """Returns the scaled positions and all their equivalent sites. Parameters: scaled_positions: list | array List of non-equivalent sites given in unit cell coordinates. onduplicates : 'keep' | 'replace' | 'warn' | 'error' Action if `scaled_positions` contain symmetry-equivalent positions: 'keep' ignore additional symmetry-equivalent positions 'replace' replace 'warn' like 'keep', but issue an UserWarning 'error' raises a SpacegroupValueError symprec: float Minimum "distance" betweed two sites in scaled coordinates before they are counted as the same site. Returns: sites: array A NumPy array of equivalent sites. kinds: list A list of integer indices specifying which input site is equivalent to the corresponding returned site. Example: >>> from muesr.core.spg import Spacegroup >>> sg = Spacegroup(225) # fcc >>> sites, kinds = sg.equivalent_sites([[0, 0, 0], [0.5, 0.0, 0.0]]) >>> sites array([[ 0. , 0. , 0. ], [ 0. , 0.5, 0.5], [ 0.5, 0. , 0.5], [ 0.5, 0.5, 0. ], [ 0.5, 0. , 0. ], [ 0. , 0.5, 0. ], [ 0. , 0. , 0.5], [ 0.5, 0.5, 0.5]]) >>> kinds [0, 0, 0, 0, 1, 1, 1, 1] """ kinds = [] sites = [] scaled = np.array(scaled_positions, ndmin=2) for kind, pos in enumerate(scaled): for rot, trans in self.get_symop(): site = np.mod(np.dot(rot, pos) + trans, 1.) if not sites: sites.append(site) kinds.append(kind) continue t = site - sites mask = np.all((abs(t) < symprec) | (abs(abs(t) - 1.0) < symprec), axis=1) if np.any(mask): ind = np.argwhere(mask)[0][0] if kinds[ind] == kind: pass elif onduplicates == 'keep': pass elif onduplicates == 'replace': kinds[ind] = kind elif onduplicates == 'warn': warnings.warn('scaled_positions %d and %d ' 'are equivalent' % (kinds[ind], kind)) elif onduplicates == 'error': raise SpacegroupValueError( 'scaled_positions %d and %d are equivalent' % ( kinds[ind], kind)) else: raise SpacegroupValueError( 'Argument "onduplicates" must be one of: ' '"keep", "replace", "warn" or "error".') else: sites.append(site) kinds.append(kind) return np.array(sites), kinds
[docs] def symmetry_normalised_sites(self, scaled_positions, map_to_unitcell=True): """Returns an array of same size as *scaled_positions*, containing the corresponding symmetry-equivalent sites of lowest indices. If *map_to_unitcell* is true, the returned positions are all mapped into the unit cell, i.e. lattice translations are included as symmetry operator. Example: >>> from muesr.core.spg import Spacegroup >>> sg = Spacegroup(225) # fcc >>> sg.symmetry_normalised_sites([[0.0, 0.5, 0.5], [1.0, 1.0, 0.0]]) array([[ 0., 0., 0.], [ 0., 0., 0.]]) """ scaled = np.array(scaled_positions, ndmin=2) normalised = np.empty(scaled.shape, np.float) rot, trans = self.get_op() for i, pos in enumerate(scaled): sympos = np.dot(rot, pos) + trans if map_to_unitcell: # Must be done twice, see the scaled_positions.py test sympos %= 1.0 sympos %= 1.0 j = np.lexsort(sympos.T)[0] normalised[i, :] = sympos[j] return normalised
[docs] def unique_sites(self, scaled_positions, symprec=1e-3, output_mask=False, map_to_unitcell=True): """Returns a subset of *scaled_positions* containing only the symmetry-unique positions. If *output_mask* is True, a boolean array masking the subset is also returned. If *map_to_unitcell* is true, all sites are first mapped into the unit cell making e.g. [0, 0, 0] and [1, 0, 0] equivalent. Example: >>> from muesr.core.spg import Spacegroup >>> sg = Spacegroup(225) # fcc >>> sg.unique_sites([[0.0, 0.0, 0.0], ... [0.5, 0.5, 0.0], ... [1.0, 0.0, 0.0], ... [0.5, 0.0, 0.0]]) array([[ 0. , 0. , 0. ], [ 0.5, 0. , 0. ]]) """ scaled = np.array(scaled_positions, ndmin=2) symnorm = self.symmetry_normalised_sites(scaled, map_to_unitcell) perm = np.lexsort(symnorm.T) iperm = perm.argsort() xmask = np.abs(np.diff(symnorm[perm], axis=0)).max(axis=1) > symprec mask = np.concatenate(([True], xmask)) imask = mask[iperm] if output_mask: return scaled[imask], imask else: return scaled[imask]
[docs] def tag_sites(self, scaled_positions, symprec=1e-3): """Returns an integer array of the same length as *scaled_positions*, tagging all equivalent atoms with the same index. Example: >>> from muesr.core.spg import Spacegroup >>> sg = Spacegroup(225) # fcc >>> sg.tag_sites([[0.0, 0.0, 0.0], ... [0.5, 0.5, 0.0], ... [1.0, 0.0, 0.0], ... [0.5, 0.0, 0.0]]) array([0, 0, 0, 1]) """ scaled = np.array(scaled_positions, ndmin=2) scaled %= 1.0 scaled %= 1.0 tags = -np.ones((len(scaled), ), dtype=int) mask = np.ones((len(scaled), ), dtype=np.bool) rot, trans = self.get_op() i = 0 while mask.any(): pos = scaled[mask][0] sympos = np.dot(rot, pos) + trans # Must be done twice, see the scaled_positions.py test sympos %= 1.0 sympos %= 1.0 m = ~np.all(np.any(np.abs(scaled[np.newaxis, :, :] - sympos[:, np.newaxis, :]) > symprec, axis=2), axis=0) assert not np.any((~mask) & m) tags[m] = i mask &= ~m i += 1 return tags
def get_datafile(): """Return default path to datafile.""" return os.path.join(os.path.dirname(__file__), 'spacegroup.dat') def format_symbol(symbol): """Returns well formatted Hermann-Mauguin symbol as extected by the database, by correcting the case and adding missing or removing dublicated spaces.""" fixed = [] s = symbol.strip() s = s[0].upper() + s[1:].lower() for c in s: if c.isalpha(): if len(fixed) and fixed[-1] == '/': fixed.append(c) else: fixed.append(' ' + c + ' ') elif c.isspace(): fixed.append(' ') elif c.isdigit(): fixed.append(c) elif c == '-': fixed.append(' ' + c) elif c == '/': fixed.append(c) s = ''.join(fixed).strip() return ' '.join(s.split()) # Functions for parsing the database. They are moved outside the # Spacegroup class in order to make it easier to later implement # caching to avoid reading the database each time a new Spacegroup # instance is created. def _skip_to_blank(f, spacegroup, setting): """Read lines from f until a blank line is encountered.""" while True: line = f.readline() if not line: raise SpacegroupNotFoundError( 'invalid spacegroup %s, setting %i not found in data base' % (spacegroup, setting)) if not line.strip(): break def _skip_to_nonblank(f, spacegroup, setting): """Read lines from f until a nonblank line not starting with a hash (#) is encountered and returns this and the next line.""" while True: line1 = f.readline() if not line1: raise SpacegroupNotFoundError( 'invalid spacegroup %s, setting %i not found in data base' % (spacegroup, setting)) line1.strip() if line1 and not line1.startswith('#'): line2 = f.readline() break return line1, line2 def _read_datafile_entry(spg, no, symbol, setting, f): """Read space group data from f to spg.""" floats = {'0.0': 0.0, '1.0': 1.0, '0': 0.0, '1': 1.0, '-1': -1.0} for n, d in [(1, 2), (1, 3), (2, 3), (1, 4), (3, 4), (1, 6), (5, 6)]: floats['{0}/{1}'.format(n, d)] = n / d floats['-{0}/{1}'.format(n, d)] = -n / d spg._no = no spg._symbol = symbol.strip() spg._setting = setting spg._centrosymmetric = bool(int(f.readline().split()[1])) # primitive vectors f.readline() spg._scaled_primitive_cell = np.array([[float(floats.get(s, s)) for s in f.readline().split()] for i in range(3)], dtype=np.float) # primitive reciprocal vectors f.readline() spg._reciprocal_cell = np.array([[int(i) for i in f.readline().split()] for i in range(3)], dtype=np.int) # subtranslations spg._nsubtrans = int(f.readline().split()[0]) spg._subtrans = np.array([[float(floats.get(t, t)) for t in f.readline().split()] for i in range(spg._nsubtrans)], dtype=np.float) # symmetry operations nsym = int(f.readline().split()[0]) symop = np.array([[float(floats.get(s, s)) for s in f.readline().split()] for i in range(nsym)], dtype=np.float) spg._nsymop = nsym spg._rotations = np.array(symop[:, :9].reshape((nsym, 3, 3)), dtype=np.int) spg._translations = symop[:, 9:] def _read_datafile(spg, spacegroup, setting, f): if isinstance(spacegroup, int): pass elif isstr(spacegroup): spacegroup = ' '.join(spacegroup.strip().split()) compact_spacegroup = ''.join(spacegroup.split()) else: raise SpacegroupValueError('`spacegroup` must be of type int or str') while True: line1, line2 = _skip_to_nonblank(f, spacegroup, setting) _no, _symbol = line1.strip().split(None, 1) _symbol = format_symbol(_symbol) compact_symbol = ''.join(_symbol.split()) _setting = int(line2.strip().split()[1]) _no = int(_no) if ((isinstance(spacegroup, int) and _no == spacegroup) or (isstr(spacegroup) and compact_symbol == compact_spacegroup)) and _setting == setting: _read_datafile_entry(spg, _no, _symbol, _setting, f) break else: _skip_to_blank(f, spacegroup, setting) def parse_sitesym(symlist, sep=','): """Parses a sequence of site symmetries in the form used by International Tables and returns corresponding rotation and translation arrays. Example: >>> symlist = [ ... 'x,y,z', ... '-y+1/2,x+1/2,z', ... '-y,-x,-z', ... ] >>> rot, trans = parse_sitesym(symlist) >>> rot array([[[ 1, 0, 0], [ 0, 1, 0], [ 0, 0, 1]], <BLANKLINE> [[ 0, -1, 0], [ 1, 0, 0], [ 0, 0, 1]], <BLANKLINE> [[ 0, -1, 0], [-1, 0, 0], [ 0, 0, -1]]]) >>> trans array([[ 0. , 0. , 0. ], [ 0.5, 0.5, 0. ], [ 0. , 0. , 0. ]]) """ nsym = len(symlist) rot = np.zeros((nsym, 3, 3), dtype='int') trans = np.zeros((nsym, 3)) for i, sym in enumerate(symlist): for j, s in enumerate(sym.split(sep)): s = s.lower().strip() while s: sign = 1 if s[0] in '+-': if s[0] == '-': sign = -1 s = s[1:] if s[0] in 'xyz': k = ord(s[0]) - ord('x') rot[i, j, k] = sign s = s[1:] elif s[0].isdigit() or s[0] == '.': n = 0 while n < len(s) and (s[n].isdigit() or s[n] in '/.'): n += 1 t = s[:n] s = s[n:] if '/' in t: q, r = t.split('/') trans[i, j] = float(q) / float(r) else: trans[i, j] = float(t) else: raise SpacegroupValueError( 'Error parsing %r. Invalid site symmetry: %s' % (s, sym)) return rot, trans def spacegroup_from_data(no=None, symbol=None, setting=1, centrosymmetric=None, scaled_primitive_cell=None, reciprocal_cell=None, subtrans=None, sitesym=None, rotations=None, translations=None, datafile=None): """Manually create a new space group instance. This might be useful when reading crystal data with its own spacegroup definitions.""" if no is not None: spg = Spacegroup(no, setting, datafile) elif symbol is not None: spg = Spacegroup(symbol, setting, datafile) else: raise SpacegroupValueError('either *no* or *symbol* must be given') have_sym = False if centrosymmetric is not None: spg._centrosymmetric = bool(centrosymmetric) if scaled_primitive_cell is not None: spg._scaled_primitive_cell = np.array(scaled_primitive_cell) if reciprocal_cell is not None: spg._reciprocal_cell = np.array(reciprocal_cell) if subtrans is not None: spg._subtrans = np.atleast_2d(subtrans) spg._nsubtrans = spg._subtrans.shape[0] if sitesym is not None: spg._rotations, spg._translations = parse_sitesym(sitesym) have_sym = True if rotations is not None: spg._rotations = np.atleast_3d(rotations) have_sym = True if translations is not None: spg._translations = np.atleast_2d(translations) have_sym = True if have_sym: if spg._rotations.shape[0] != spg._translations.shape[0]: raise SpacegroupValueError('inconsistent number of rotations and ' 'translations') spg._nsymop = spg._rotations.shape[0] return spg def get_spacegroup(atoms, symprec=1e-5, method='spglib'): """Determine the spacegroup to which belongs the Atoms object. When PhonoPy/SPGlib is NOT available, a pure ASE python implementation is used. The pure ASE method is NOT recommended for large systems (SLOW). Parameters: atoms: Atoms object Types, positions and unit-cell. symprec: float Symmetry tolerance, i.e. distance tolerance in Cartesian coordinates to find crystal symmetry. method: str 'phonopy' or 'spglib' when available, or 'ase' (fallback). The Spacegroup object is returned. Example: >>> from ase.build import bulk >>> atoms = bulk("Cu", "fcc", a=3.6, cubic=True) >>> sg = get_spacegroup(atoms) >>> sg Spacegroup(225, setting=1) >>> sg.no 225 """ # use spglib when it is available (and return) if has_spglib and method in ['phonopy', 'spglib']: sg = spglib.get_spacegroup(atoms, symprec=symprec) sg_no = int(sg[sg.find('(') + 1:sg.find(')')]) return Spacegroup(sg_no) # no spglib, we use our own spacegroup finder. Not as fast as spglib. # we center the Atoms positions on each atom in the cell, and find the # spacegroup of highest symmetry found = None for kind, pos in enumerate(atoms.get_scaled_positions()): sg = _get_spacegroup(atoms, symprec=symprec, center=kind) if found is None or sg.no > found.no: found = sg return found def _get_spacegroup(atoms, symprec=1e-5, center=None): """ASE implementation of get_spacegroup, pure python.""" # we try all available spacegroups from 230 to 1, backwards # a Space group is the collection of all symmetry operations which lets the # unit cell invariant. found = None positions = atoms.get_scaled_positions(wrap=True) # in the lattice frame # make sure we are insensitive to translation. this choice is arbitrary and # could lead to a 'slightly' wrong guess for the Space group, e.g. do not # guess centro-symmetry. if center is not None: try: positions -= positions[center] except IndexError: pass # search space groups from the highest symmetry to the lowest # retain the first match for nb in range(230, 0, -1): sg = Spacegroup(nb) # # now we scan all atoms in the cell and look for equivalent sites sites, kinds = sg.equivalent_sites(positions, onduplicates='keep', symprec=symprec) # the equivalent sites should match all other atom locations in the # cell as the spacegroup transforms the unit cell in itself # we test on the number of equivalent sites if len(sites) == len(positions): # store the space group into the list found = sg break return found #spacegroupdat = b'x\x9c\xed]]\x8f\xdb\xc8\x8e}\xf7\xaf\xd0\xe3.\x16\xdeX\xf2G\xbb\x1f\x07\x03\x04\xe8\xb7\xe0\xfe\x83\xa43X\x04\x98\xee\x19d\xb2\x0b\xdc\x7f\xbf\x92%\xbbUR\xb1\x8a\x1f%\xbb$\x9d\x99\x9d\xc5u\xa7\xcd\xb0\x8a<\xe4)\x92*\x95E\xf3\xcf\x97\xa2\xdc\x14\xc5?\x7f\xfc\xfa\xf5\xe3\xfd\x7f.\xff\xfb\xf5\x8f\xf7_?\xff\xfa\xe7\xdfoo\x7f\xfc\xfa\xf9\xe3\xb5\xd8\xd5?\xfb\xfb\xe7\x8f\xb7\x1f\xbf~\xfc\xdf\x1f\xf5\x9f\xfe\xf9\xe7\xe6\xf2\xcd\xf2\xbfw\xb7\x7f\x8abG~j\x7f\xdb\xfds\xfa\xbb\xbe\xdf\xa6\xbf[\xff\xf6\xcf?^\x7f\xfc\xfd\xf3\xaf\xd7\xaf\x7fz\xb5,\xcaF\\\xf3_\xf7yw\xfdY\xef\xf3\xe5g\x9b\xe6\xe7\xff\xfc\xef\xb7_?\xbf\xbe\xff\xf3\xe7\xd7_?\xfez\xff\'\xae\xcd@\xf7ZB\xbbq\xff.\xfe\xfa\xfb\x8f\x9f\xad\x94\xe2?~\xfe\xf5\xeb\xbf.r\xffs\xd3\xe9\xb4k\xff\xd6\xcb\xff/{\xff\xbb\xfd(\xf8;7Ug\xc7m\xcc\x90%\x0c\x99\xb5!\xf7\x9d!+\x002\x9d\x1d\xab\xbb\xdb\xb1\xfe\xddmP\xde6\x81_T\xf0\x8b\xf9\xfb\xc5\xd6\x16/\x0eW\xbf@\x06_\x98c\xb0\x02\xc6\x91\x92\xe7w\x0cD\x8c\x058\x86"b|\xb8\xc9fs\xbc|\xf5w5\xc3p\x9cn\x1bp\xc1\xf1o\x87\x1cv\x02\xbf\xd8\xf6\xfd\xa0\x0c\xf8Ee\xf6\x0b\xd9Js\xf0"#\x1fi\xbd\xe875\x1f\t\x042\xc7\xa7\xa2\xbf]\x8c\x7f[\x10\xb9b^\xb4\xbbz\xd2 \xba\x94=\xaf\xbaF\x9fD^\xc4^\xe9\x02\xbc\xe8t\xf9\xea\x97\xe2\r\xe4e\xe69\xaa0\xe7\xa8\x9e<\xaf_\x80\xbb,\xc0/\x8c\xf1\xe2\xa9\xf3\x8bW\xc4\x8be\xf9\x85\x91\xd3^\xfd\xe2\x1d\xf1b\x15~Aq\xeb\xa1_\x9c/_\xfd]\xcd/p\xd6\x99\xe7Y\'-\x1bi\xbd\xe875\x1b\xc1Yg\x9eg\x9d\xb4^\xf4\xdc\xc5"-wA,Zk,\xeag\xb4\xe7.\x16i\x99\x0eb\xd1\x92c\x11\x97\x17\x95\x97\xef~)\xaaO1f\x84y\x81\xdc\x19s\xda\x8a\x9c\xdf3|\x11\x06\x9e13\xcf0\xf2\x97\xb2\xec<\xa3D\xd0X\x9ak\x18{\xcd\x84k j,\xc05\x8c|\xb5\xbcL&\xfen`\x1a8\xf7\xcc\xf3\xdc\x93\x98\x97\\\xfc\xe87\x03/\xc1\xc9g\x9e\'\x9f\xc4~t\x19\xa4l\xf8m\xac\x0e\x83L5\xb3L\xa5\xf0\x0c\'S\xdd<#V[\x81g,\xc33\xd8\xd5\x92C\xe7\x19%\x82\xc6J\\\xc3\x95@\xa6\xc4\xbek j\xac\xc35B\xac\xdbq\x8d\xcb\x88\xe4\xef\x06\xa6\x81\x93\xcfZO>c?\xfa\xcd\xc0Kp\xf2Y\xf2\xc9\x87\xcdb.C\x95u\xaaj\xfe\x8dD$\xccI\t\xect\xc8\xc07l\xb5\xfd$1k`\xcf\xa0~\xe2S\xfbS\xcfw\xf1\xa4\x1b\x9c\xf7\x18\x92gK\xb8\xe9\x9d\xf7\xdc9oy\xf9?x\xef\xea\xbd7(Oq\xec\x18\xd8\x93\xe5\xbdLy\x9b\xf2\xd9\xf1^\x04\xdfu\xb8/\x93U\xb2\xdd\x97\x92\xa0\r\xbe\\\xf7\xad.\xdf\xfd\xdd\xc6\x1cp\x107\xaf4cW\x0f\xc9\x9b\x13\xcf\xa8\xca\x9e\xab\xc3\xd3\xe1\xe9\xe9\xe4ev\x1c\xac.\xc3\x00\x9f\x8d\x9e\xee\xca\x0f\x97\xb9$\tQ\xe4-\x11O\xdf^=\xbb\x1cx~\xe9z\xfe\xa5hv\xb8sQl\xca}\x01\x8a\xa6G\xd1\xa5\xe1\xfdbA\xd1(C\x08\xbc%\xf0\xdd\xa8\xb7\x0c\xcb\xd6\xcc\xd2\xf2\xa8\x94<@Q\xca\xd22{_\xe0\xe9\xd3{\xfa\xa1\xf3t\xd3\x19\x16\xce\xee7\xd5B\x9c}1\'\xdeK\xbf\xf0K\xf1V\xff\x8bb\xe3\xcd\xf3\x17]\xad\x11X\xeb\xae\x81_(oS\x9d\xae\xbe\xfb\x8aR#\x9cW\x16(S\xd7s\xc4\xce\xdb5)_\x1b\xe7\x85\xef\xae\xdew\x07\xfb\x9f\x9d\xef\xf6\x87C\xaa\xaeG\xf9V|\x85\xef\xc2wU\xbe\x1b"\xd0A\xfd\x88\xf52\xe5m\xaa\xaeC\xf9\xda\xf8.H\x03\x9cWC\x1a\xee\xe9\xbc\xfd\xc0\xbb\xdf\xb5\xce\xfb\x0e\xd2\x00\xdfMB\x1aB\x95\x06\ri\xa0\'\xdc\xf7e\xeb\xbbo\xb5\xf7"\xf0\xae\xc4y\x05\xfd\x9e\xbb\x96\xdd\xa4\xa7\xb5}\xd5:\xef70\xde\xd5\xf8\xae\xc0Z\n\xdf\rM?hH\x03]\xe2\xddw\x8f\xaa\xbe\x83\xf1\xc2y\xd3\x04\xdei\x9d\xd7a\r\x87\xab\xf3\xbe#\xf0\xc2w\x93\x07^\ri`\xfbn\xf7L\xa7\xa5\xb7\x86\x11;\xf3JW\xe4\xe9j\xfd\xac\xf4\xf8t\xf5tC\'\x0e\xae\xbeVW\x9fS\xdfn\xff\xd4\xba\xba\xa5o\x07O_\xab\xa7\x0fV\x9c\x9d\xa7;\xf4\xe5\xd2\xe5\xfb\xcdH_(\xf9\xb8L\x80\xb9Rx\xfa\xf4\xf4\xe5\xb9\xf5\xf4o\xf0tx\xfa\x03<\xdd^Na\xca\xdb\x1cv\xad\xa7[&7\xe0\xe9\xf0tm\xf1E\xa0\x9f\xa2U\xde\x93\xb79\x94\xad\xa7[:6\xf0txz\x9a2cP?c\x7f\xe7\xd0=\xdf8\x11O\xf7\xf8\xeed\xcf\xf1\xe1\xf9F\xbf&+B\x91Z?\xe3\x19\xe0\xb0oQ\xf4\xbd\xfe\x17(\x02\x8a\xe6\x8d\xa2\xea\xd8\x97@}\xe2\xa3\x88)os\xe8\x9e\x9d4\xe4"<8\xe9\xb7{\xc4\xd3\xd7\xca\xba\xd4\xfaY\xf3\xc5\xb1\xf5t\xc3\xf9\x02\x9e\xee\xb5\x13<=\xb3\xf3\xc5\xa9\xf5tC\xcd\x08\x9e\xee\xb5\x13<=\xb3\x9aQ\xf7Lf\xc3^\xf0\xd6\xba\x9b\xe7c\xd8\x8c\xe1k\x8f\xbe\xb5\xe4\xd0=\x93\xd9\x0cJ\xbeG|\x97:\xbf\xc2w=\xba\x9f\xe1\xbb\x13\xfbnt\xbd\x9cKM\x823D\xc4z\xd5\xf22\x1b4\xa5\xb0\x8f\x17\xcb,7o\xa5:\r\xf8\xb1\xb0#\xa4k\xb1\x1f\xf0\xdd\xdb\xf3\xd8\xaf\xe0\\+\xf1]\xb5<E\xde\xb2\xfb.)os\xdc\xb5\xbe\xdb\xd4\x80\xc0\xb9\xc0\xb9\x82\xf2\x16\xc8\xb9\x82\xfa)8\x97d\xbd\x8f\xae\x8aQ\xd8\x07\xe7Zn\xde\xba\'\xe7\x1a\xd8\xd3\xcc\xb9z\xf26\xc7\xb2\xf5\xdd\xa6\xce\xf5\x15\x9ck\x85\xbe+\x90w\xa7\xbc\xc5\xad\xd1\x1e\xbb\x9b\x18\x9a\xb3.|\x17\xbe\x1b\x947q\xddGz\xd6=v71\xbc\xc1w\xe1\xbb#_\xcb\xa1NC\xaews\xec.bh\xea4\xbf\xc1wW\xef\xbbAyw\xaa\xd30\xb1\xb09v\x97\x9c7g5\xd4\x18\xd7\xe1\xbbjy\x13\xd7-\x84\xf26\xc7\xee\x92\xf3&\xee\xc6j\x8c\xf0\xdde\xf8n\xea:\xc3. o\xd2\xb8\xdb\xcd\xd3|Cog5\xbe\x1b\x92\xa7\xe1\xbb\x94\x04\xad\xef\x86\xe4\xf5\xd6\xbb9\xf6z\xea\xf0]\xf8nP\xde\x9d\xea\x0c\xdcy\x90c\xd7So\xea\xbb\xe8K&\xf4\xdd\x15\xf5%\x1f\xc4w\xa3\xeb\x9dK_2\x95=\x84\xf2H\xec\xa3/\xb9\xdc\xbcu\xcf\xf3\xc2\xc0\x9e\xe6\xf3BO\xde\xe6\xb4k}\xf7\x1b\xce\xba\xf0\xdd$\xe7\x85]@^\xda:\xcd\xa9\xfc\xf0]\xf4v\xd6\xe8\xbb\xae\xbc\x1c\xce\xbal\xdf\xbd\xf5\xd41\x0f\x02\xdfM\xef\xbb\x03{&=\xeb\x9e.=\xf5\xf6\xeaam\x9d&\xfc\xbc\xe9@{\xd9Y!\xb1\xefn\xfb\xbeZ\x06|\x17\xf7\xb1\xde\xa9"\x19\x92\x97\xb6\x03\x7f:|x\xba6J\xc3\xd3\xd7\xe3\xe9\xa9\xb9t\xea\xda;\xb9\xde\xcd\xa9\xf7\xe2\x04\xc4txzBy\x8a\x98>\xd8\xc1\xb4\x9e\xde\xbd8\xc1\xf2\xf4\x1b<\x1d\x9e\x9e\'{qxz\xf7\xde\x04\xcb3\x07\xf0\xf4\xf5xz~Ul\xe6z7\xa7s\xeb\xe9\xaf\x0c\x9eNu_\xe1\xe9\xe6\x95f\xdc\xab\x9d\xb6_\x13\xdc\xc1\x94u\xc3\xe8z\xcd\xe7\x08V\xaf\x96\x92\x1e_o\xeas\x93\xb0\xb6FF\nI\xaf\x16\x91b\xc99q)\x13\xf8\xa7\xcbT\xc2g\xe3\x89\x9e\x92\xef\xd1^\x16%$\xde\x82\xdb\x95\xfd\x9ad\x8c"\xb5\xbc\xcc\xaa\x05O\xbb\x16E\xcd\x1d\xe5\xdf\xd5\xcc\xd2\x95\x0f\x14e\xb5/\x19\xb3V\xb5\xbc\xbcP\x14]\xefU\x1e\xff\x0eu\x1ekU\xcb#\xec\xf1\xa8;\xde\xa9($c\xad\xae}\x10\x85\xb2\xda\x97\x8cs\xf9\x93\xe3\x97\xee\xa7\xa0<\x02\x95\x94\x04\xf7\xcf\xb4Q\x88\xd2\xb6F\xd1\xe5\xf7_,\x8c\x18\xb7j{\xed\x1e\xf3tG\xf7\x8c=]-/\xaf|\xbby\xaaZO7<}\rO\xf7\xdb\t\x9e\xee\xf5LA\x8d+e=t\xf3\xb4\xbfz\xbazB\x07\x9e\xee\xb7\xd3B<\x9d\xcf\xd7\xf2\x9e\x18~\xea\xbd\xe7\t\x9e\x0eO\x8f\xc9\x0b\xc5\xe0\xbc\xbb\xb9O\xdd\xdd1\x07e\xbd\rs\xf1\xf3:_\n\xac\xd5\x971\xd0U)\xef\xb6\xc6!&\xc4\xf26O\xdd\xbd1\x87\x12\x8e\xbbz\xc7\x1d\xa4G\xb3\xe3\x0e\xca\x95f\xc7u\n#\xdd\xa51\x07\xed[X\xe1\xb8\xcbq\xdc\xc1\xfe\x9b\x1dw\x04\x04\xa3\xe3\xf6{\xdcO\xdd\x8d1\x87=\x1cw\xf5\x8e\x9b:\xe2>%\x8e\xb8NC\xe72\x9c\xf1\xa2\xa5\xb88\xc8\x8d>-\xf7 \x17\\q\xd6\x84\xf8\xbc\xeb\xbc\\I\x88\xe1\xe6~#-\xc4\xcd\x05\xb6U\xb8\xb9+OC\x9fC\x95\xc3>}>_~\xffK\xb1E\xc1\x02,d\xb0\xffAGS\xb4\t\x83@\x90\x16\xda\xce]\x9bP\xeb\xb8\x88\xcf~#-$>\x0bV\x9c\xb7\x9bw\xef\x808|\xc2\xad\xa2\x08\xd0\x83\xfd\xcf\x9b@wo\x808Tp]\xb8nr\xd7\x9d\xb24w\xbe6\xf1>\xe1:\xdc\x84\x9e\xbb\x88au\x9e\xe7\nF\x8aX\x9e\xcb\x97\xc7\x1bVW\x8f<\x11\xed\xf6T\xeb}8\xdd\xf2"\x1f\x97\xe1.7g\x89<W\x8c\xfc\xa0=\x159\x8b\x1e\xb1:_\x1b\xf8\x15\x92VJ\xd7E\xd2\x1a|\xe2\x07q\xbe<{\xd2\nN/*\x92\x96f\xbd\xa9\xec!NZ~\xe8#k!kq\xa1\xbf\x0b\xc8\xd3\x9c\xb4\x98\x83\xcb\x9b\xf3ez\xe7E_\xdeB\x19w\xf4i\xb5e\xdc\x9c\x8ba\xe7\xce\xcf\xcbO\xca;\x9e\xe0\xe8~3I\x1c=c.\xb7\x90~rt\xbd\x9c\xf9|\xcd\xd3\xf2|\xfd\x1e\xc3\xe5\x98\xf6\xa5\x02\x85\x80\xcb!P\xf8\xcd\xb4\x90\x8c\xc8dV\xec@\xe1>r\x1e\xbcf\x82\x15(B\x0f\xdc;\x83\'\xdd\x8b\xa7\x0e\xb5q1\xba}\xf3|\x14,\xf2gs\x1e\x19\x9c$\x17\xd4O\x914\xb9\xeb5\x17\x18\x06:\x99\x93\xe6\xe6yw\xc3~\t\xf0\x03\xfc\xc9\xab\x95#yS\xb6\xd8\xec-1\x16\xf8u\xeb\xcd\x10\xfce\x07\xfe\x12\x99\x1f\xe0Or\xbcu?M\xf8\xb4!\x1b\xfc\xfc\xfd\xb3g~\xba>\xab\x03\xff\xe8\xb8l\x04\x7f\xff\xd9\xa1\xe7\xea\x03\xfcH\xfd@\xbf\x0e\xfd\xa1Th/n\xb9\x9f4\xe8\x17\xe8gN\xfdtq+\x8f\xd4\xdf/n=_\x87\x99+\xa4~\x80_\xc9\xfbC\xf2&\x1c\ne\x83_\xb0\xde\xec\x0e\xfdt0N\x00\xfe\xdb<8R?\xd0\xafE\x7f\xaa\x99\x1d\xb9<{\xea\x0f\xce(\xd9g\x9e\xcc\xe8\xa7\xed\x91\xe0\xd4\x7f\x1d\xac\xdd#\xf5\x03\xfcJ\xde\x1f\x927\xe1\x8d\x17l\xf0\xf3\xf7/\xbfS\xff\xe8\xdcd\x04\x7f\xbf\xd7\xf7|\x1dP\xdc#\xf5\x03\xfdZ\xf4\xebN\xc1\xba\xd4\xafA\xbf@?s\xea\xa7\xab\x1cy\xa4~\x87\xf8_g<\xf5\x99\x1f3-~;I\x08\xe2L#\xc5`\xc5\x98\x0b\xb0";\xb3H\xd1\x93\xb7y\xbe\r\xbf!T Tx\xe5-vN\x96E*B\xf24\xa1\xc2N*t\xf6H\x10*n\xe3\x83\xf1\xf7\xe1\xe0@\xb1\xfc\x03\xc5`\xff3\xa7\ta\xac\xa6\xa6\x1d\xb6\xfdK\xb2\xde`,\x11\xca\xdb\x94\xcd\x8f.\xd8\xffV\xe0Yg`\x7f\xb0\xff\x8b\xc0~\xaaiD\xb9<\x1e\xf6SM#\n\xe5\xd5\xd8/\x8b\xae\x8b\xf8\x8a\xc4\x0f\xf0\'\x07\xff\xb4#\x04\xf6\xc4/iJ\xda*\xb19&\xfe\xea\n\xfew\x80\x1f\xe0W\x81\xffq\x13\x04\xf6\xcc\xaf\x01\x7f\xaa\x13\xfa\xe3\xc1\xbfo\xc1_\'\xfeW`\x1f\xd8w\xf7\x7f\x11\xac?$/\xf7\xc4/\x19H\x10\xca\xab\xb1\x7f\xe8\xb0\xff\x0e\xec\x03\xfb\x8b\xc4~\xeey?\xd5$\xa2P^\x8d\xfdc\xd1\x91\xfe7\x80\x1f\xe0_\xdd\x89?\xb8\x7f\x19\x94\xfa\xa7M\xfc\xa7+\xf8\xbf\x01\xfc\x00\xff"\xc1?\xe7Z\xff\xb4\x99\xbf\x99\x1c|\xb1\xf4\xf81\r4\xfa\x14\xd5}\xb8RD\n\xbf\xbc\xcc\xea\x03\xc1\xfd\xcb\x80&\xd0\xfb\x97\xa26x\xee"\x85\xba)\x88H\xe1\xb7\x13"\xc5\xe2"\xc5\xba+\x89\xcfE7b\xfcV|G\xa8@\xa8\x18\xc9[\xce\x88\xf1cH\xc5\xb4\rG\xfd\xc8\xb2p\xff6e\xb9\xbb\x86\x8aW\x84\n\x84\n\x84\x8a\xe4\xac"u\xa5"\xb4\x7f\x92\x8b\x928\xfbW9\xa1\xa2\xf9\xc2\x97b\xdb<\xe3\x88\xc1\xa4[\xe8@\x99\x92\x01V\xdbSwc\xe7\x95\xcb\x9b\xc1S\x8b9\x17\x1f\xca\xea\x03\xfc\xe8Q\x00\xfc\x83\xfd_<\xf8%=\x0f\x85\xbc\xbc\xeb\t\xe5\xfe\x06\xfe\x12\xa9\x1f\xe8_$\xfa\x05<\x9d\x85\xfe{v(i{\xe8:\x94=y5\xfa\x0f=\xf4#\xf7\x03\xfd\x83\xfd_<\xfa5\xb9\x7f1\x93\x89\xe5\xf1\x8a\xfe7\xdcj\x06\xf0\xcf\x0c\xfc\x8f\xe9\x0e\xe8\xf6/\xc9z\x93^@R\x96\xa7+\xf8_\x01~\x80\x7fu\xe0\x9f|\x8a\xc0\x08~\t\x93\x10\xca\xab\xc1\xfft\x05\xff7\x80\x1f\xe0_$\xf8\x1f:\x96\xcc\x00\x7f\xaa"\x82P^\r\xfe\xf3\x15\xfc\xef\x00?\xc0\xbf:\xf0\xa7\xee\xf4k2\x7f\xaa\x1a\x82P^\r\xfev~\xd0r\xe6\xc7P\xd0\xe8ST\xf7\xe1J\x11*\xb2\t\x15\xea\xfd[z\x85\xa0\xda]C\x85\xbaB\x80P\xe17\x14B\xc5\xe2B\xc5\xaa\xeb\tUy\r\x15\xea\xf9A\x84\x8a\xd1\'\x84\x8a\x1cC\x05\xa6\r\r\xf2\xeaPQ}\x84\n<\x95\x80P\x81P\x91\xea)\x07\x85<\xc5|BD\x9ex>\x81\x94W\x87\x8a\xee\xc6\xc4Oo\x8c\x1b\x14JT*\xd7W\xa9\x0c\xa05u4I].\xc8\x82(d]~8\xdc\xd0\x1f\xbf1\x15\xe8\x07\xfa\x97\x86\xfe\xc9\x9fK\xc8\xba\xa2\xd0\xdd\x9a\xf8\xe9\xbd\xf8\x86\xe7\x12R\xa2\xbf<\x01\xfes\x80\xff@\xbf5%\xff\xa8\xbf(f(\x14G1\xee\x8c\x87y&#\xea\xcf\xe6\xf5\xe68##>z\xde\xf1\xc1\x182\xfdT \x9f\x8b%\x9f\xa9\xd0\xca)t\x8c\xe4\x89\xb3\x8f\x1e\xad\x9cB\xd1@?E\xf6\xb1O\xc8Q\x1aI\xa3\x89xB\xae:\xdd\xd0\x8f\x0b\xfb\x93\xa2\x1f\xe4\x13\xe4\xf3Q\xf0W\xef\x9f\x82|\x06\xcf\xee\n\xf2I\x9f\xdd\xcd3\x81Q\x7f6\xafW\x91n\'\x9f\xd14\x92OI-E(/\x90~@>A>ch]\x02\xf9\xb4W>\xed\x13\xda\xd4\x8eI\xa3\x890z\xd6\xe8\x7f*\xae}\x8fx\xe5\x13\xe8_\x06\xfa\x05\xd6Z\x04\xf7LU\xc8\xb2\x15\xee\x92\x14\xda\x12\x1f=\xcf7\xf4\xc7\x8f\x9e@?\xd0\xbf4\xf4kr\x7f*\xa6n;9\xa5\xc8\xfd\xcf\xc5\x95\xf9\xab\xdf\x19\x03\xf4\xfbt_S\xe1)U\x17+u\x97h.\xc9_g\x8f<\nO\xc1\xfd\xbbS\xd7S\xb7\x7fI\xec\x91\x18o\xbc\xc2\x93n\xbd9v=\xa9\xf4\x83\xc2\xd3r\xc9\xe7\xda\nO|y\x9a\xec\xc3]\xef\xfd\x8e\x9e\x94F#\xf4\xefw7\xf4\xc7\x07nA>A>\xed\xe1$3\xf2\x99\xc3\xd93d\x8f\t\'n\xa3\xfe\x02\xf2\x19\x95g\xc6\x9b\xa6\xeb\xc9\x97\x17\xf6\x97\x87w=\xc9\xf4\x03\xf2\t\xf2\x19C\xeb\x12\xc8\xa7=\xfbP\xd2\x1fW\xf9\xa4,0F\x7f\xd9\xa2\xbf\xba<\xec\x89\xc6\xc7:\xe0/\xb0\x96\xb9\xf1!\x19\xa1J\x9d\xacS\x93\t\x15\xd9\xc9\x97|\xd6\xf0\xaf>\xe0\x1f\x7f\x076\xe0\x0f\xf8/\r\xfe\xf6\x99\'\xeez\xb3k|\xd4\xf0\xdf_\xe1\xdf<o\x83\xdaSB\xf8\xa3\xf6\xa4\xc7\x7f\xaa\t\xe5\xb9\xe0\xffASOQ\x7f1\xd7\xee\xec\xb5\xc0\xa0\xbf\xcc\xa5\xf6\x94\xaa\x96j;\xbd\xa7\xc8\xb7a\x7f\x16\xca\x0b\xe5\x1f\x14\x9f\x96K?\xefY|\xb2\xd3O{\xfa\x11\x14\xc7\x14\xe9g\xda\xb9\x9bI\xc7\xee\xf6\x87\x0f\xf8\xbfc\xee.%\xfcA?\xe7A?\x07\xeb}H\xf5\xe9Ac\xb7Q\x7f\x01\xfd\xb4\xf9Kj\x7fV\xe1\xcdH?G\xfbg\xa4\x9f=y\xa1\xfc\x03\xfa\t\xfa\x19\x83\xeb\x12\xe8\xa7\xbd\xfa1\xed\xe4\rm\x0fs\xf5\xa3\x86\xff\xb1\xb85?\xe2\xd5O\xc0\x7f\x19\xf0\x17Xk\x11\xcd\x0f\xf5\xe0\x98}\x10\x8d\x05\xff\x07\xb1\xcf\x1a\xfe\xa7\x0f\xf8\xc7O\x9f\x80?\xe0/e\x139\x1c>\xd5\x87\'\xfba\x8c\x05\x7f\x9d=R\xf4>\x9f\x8a\x1b\xf9\x8fO>\xa1\xf8\x84\xe2\x13\xf0\xbf\x1c\xfcG\xfd\x05\xc5\xa7\xa8\xbc\xc4x\xe3\x15\x9ft\xebM\x81\xb7\xb0?\x0b\xe5\x85\xf2\x0f\x8aO\xcb\xa5\x9fk+>\x85\xe4\r\xd6\xab\x08\xc7!{\xf0\xd2O\xea\xd3\'\xa5\xd1\x18\xfe\xe7\x0f\xf8\xc7\'oA?A?\xc5\xf1$w\xfa9X\xefC\xaaO!{L\x88\xff\xa8\xbf\x80~F\xe5\x99\xf1\xa6\xe9}\xf2\xe5\x85\xfdE\xc5\x07\x8c\xf4\xb3\'/\x94\x7f@?A?cp]\x02\xfd\xb4W?\xb8\xeb\xd5\xd1O\xda\x1e)\xaa\x9f\xcd\x95C/\xb6w|\xe2}\xc0~KI\xd2l\xc6\xb1B\xb0bs\xa3t$\xcf\xd8(\r\xae\x97\x15+\x82\xfa\xb1b\x85n\xbd\xd9UJ7\xe5aw\x8b\x15\xeagD\x11+\xfc\x96B\xacX\\\xac\xb0\xcfT\x05\xe5\x99c\xc5\xa4e\xadC\xd9\xc6\x8a\xf2\xd3\xd7\x9aX|\xd7\x95\xb5\x10,F\x9f\xc4\xc1"\xe7"\x98\xae\xe8\xca\x8d\x16\xae\xbc\xea8\x90\'.\x82\xb9\xd2\x9f\x1cy\x9a"XH\x9e&Zp\xd7\x9bG\x11|\xe7\xc8\xe3\x15\xc1\x04\xebMm\x8f\xa0\xbfLU\x04K\xd5\xb3O]\xd4\xbdO\x0f\x96k\x0fs<\x08e+A\x11\x0c\xd9j\xf4iI\xd4VT\xf2a$\xab\x0f\x07t\xdd\xdb\x13\xccX\xc9\xaa"$\x8c\xc1cOV\xa9\xa9\xadk\x0f^\xb2\x12\xed\x1f#Y1\xf7\xaf\x0e\x16\xd5G\xb0x\x05\xb5\x05\xb5\xb5\xa5Z^\xb4\xd8\x05\xe4\xe5Nm\x83\xd4LA\xf5$T\xe0\x11\x05\xf6 \x95\x02\xb5\x95\xe2\xc3\x8c7W\xbf\x1c\xfa\xbb\xae<\xc9Q\x8d\x13\x0f\x98\xd9\n\xd4\x16\xd46\xee\x9ck\xa3\xb6\x03\x0b\x9b\xa9\xedh\xff\x8c\xd4v\x14\xbc\x8d\xd4\xd6=\x07\xb7\xf70\xedu\x9c\x16S >\xdd\xf7\x8f\xc0\xfd\x00\xa7\xe6nM# \x8eS\xa6\xbc\xda\xcf\xda\x0b\x17\xf6%\x1cm\xf5\x8e\xb6\xbf\xfd\x93\xc6\xd1N\xd7\x7f\x9e\x1aGk\x1f\xed\xdfWp\xb4\xd5;Z\xcf1\x928Z\xcfqkGk\x1e"\xff\x97:s\xf6\xb5se\x8f!\xd2\xb0b\xea\xcf\xa3\xbf\xbd\xa5\xff&\xa6\x9f\xf5\xfcj{\xfd\\~\xf8\xd9\xf6\xfay\x9f\x86_\x0b\xf6e\xf4\xe7\xeew\x1d\xfb\xcf\xd4\x87]y\xa9\xb3\xf2\xd8\x87}gD\xda\x87\xc9\xdd\xdfFl5\xf2\xd1\xb1\x0fS\xd2F\xbf-\xf4\xe1\xe6\x7fo/\xff\xf5|z\xd7}N\xe4\xc3!\xaf\x1c\xefK\xc8\xe3\xb3\xf0\xe1\xdb\xf7(\xd9\xeab?![\xe2\xc3\xed\xd3\x94\xdbX \xc6 \xfb\xf2\x13\xbe+/u\xb0<_\x82\xa5\xda\xd1\x90\xf1\x91\xf1\xb3tb\xc9c?H\xf9H\xf9\x8fO\xf9\xed[\xb3\xf7\xf5\xd7q\xccO\x98\xf5\x1f\xd2]\xcf:`\x0e\xf4K5\xf8\xd8_ci\x94\xe7\xd8c\xb4\x7f\xe2G>\x8e\xbb\x0e[U\x81Z-\xb0\xe5\xca\x9b\x00[\x8c\xe6\x98@\x9e\xbbF\xf3\\Z\x7f\x8dC\xdcj\xb0U\xb6\xd8*\x91\xb8\x00\xae\x11-L\xda\x08\x19\xe8\xa7K\\\xae<{\xe2\x1a\xd0\xe0\xc4\x89\xab\xba\x82\x0b\x99\x0b\xe0\xba\x03\xb82\xcb\\c\xb0\xda2Wo\xffjpuc"\x152\x17\xc0\x15\xcc\x0c\xe6\xce\xea@?]\xe6\xa2\xc1\xaf\xcb\\\x03\xf0\'\xce\\\x87+\xb8\x90\xb9\x00\xae;\x80+\xb3\xcc5\x06\xab-s\xf5\xf6\xaf\x06W3\x0f\xf4\xaf\xa6\x9e\xa1D\x16\xda6TT\x98\xa8m3S\xd4\xba\xf2P)\xb1\xa5D\x1fj1\x9a\x92q\x9f\xeaQ\xa8\xbd}/\xbb>\xd5\x00Y\xa9z\x07>\x19\xfd\xbfG\xbe\x7fc\x19[\xcdzk\xd4\xb6\xef\xd5\xd9\x17o\xe0\xb1\x05x\xac+\xef\xbe}9\x9b~I\xf6/xH\x14\xca\xab\xb1\xf5T\\{\xde\xb82\x1c\xd8r\xe5\xdd\x97m\xaa\xb0\x10`\x9b\xba\xf5\xeez\xeb\xb5b\xeb\xdca\xeb\x15y\x0b\xd8\xca>o\x8do\x1b\xb0\xe5\xad\xc0\xd3\xf7\xaa\xfd\xeb\xc9\xab\xb1\xf51\xab\x857\xad\x01[\xae\xbc\xfc\xf2\xd6\x08\x0b\xc6\xbcE\xdf\x0c\xa2\xcb[\x0e\xb6N\xcd\x97\x9b*\x89\x96\x11\xa2\xb6\x89\xdaf\x16\xa8]\xd3I\xce\x8bZ\xd46Q\xdb\x1c\xa1\xe2\xf6\xbdLk\x9b\xa9\xcf\x88^\x19\x96\xf5\xfad\xa8\xd6[\xa3\xb6\xecP\xabe\xb1\xc8\xb5\xc8\xb5K\xc8\xb5\xb3:}zQ\x8b\\\x8b\\;B\xc5\x02r\xad\xfa\x86E"\xd7\x8an4e\xe4Z\xa6\xbc\x1a\xb5\xed(\xf7\x96\xd3\xec\xc0c\xfd(\x1aM\x99\x12uMz:%\xaaFu\x02)Q<Zs\xda\x7f\x80+\xc6e\x01.\x80\xeb\xd1\xe0\x92\xf0M\xb9<;\xb8\xdc\xccu\xb8\x82+>\x02\x03p\x01\\v\xdaJ\xd3\xc2\xc5\r\x85\x9e\x8eWp\xc5\xfb\xf4\x00\x17\xc0\xf5hpIz\x89\xbaLh\x03\x97\x9b\xb9\xda\xab\x00\xb7\xf1f"\xee\xb7\x92\x96JP\xe0\xa4\xe5\xe5\x07\xdb\x81\xbc\xccs\xa2\x17\xb6\xb8\xd1\x0b\x15\xce1,\xae\xdf\xcb\xb4\xc2\xb9\xa6\'%\x1a\'ia\xab-\xc1 \xdb"\xdb.!\xdb\xce\x8b${a\x8bl\x8bl;\x86\xc5\xfc\xb3-\xbf\xff\xc7\xcb\xb6\xd2~b,\xdb\xf2\xfb\x89\xed\xf3\x1d\xa7H\xaa\xc5\xfc9jFvy=\x19f\xfd\xfa{\xa6\x9b\x17\x1f\xc8+\x9d\xfd\xb3\xad\xb7\xc6U\xfbl\xc7\t\x0fM\x01Xn\x8a\xb6\x03\xcbI\xe2\t\x80E\xbf\x95O\x07\xac\xb3KI\xcc\xc0*?\xd6\xbb)\x9fv-\xb0\x8e\x00\xd6\xea\x815\x06\x82\rXc\xa0\xe6\x05\xac\xd2Y\xaf\x1dX=\xa0\xd6\xc0*[`\xe1\x0eC\x00+w`\x8d\xd6k\x04\xd6)1\xb0\xf6\x0e\xb0\xda\x91\xcd\xd3\x01\xc0Z=\xb0r\xa7\x82\xa3\xf5\x1a\x815\xa8N\x99\x81\xd5[o\r\xacv\\\xf3\x8474\x03X\xae\xbc\xfc\x8a\x17\xa9\xa9`\xa07\xa0Z\xafS\x14|\xeaF5Q\x15\x04\xb0\\y\xc9\x9bd\xc1\xf5*FR\x82\xeb\xd5\xf5\xca\xe9\xf5\x8aGR\x9e\xda1\xcd\xd3\'<\xba\x03d\xb9\xf2\xf2KY\xa3\xf5\xe6\\o\x7fj\xef\xd7<\xed\x01-@+{h\xcd\x8b\r\xb6\xd7k\x9e\x8a\n\xef7I\x89\xad\xb2\x02\xb8\xa6\x00\xd7h\xbd\xf9\xe6\xad\xa1M\xad\x0csl\xd3\xbc\x86\xb2\x07:\xa5\x9af\xed\xebd\xd6\xaf\xaf\x93\xfd\x91\xe2\xa7n\xbe\xa6D\xf4D\xf4l>\xe5^\x01\x9e\xd10\xc0\xd0\xa6\xaah\x12\xa8Pg\x11=O\xc3\xf5\x1a\xa3\xe7\x99\xf4?]\xf4L\xfd\xcc\xb8;\xec\xd1MQ\x1d\x11=\x11=\xfd\xd1\xce\x16=W<\xf11\xb4\xa9*\x9a\x04\x1a\xe7YD\xcf\xfdp\xbd\xc6\xe8Y\x92\xfe\x97G\xf4t&z\xce\xcd\x97\x9b\x89\x1eDOD\xcf9D\xcf\xd1z\x8d\xd1s\xc2\xb1\x9e\xa1M\x11=M\xfe\xa7\x8b\x9e\x03\x7f1GOgl\xeb\xdc|\xa1\x19\xdbB\xf4D\xf4\xf4G\xbb\xbcN\xee\xa3\xf5\x1a\xa3\xe7\x84\xb3[C\x9b\xe2\xe4n\xf2\xbf<\xa2\xa73\x9bw\xee\x86^\xf7\x88\x9e\x88\x9e~t\xd9\xa2\xe7X\x9e-z\xce\xa8%;\xb4\xa9*\x9a\xb8\xfb\x97_\xf4\x1c\xe8\xb7\xae\xbb2\xcf\xddds\xf1\x867Z"x\xe6\x1f<G\xeb5\x06\xcf\x81\xbc\xf4-\xf7@0\xb1\xd9#\x89\xbf\x04\x83\x89\xcd\x1eI\xf6/\xefW\x96\x9e\xdb\xe9\xf5S\xf1\x8a\xd7*"x"x\xe6\x16<g\xf4\x96\x9c\xa1N)\x98{\xde\xef\xcd<wO(4\x17I\x83z"zf\x1f=gwnG\xf4\xb4\xf8s\xe6\xd4\xf3\xfa\x14J}p\x07\xf7D\xf4D\xf4\xcc,z\xd2\xf6H\xe2/\xd9\x1d\xdc\xe7\xc5=\xdb\x07\x8d\xb6M\xd9\x13=#D\xcf\x89\xa3gx\xbd\xb6\x1e\xc5x\xbd\xba\x1e\n\xbd\xde\xd4=\x94EFOc\xcfH\xb2\xdeGt\xdc{\xf2\xea\xe8\xd9>i\xb4m\xea\x9e\x88\x9e\x88\x9e\xd9GO\x9a\xdb\xe9\xd0@\x9f\x8cSt\x8c\xed\xd1sv\'\xf7UE\xcf\xf6I\xa3m\xf3\x94;\xea\x9e\x88\x9e\xd9GO\xc9z\xb3\xe0\x9e\x81\x93\xac\n\xfd\x81\x93\xacn\xbd\xbb\xdez\x13\xd8cMu\xcf\xe7\xe6\xcb]\xf4D\xdd\x13\xd13\xfb\xe89;\xee\x89\xe8)\xf2\x97Y\xd5=\x9f\x9b/\\n\x05d\xcc{\xe2\xfa2\x84\xcf\x04\xf2z2\x92\xb6)\xccdb\xb8g)\xd2\xc5\xfa\xc2\xe7\x9a\x8e\xee\xcf\xdd\xa3Fu\xf8\x8cO|"|"|"|\xde9|\xce\xe8E\xa6\x03\x9dR\xb0w{\xf8\x9c\xf4Y\xa3\xe7\xeb[\x14.\xf1\x13\xf4\x13\xf13\xfb\xf89\xbb\xa9%\xc4O\x91\xbc\x9d#/w\xfa\xd9=n\xb4\xbf\x1c\xdf\xc1?\x11?\x11?3\x8b\x9f\xee\xfe-\xff\xf8>/\xfe\xd9>qT\x15x\x8d\xd7\xecCg\xea\xa3\xf1\xd0\xfd\x93\xa6\xfe\x04\xd0\xef\xaf\x8b\xdaK\xad<j/\xe5\xf2\xb6>y\x06\xfd\xb6\xbe\xf5\xaa\xf5\xf3\xf9H_\xb6:u\x13{i\xd3o\xbc\x976\xfd\xc6{)\xa1\x9e\xcd\xe3F\x9f\r\xa1\x93\x0e\xcc\x830\xdd\xfd\xb6\xfb\xe7\xd4w\xfd\xbfM}7\x1e:/{t\xf9\xef#\x94n\x07\x9f\xdb\x9f\xd5\x9f\x0f\xe6\xd0\x99\xcf\xbe \x88#\x88\xd3\x81\x07A\\\xab_^A\xbcy\xea\xe9E\x1f\xc4\xb7\xe1\x80\x12\x0c?\x81\xefF\x83\xd5v\xf0\xdb1\xfe\xbb+FA\xbc\xfd\x99\x1b\xc4/\xcb\xac\xd2\x04q\xf6\xbe \xd0"\xd0\xd2\xc1\x01\x81V\xab_^\x81\xb6}@\xaa*Qi\xf8\x88\xbc\xcb\xae4\xf0y\xb9&v\x06S\'+v\xb2O\x02\x0f\x8a\x9dR\xfdb\xb1SpNR\xc4\xce\xa0=2\x88\x9d2\xfd|\xb1Sd\x0fF\xecd\xda\xa3\x8e\x9d\xcd\xe3Q/\x86\xd8\t\x96\xea7\xd3RX*"-G\x1e"-"m8\xd2V\xcd\x8fj\x96\xfaVlc\x91\x16\xa3\x04\x0ba\xa9jy8\xe1\xab\xe4\xe1\x84\xbf\xcc\x13~\xb5k\xbe\xfc\xa5x\x8f\xc7N\x9c\xf0\x05f\xaa\x0e\x88\x9d\x88\x9d\x88\x9d\x0b\x8e\x9dQ\xbcq\xceQ\xc1s\x19\x817\xb5<\xd694$/\x1c\x0f\xe4\xf2\x02\xf8`\x9e\xf3\xd8\xe72\xf2\x9c\x17\x97\xe7\x8d/\x06\xfd\xbc\xf1E\xab\x9f\xd7\xe7\xf8\xe72\xde9/t.\x93\xe9\xe7\x8b/\x16\xfd|\xf1\x85)\x8f\xe2>\x15\xce\x8d\xcb=7\xf2k\x14<\xee#\xa8\x19)\xb8\x8f26\xdd\x8d\xfb(c;3\xd6\xf9\xf4\x8bq\x1fY\r\xef\xfe\xdc\xc7\xa2_\x9c\xfbhr\x05?\x16\xf7\xd6[\xc7\xce\xe6\t\xf2\xcf\x96\x9a\x9bHy\xd9\xd6I\x1c\x0b\x83\x94~Mr\x8e\xe2jy8\xc1\xaa\xe4\xe1\x04\xbb\xc8\x13l\x1d\xc5\x9b\x07\xd9?\x17\xdf\xf5\xd5\xbfL\xa2\x15\xa2\xb8_\x13\xd4!\x11\xc5\xe9\xc8\x83(\xae\xd5/\xa3(\x1e\xc5\xdb\xd5\x9f\xabc_\x02\xf5\x89_\x87T\xcb#\xe2\x01_\x1e\xaf\x0e)\xd0\x8f\xc6G\xcf\x9fu\xf2\xe8x \x95\x17\xabC\xea\xe4\xd1\xf1@$\x8fQ\x87\x94\xe9\x17\xc7\x87E?_|\xb1\xe8\xe7\x8b/Ly\x14\x0b\x93\xd4!3a\x1b`a~Mr>K\x87\xbc4(\x8f\x95\x15\\\xfd$Y\xc1\xcf\xc2\x94Q\xf2n,L\x99e\x98Q\xd7\xa7_\x8c\x85\t\xecA\xf8\xdc\xb4,\xcc\xa2_\x9c\x85i\xb2\x16?+\xf4\xd6[G\xf1\xe6R\xa3\x17CE\x14\xf3\xde\xe3m\x8d\xe9>\\i\xce\x91V-\x0f\xe7]\x95<\x9cw\x17y\xde\xad#m{\xfd\xd1W\xcc{_\x7f\xd6D\xbe\x15\xf5\xed]y\xc7\x90<V\xec\x0c\xa6NV\xec\x94\xf6\xb1\xef\x1d;u}vn\xdf>d\x0fM\xec\x8c\xcd\x15<:v\xca\xf4\xf3\xc5N\x91=\xc4}{\xd2\x1eu\xecl\xee?z1\xc4N\xb0T\xbf\x99\x96\xc2R\x11i9\xf2\x10i\x11ic\x91\xb6}5\xfb\xa1\xd8\xe3\xdd\xc2\x1f\xa1\x17\x8f\xd6\xe0\x88\x8f#\xfe}\x82\xa7L\xbf\x8c\x8e\xf8C\xfd\x06\xf6U\xfa\xf3M\xbf\xa1\xbfh\xf1A\xcb\x93\xc7\x03g\xffR\xc8#dh\xfd\x99Z\xa3\x16o\x94\r\xd4x\xa3\xe5\x99\xe3\x15ek\x83<\xaf\xad\xd5\xf1\x8a\xc0\x8aA\x9e\x17+ly5\xf9i/\x0e;T`?\xbb\xeb\xcf\xc0~(y`?\x06\xb4\x82\xfd\xa4\xd0o\x8e\xecGP\x87c\xb1\x1f\x91<\x06\xfb\xd1\xe9G\xb3\x1f\x81<\x16\xfb\xe1\xcb\xe3\xb1\x1f\x8b<\x1f\xfb\xb1\xac\xd7\xc7~d\xf6\xf5\xad\x91_Z\t\xca#\xd8\x8fT^\x8c\xfd\xa8\xe5\x11\xec\x87)\xaff?\xcd\xd5\x7f\x9fM\xa5\x1f\xba\xb4\xe4\xd1~\xf4\xe7\xd4w9\x95\xea]\xff\xb71\xd1\xe7\xd7\x044\x0c4\xcc]\x17hX\n\xfd\xe6H\xc3t\xfa\xa1\x08%\xb7\x07\x8aP>Z\xa2\x96\xb7\xf4"T\xd9|\xa1\xa6a%x\x18xX\x1f\x97\x8f\xe0a\x92\xe3\xa0\x9f7\t:\xd9,\x1e&\x9d,\xb87\x0f\xd3M>py\x18\xfb8\xc8\xd4/6\xe9q\x7f\x1ef\xd1\xcf\xc7\xc3D\xf6\x10\xf30\xf6\xa4\x07\xc9\x9b\x9e\x8e}\t\xee\x93\x1a\x1f\x7f\xc6\xe7a\xba\xe7\x01i\x1eFi\x14\xd6\x8f\xe6a\x94\x04\x8f~,\x1e\xc6\xdf?\x1e\x0f\xe3\xeb\xc7\xe3a\xfa\xe7\x97\xfd<Ld\x0f\xef\x1a]|\x88\xfc\xcfk\x03\x17\x1fR\xfdb<L\xe0/\x84\r\xb6\x01\xfd\x02\xcf\xb7\x96\x8d\xa0\x17K9\x0cC\xa7\xa3O\x1c\xaa\xe4\xe8>\x1f\xaa$\x90\x87\x92\x95J\x1eJV(Y\xc9\xf5C\xc9Jn\x0f\x94\xac|\xd4A-o\xf1%\xab\xe6Z\xcd/\xc5a\x8f\xb9\xa9\xdd\xf5g\x9b\xe6\xe7K\x9e\x9b\xe2\x1f\xac5\xecG07\xc0*\x14\xc5\n\t7\xb4\xde\x8d\xfdH\xf5\x8b\xb1\x1f]\xe1\x89\xcb~\xd8\x85\x0eb/\xa7f?2\xfd\xe2\x85\xa2\x88=\x18\xecGf\x8f8\xfb\xd1\x15b\xeeW(\x12\x1d\xd4\xc5\x85\xa2`a\x82\xc5~\xf8\xfb\xa7)\x14\xc9\nO\xf7(\x14I\x0b\'1\xf6\xa3.<\x11\xecG]\xd8a\x15\x8a\xe2\x85\xact\x85\xa2\xe6"\xb4/\xb6\x86\x1d\xd8\x0f\xd8\x8fW\xc2X\x1e\xd8\x8fO?\xb0\x1f\xbe~sd?\xa1\xe8N\xb3\x0b\x9a\xfd\x84\xb2\xcf8[\xc4\xd9O([h\xdad\xa1l\x9b\xbaM\x16kk\xf9\xd8\x0f_?\x1e\xfb\x11\xd8\x83\xc5~D\xf6\xf0\xae\x91\xdf&\x0b\xb2)V\x9bL\xc0V\x08\xf6#\xf0\x17\xc2\x06\xa1\xf5\x92\xf6\xa8\xd9O{\x81\xa0\x85\xfd\xa0O6\xfa\xb4\xa8>\x19\xb8\x12G\x1e\xb8\x92j\xff\xc0\x95F\xfe\x0c\xaeD\xae\x17\\\t\\\xe9\x81\\\xa9\xbd\x02t\xdb\xcc\x14\xbd\xa1Rt\xf9\xd9\xe2+Ejy,\xf6\x134(\x8b\xfd\x08\xe4\xf5\xd1z7\xf6#\x95\x17c?:y\\\xf6\x13\x93\xf7h\xf6#\xd3\xcf\xc7~,\xfa\xf9\xd8\x8fR?\x92\r\xe8\xf4\xa3\xd9\x8aN?\x9aM)\xf7/\x85<\x16[\xe1\xcb\x0b\xb0\x1f\x15>\x02\xecG\x87_\x16\x9b\x12\xd9\xc3\xbbg\x16\x7f\xf6\xed\x99\x05\xbf\xbe=K$\x8f`gLy5\xfbi.\xf1\xfdlc?\xa2\xc3\x9c\xech\x15\x906\xda\x1a<\xd8\xe6\xd7\x04<\x0c<\xcc]\x17xX\n\xfd\xc0\xc3\xc0\xc3hy\xe0a\x06^\x12\xd8\xb3\xa5\xf2\xb0\xe6\x8a\xef\x17\x13\x0fC\xc7\xceo\xa8\x08W\x9aM\xc7N-\x0f\\\xc9\x80mp\xa5\x14\xfa\x81+\x81+\xd1\xf2\xc0\x95\x0c\xdc!\xb0gK\xe5J\xed\x8d\xe0\x17\xae\xf4\x8e\x8e\xdd\xe5g\xe8\xd8Q\xf2\xc0~\x0ch\x05\xfbI\xa1\xdf\x1c\xd9\x8f\xe0(\xc9b?"y\x0c\xf6\xa3\xd3\x8ff?\x02y,\xf6\xc3\x97\xc7c?\x16y>\xf6cY\xaf\x8f\xfd\xc8\xec\xeb\xdb3\xd7\x9f\xd5\xf2\x08\xf6#\x95\x17c?jy\x04\xfba\xca\xab\xd9O{#\xf8\x85\xfd\xbc\xa2cW\xa2c7\xc4\x91\x13w\xf9\xcb\x07\x0f\x1b\xeb\n\x1e\x16\x96\x07\x1efZ/x\x98E\x1ex\x18x\xd8\xe3xX\xd5|\xa1\xeb\xd8}G\xc7\xee\xf23t\xec\x02\xb1\xd6\x95\x17\x8e\x15\x1cn#\x88\x15\x04Wb\x13R\x17\xdbw\xe3JR\xfdb\\I@\xd7\xfb\xb1\x82\xc9\x95\xb8\xb9\x94\xda\xcb\xa9\xb9\x92L?\x1fW\x12\xd9\x83\xc1\x95d\xf6\x88s%\xd1\xedI\x0c\xae$\xbb]\'\xce\x95t\xd7\x8a\xd3\\)\xc9\xb5\xdd=|\xf0\xf7\x8f\xc7\x95\x92\\\xdbM\xea\xa7|\xc6\x8e\xd4O\xf3\x8c\x9d\xeb\xcf\xb2\xdb\xbb|{\xe6\xe2M}{\x12\xc1\x95\xec\xd7v\x87\xd6\x1bx\xc6\xaej\x04})\xde\x8am|\xba\xa9D\xc7\x0e\x1d;_\xb4\xe3\xcbC\xa5(\x85~\xa8\x14\xcd\xa3R\xa4\xf2\xe7\x00\xfb\xd1\xe1#\xce\xa6\x94\xfb\x97B\x1e\x8b\xad\xf0\xe5\x05\xd8\x8f\no\x01\xf6\xa3\xc3\x1b\x8bM\x89\xec\xe1]\xa3\x05o>\x1bX\xf0\xe1[c"y\x04;c\xca\xab\xd9O{\x13\xf7{\xc3~0\xaf\xd4\xfe,\t\xfb9\x9c\xc1~\xa2\xe8\x07\xfb\xb1\xa0\x1f\xec\'\x81~`?`?\x12y`?\x8ba?c\xfb*z\x11\xe1>hby\xac^\x8e\xa4\xefk\x95G\xc5d\x17\x1f\xca>(\x99/\x95}\xdfd\xfay\xf9\x81V?\xaf\xcfY\xfa\xc8\xf1\xfcf\xd1\xcf\xc7\x0f,\xfa\xf9\xf8\x81N?:\xbf)\xf5K#\x8f\xd1+\xd1\xe9G\xf3\x03}<\xc8n\x0e\x84\x95\xcf-\xeb\xf5\xf1\re\xbc\xb2\xcem\x04l`\x89\x07\xbe5&\x92G\xe4s\xa6<\xba\xfaP\xa1\xf7\xb2\xdc\xde\x0b\xbfS\xcf\xab>\x08:\xf5,\xb6GI\x88\xa0\x81d\x03\xfc\xfd\xa32\xa2\x1b\x9d\xa4\xfa\xc5\xaa\x0f\xbaI\x16.\x9b\n\xda\x83\xf0\xb9i\xab\x0f\x16\xfd\xe2\xd5\x07\r\xdb\xe3G\xcf\xb1=\xe2\xec"\xb4\x7f\x126\x95\x9a\xad\xf8\xe3Kd\xbd\x8c\xeaC\xc8\xbe\x03y,6\xc0\xdf?^\xf5\x81\xaf\x1f\xaf\xfa\x90\x84\x9d\x91\xf1*\x1e\x0f,\xd5\x07\x1e[\t\xc5\x03v\xbc"\xb0"\xf2\x17\xc2\x06*6U\xb3\x9f\xf6=`o\x9c\xde\x0b\xd8\xcfB\xd8\x8fZ\x1ez/*y\xe8\xbd\xac\xbb\xf7\x92\xaa\x964\x15\xfbIUKR\xc8c\xb1\x9f$\xb5\x95D\xb5\x9a{\xb0\x1f{-$u\xad&u-)\x91<3\xfbi\xde\x03\xd6\xd5~\xf0n\x8b\xf6gI\xd8\x0f&O\xc0~\xdcu\x81\xfd\xa4\xd0\x0f\xec\x07\xec\x87\x96\x07\xf63\xb65\xd8\x0f\xdb\xbeD>\xd2\xdb7\xb1<E/\'\xec\xcfVyTLV\xe3\x83\x88\xc9I\xf0\x91L?/?\xd0\xea\xe7\xf59\x0b~\xe3\xf9\xcd\xa2\x9f\x8f\x1fX\xf4\x8b\xf7\x86\xf4\xf9R\xcew\xa9\x18e\x90\x17\xc8\x97:\xbe\x1b\xe7\x07|y\x81\xfc\xa6\xe3\xa7\xac|i\x91\xe7\xcb\xe7\x96\xf5J{Mc{\xc4\'O\xd4\xf2\x14\xbd\x1c\x9f\xbc\xf1\x1a\x13\xc9#\xf29S\x1e]}\xc0\xe4\xc9\x82{/\xfc\xce:\xaf\xfa\x10\xea\x1cJ\xd8\x94?z*\xd9\xc5\xdd\xaa\x0fJv\xc6d+>\xfdb\xd5\x07\x81=\x08\x9f\x9b\xb6\xfa`\xd1/^}\xd0\xb0=>\x9b\x1a\xdb#\xce.D\xf2\x18\xd5\x07\x91=\xc4\xd5\x87\x88=\x18\xd5\x07\x81=Xl@\x1f\xafz\xf2\xc8x`\xaf>\x08\xec\xc1b{2|\xf8\xd6\xc8g\xf3\xbb\x90<V\xf5!\xae_\xac\xfa\xc0\xb7\x07e\x03\x15\x9b\xaa\xd9O\xf3^\xf1\xcf\xb6;OD\xea\xcb6Ob:\xdc\xd3\xeb\xd7$g\x1e\xa6\x96\x87.\x90J\x1e\xba@\xeb\xee\x02\xe9\xf4\xbb\x1f\x0fS\xee_\ny,\x1e\xc6\x97\xa7\xe1a2y\xf7\xe0a"{x\xd7\x98\xbaj\x94\xba\xaa\x95H\x9e\x99\x87\xb5o8\xbf\xf0\xb0\xd8\xfb\x12\xc0\xc3\xc0\xc3\xd8\xcb\x07\x0f\x1b\xeb\n\x1e\x16\x96\x07\x1efZ\xaf\xb1\x1e&\xe9.\xaa\xe4\x89\xeba\xeczb\ny,\x1e\xa6\x9f6\xe8\xc9c\xd6\x9f5\xf50\xcbz\xe3\xf50v?\x80\xb0\xb5A\x1e\xab\x1e&\xa8_\x11<L-\x8f\xe0aLy5\x0fk\xdep\xfe\xb9\xf8n\x99E\xce\x84o\x80\x87\xf95\x99\xcfT\xb4$\x0e\xf9y\x93\xa0\xee\xcd\xe2a\xca\xba\xfc\xddx\x98\xae.\xcf\xe5a\xec8\xc4\xd4\x8f\xddW#\xf62=\x0f\xb3\xe8\xe7\xe3a\xca\xbe\x1a\xb1\x97R{\xc4y\x98\xee]\x074\x0f\x93\xdd\xad\x1f\xe7a\xa2w;0xX\x92w1\xf4\xfc\x99\xbf\x7f<\x1e\x96\xe4]\x0c=\xfd\x04\xf6`\xf10\xd9\xbb6|kt\xf1\xa1~\xb7\x03\xc1\xc3\xa4\xfa\xc5x\x98\xfd]\x0c\xdb\x80~\x82ww\x10\xf9Ho_\x8e<\xc1\xbb;\x88|\xae\xf7g\x8e<\xee\xbb6\xe8|)}\x17\x887\xbf\x91\xf8e\xfb3S?.\xde\xe8|.\xf2g\xaf\xcfi\xfd\x99\xf29\x03\xde\xbc>\x17\x92\x17\xb3G\x9c\x1f\xe8\xf2\x11\xb7\xce\xb0s>I\xf2y\xea\xfe\x91\xbf\xee\xc8\xe5\x1b\xba:\x8d\xab_ \xbf\x91u\x81\xe0\xfe\xb1\xf2\xa5\xfa\xbc\xd0\xcfM\x89\xfa[\xf1\xfe\x9b\xa6.\x10\xaa3\x04\xf7\x8f\xb0A\xa8\xee\xa8\xa9\xabX\xf8\xb8\xcf\x06\xaa\xf3\x02]\x07\x91LEgr\xdeG\x1d\xc4\xafI\xce\xfd\xa8P\xde\xd2\xd4A(\t\xee\xdf\xa5\xad\x83\xc4y\xf1c\xeb \\\xde\xce\xe5M!{8q\x92\xc9\xeb\x82\xf6 |n\xda:\x88E\xbfx\x1dD\xc3;\xf9\xbcN\xc2\x9b8u\x90\x91<F\x1dDd\x0fq\x1d$b\x0fq?j\xda:H8^\xf5\xe4\x91\xbc\xce^\x07\x11\xd8\x83\xc5;e\xf8\xf0\xad\x91_\x07\xe1\xf1\xa6P\x1d$\xae\x9f\xac\x1fe\xaf\x830\xedQ\xf3\xb0sq\xe3a\xb1\xb9 \xf4\xa3f\xc9\xc3\xd0\x8fb\xc4!\xf4\xa3\xa4\x0e\xdb\x8fCL\xfdb\xe7\xcb\xfb\xf30\x8b~\xe8G\xa1\x1fE\xeb\x87~\x94\x8f\x97\xa0\x1f\xc5\xb4/\x91\x8fB\xfa\x85\xdf\xfd\xce\x91\'\xf0\x17"\x9f\x87\xd6\x1b\xc6\x07G\x9e\xb2\xce@\xe2\x97\xed/d\xbe\x94\xea\x17\xebG\t\xec\xd1\x93G\xe7s\xbe=(\x9f\x0b\xe17\xb6\x7f\xf1\xfcf\xd1\xcf\xc7\x0fd\xf6\x88\xf3\x03\x91=\x18\xfd\xa8\xdd\xae/\x81\xcd7Hy!\xfe\x12\xe0\x1bd>\x0f\xf1\x17Z?]\x9d&V\xb7\xf0\xe5#\xc1\xfe\xb1\xf2%_?^?\x8ao\x0f^?Jf\x8fx?J\xb0\x7f\x84\r\xf8|\xd7\'/\xd6\x8f\x12\xd8\x83\xb0A\xa8\xaeB\xda\x83\xae\x83\xa0\x1f\xb5\x98:H\xce\xfd\xa8P\xde\xd2\xd4A(\t\xee\xdf\xa5\xad\x83(\xe7n\xeeV\x07Q\xce-1y\x9d\xa6\x0e"\xb0\x07\xe1s\xd3\xd6A,\xfa\xc5\xeb \x1a\xde\xc9\xe7uc{\xc4yN\x88\xd7\xd1\xfbG\xf3\x1c\x11\x0f\x13\xd7A\\\xfbj\xea \x94\x84h< x\t\x7f\xffxu\x10\xbe~\xbc:\x88\xc0\x1e,\xde)\xb2\x87w\x8d\xfcs\x85\xbb\x7f\x94\rB\xf8\x88\xeb\x17\xab\x83\xf0\xedA\xd9\x80_guy\xd8s\xfd\xfb/\xa6\xfb\x82\xb6"\xf3\xbb\x7f\x1e\xf8n\x94ol\x07\xbf\x1d\xbb-qW\x8cxX\xfb3\x97\x87]\xdanU\x1a\x1e\xc6\xde\x97\x9c\xb9\x92Z\x1e\xc1\x95\x04[\xc8\xe2J\x02y}l\xdf\x8d+I\xe5\xc9zF\\y4W\x92\xc9\xbb?W\xb2\xe8\xe7\xe3J\x16\xfd\xe2=#\xb6~$\xb7\xd1\xe9\xa7\xab\t\xd1\xfaqkj\xec\xfdK!\x8f\xc5\x95\xf8\xf24\\I&OZ\x03\x8b\xad7^\xa3\x8b\xd8\xc3\xbbF\x0b\xde|6\xb0\xe0C\xca\x95\x04\xf2\x145\xb0\x9e\xbcM\xb5o\xbe\xf0R|m\xb8\xd2wp%p\xa5\xb1<~)M\xc3\x95\x04\xe7*V])^\x8f~l]\x89[/\xa7\xb9\x92\xa0\xb4\xd9\x8f\x15L\xae\xc4\xad;P{95W\x92\xe9\x17\xaf+E\xec\xc1\xe0J2{\xc4\xb9R\xaa~\xa1_\x1e\xb7\xdf\xca\xad+\xb1\xebrLy\xd3\xd6\x95bu \x1fW\xe2\xeb\xc7\xe3J\xfa\xf9\x0bN]I0\x0f\xa3\xa8+\x05\xe6\x11\x98u%n]\x9d\xc2\x8av\x9e\x83\xc2\n\xdb\x1e\x9b\xff\x07\xe2\xd97V' # Updated 15/2/18 spacegroupdat = b'x\x9c\xed]]\x8f\xdb\xb8\x92}\xf7\xaf\xd0\xe3.\x16\xde\xb6d\xb5\xed~\x0c\x06\x08\xd0o\xc1\xfd\x07IO\xb0\x080\xdd\x19d\xb2\x0b\xdc\x7f\xbf\x92H\xd9\x12YU\xac\xa2$\x9a\x92\xeb\xce\x9d`\xda1\x9b\x1fu\xea\x9c\xaa"E\x95E\xfb\xbf/E\xb9+\x8a\x7f\xbe\xff\xfe\xfd\xe3\xe3\x7f\xba\xff~\xfb\xfe\xf1\xfb\xd7\xcf\x7f\xfe\xfd\xfe\xfe\xfd\xf7\xaf\x1fo\xc5\xa1\xf9\xec\xef_?\xde\x7f\xfc\xfe\xf1\x7f\xdf\x9b\xbf\xfd\xeb\xaf]\xd7\xb2\xfc\xefCQ\x1c\xec\x1f\xe6\xa3\xee\xa7\xd2\xff\xa8\xff\xbc\xf9\xe8\xd7\xf7\xb7\x1f\x7f\xff\xfa\xf9\xf6\xf5/\xf0\x97\x16e\xdb\xa6\xfd\xd7\xfe|\xe8?\x1b\xfc\xdc}\xb6k?\xff\xe7\x7f\xbf\xfd\xfe\xf5\xf5\xe3\x9f\xbf\xbe\xfe\xfe\xf1\xf3\xe3\x1f\xb7K3\x8a\xe6kf2\xff.~\xfe\xfd\xfd\x97\xf9j\xf1\x1f\xbf~\xfe\xfe\xaf\xae\xf1\x7f\xeel\xc7\x07\xf3\xab\xbb?\xcb\xc1\x7f\x9b\x1f\xdd_\xbc\xab\xec\x02\xeeC+X\xea\n\xc2+x\xb4+Xm\x1d\x82\xd52\x0b\xd8|\xb0\'\x1b\xed\xb9\xab^\xe9\xaaOX\xf5=\x03\xebu\xbf\xea\x9b\xe7\xdb\x0c\xc0^>U\xd4\xb2+\xda\x17D{\xb3\xf6\xbb\xdds\xf7\xf7\x7f\xc43{c\xc0\xfd\xd5\x8a\xd7\x8f\x8a\xf1G\x11\xab\xbe\x1f\xaerI\xacz\xc5[u``\x19\xe0\xffF;\xc6\x10\x9f\xa2\xc9\xfe\xeaN\xad5\x9c\x8f\x8a\xebG\xae\x93\x84\x0cq\xe8\x8d\xe1\xc0\xbf\x1c\x18\xa6w\x0f\xbe!\xdc\x81ee\x88S\xf7\xf7_\x8aw\xa5\xff\xd8U/D<\x84\xae\xba\xb2\xff\x94U\xe7`\xfdlW\xfdM\xb1\x9e\x06\xeb\x9d\xe6\xf6\xab\xfe\xa1X_r\xd5{\xa5\xb7\xab~\xe9\xfe\xfe\x8fx^\xd7Hg\x1e\xaa7\x86\xf8\x14M\xf5\x1a\xe9\xccd\x88\x17\xeb\x11\xd1\xec\xaf\x1e1\x8f \xbcX\x8f\x88\x15\x04\xf5\x88XC8\x1aQv_\xf8RTO!\x95X}\xa98\xab\x9c\x0b^w\xc8\x05t\xdd\xb9\xeb\xceQ\x80\xb2\xb4\xeb^*\xe0\x93V;\x91\x85W\xc4/\x88x\xc3\xf0\xddf\xe0\x1fS\x18^\xa3\x9e\x99H\xbf3\xc5\xa7\t\xa4\xafq\xcf\\\xa6\xe8\xb6\x1a[\xfd\r\xe5\x02\xcaF3\xad\xbba\xa3\xeb\xba\x87B\x7f]\xf7I\xeb\xee\xc6\xf9\xb5]\xf7R\x01\x9f*\xeeq\x17^\x11\xbf<\xe2\x07\x0b\xdf\xed/\xfe1\x85\xe15\xee\x99\x89\xf4;S|\x9a@\xfa\x1a\xf7L\xf2\x8a\x81)\xbam\xc7\x86\x8e\xda\x7f\x02~\xb1\xfa\xdd\x98:\x93<,:L\xf5\x87\xb7\x0f7\xda\x95\xe7\x81\x8d7\x7f\xa6+\x17#[\x16\x92\xd3c\xa4\x91/\xd6\xc8e\xf7\x7f\xb5r\x1a+G\xc5#\x02W\x1e7\xda\x95/#+\xab3/j\xe6\xb1V2\xcd\xec\xc7!r3W\xdd\x17\xfe\x98\xc8\xd8+\x0eWsq\xef\xc4$^\x95\x03\xbb\xab\xd9\xd7\xc0\xeas\x04hUW\x07\xfe<\xc9\xecP\xfa\xe3\xd2\x97\xbf\xe0\x01\xb3\xef{3\x97\x0e\x0c\xca1\x0c\xba\x8c\xa9\x8e\xce\x88xc}Tpt\x15\xd2\xd7)\xe0\xd8\x8fK!\xd7\xd5\xdd\x036\x18$\xd5\xcct\xd9K\x8f\x1dp\x08\xd3ew\xac\x8fj\xf6\xda\x9a}R\xa4\xa7\x96\x8f\xb6\xfc\xfd\x82\xbf\xae:\xf6\xa5xo\xfe\xd1<.\xadw\xd3\xe6\x8a\xa2\x04\xa8\xd1\xae:\xf56~\xd3,.u4/32\xcb\xfba#\xdb\xba\xdb[kd\xb5q\x1a\x1bG9r\x94\x8d\xbb\xfaye\xcbn\xef\xc5W\xb5q\x866\xbe\xa9\xb8\x80\xac\xc7\x8dv\x95-\xba\xbd\xb56V\xb2\xce\x8f\xac\'\x1a\xb9s\xe4\xe3\xc1\x18\xf9C\xc9:KG\xf6"k6Y\xdf\x8e\x00\x1cKc\xe3\xf7\xc6\xca\xea\xc8\x89\xd3\'\x99#\xc7G]\xc7\xca\x18\xf9\x9b*r\x96\x8e\xec\x15\xa3\xd9d}K\x91\x8f\xf6\xd4\xe0\x87*r\xc6\x8a\x1cod\xc3\xd6uo\xe4\x0fu\xe4\xac\x1dY@\xd6\xae\x8d\xed\xa1\xbcI\xb5.\xdd\xf0Ji\xf6PO,\x8d>\xf5f\x9fR\xfeR\xbbO\xb6{\xe2\x8a\xd8\xf1l\xec>\xa9"\xa6f\xbf\x8f\xbb\xc7\x17\xc9\x8e]\x91\xec\xd3$\x96\xbf\xa6r+<\xf1\xbbj\xb3O`\xf9\x17c\xf6\xefj\xf6U\x99]\x1a\xb7\x8f\x1b\xed\xea\x831\xfb\x94\x92\xb8\x9a=\xa9\xd9\xe7\xa8\x92\xd7\xa51\xfbw5\xfb\xaa\xcc>\xb1\x14S\xdb\xb3k\xb3h\xbb\x9e]\xcb\x07\x1csD\x00\xf5\xd1\x80\xe3\xcf\xe6\x1f\x05\xc7\x86\xc0Q>\xd5\xb7?\xf8\xcc1l\xb4\xab\xed\t\xb7\t\xcc\xa1\xc7\xdb\xd2\x9a}\x16Nx6f\x9f\xb0?\xa3fOk\xf6Y\xe2\x84\x931\xfb\x84\xac@\xcd~\x07\xb3O\xcd\n\xec\x19\xb8\x96\xe47\x7f\xc1Vf6NuT\xbd\xb6g\xe0\xda\x8d\xba\x8f\x80\x8dW\xbfQwyH\x1b\x07\x87\xe7\x9ed\x877\x16\xc0\xe1\x85\x1a-\xb6\xf9\x88\xe1v\x93w\xb1dp\x1a\x88\x1fA\x0c\x801J\x9d\xb8\xb8\x1d\xd8\xf8zv\xf3M\xf5\'kn\x92\xda\xf8\xdah\xf7|06n3\n\xd5\x9f\x9cm\x9cN\x7f\xe0\x9e\x02\xfa\x938%\xc2p\xab\xfa3;n\'\xea\x8f\x14\xb7\x03\x1b\x97\xc6\xc6m\xfe\xf3U\xf5gq\x1b\'\xe1&\'\xc7}\xb6\'\x8e\xdb8Rm\x9c\x9f\x8d\x85\t\x06\x18G>\xdb\x13\xc7\xefj\xe3,\x1f\xbc\x8e\xcf\x15\x06~l\x0f\x1c\xb7\xb9\xc2\'\xb5q\x1a\x1b/\x9d+\x8c\x81\xb1{\xb6\x0f\xd7\xb71\x97\xe6\x83\xf9\xe5\n\xc2`\x1cj\xb4{\xb6\x0f\xd7\xb7~\x1c\xca\x07\xd5\xc6\xd3\xfdX\x1aW\x8f\xa5Ub\xe3\x81\x1f\xdb}\x85oZ\xd7\xc9\xf76\xb4\xf8\x98\xcb\xf8\xf1\xa0>\xab6\xce\x99\xab\xa5~<\x88\xabm}\xb6\xcd\x8f\xb5v\x97\xb3\x8d\xa3\xf588\xbc\xd4\xb5;\xe1B@\x8dP\xdcj\xednv\xdcN\x8c1\xa4\xb8\xbd\xd9\xf8t06\xfe\xa6qd:\x1bKc\x8c\xa8|\xf0\x16c\x9c\xca\x9b\x8d\xb5\xae\xb3\xbc\x8d\x93\xc4\x91\xae\x8d\xaf\xf5Y\xad\xc1\xe7m\xe3\xa8\x18\xa3\x8b#O]}\xd6<Q\xfc\x88\xef\xb5\xcb%}X\x9a\xbe\x9d0\xecT\xdf\xcc\xfe]\xcd~\x0f\xb3G\xa9vTe``\xf6\xc1\xb5\x11\xea\xed\xabH$\xfdYE\x98\xdd^\x1b1\xe90\x97\x9a\xfd>f\x8f?\xdfu\xb2\xb7F\xb4\xde\xae$\x7f?\x92\x97\x9a]\x1a\xd2\xb9\xde~1f\x7fch;Z\x1a\\\xb1\xd9\xef[-\x8c\xaf\xbaHI>\xaaZ\x18\x8a"\xf0j!\x9f\x8c\xa2\x82\x1c(\x0f\x1aAy\x98\x81\x8a\xaa\x85+\x86r.I\xe9\xd2\xc2\xe5\x9a\xbd+\x12\x7f\x9e\x14\xa6\xfa@\x07`\xec-\xb8>\xfe\x9c}0{>\x18p\xb4\xcf\xc6\xff\x19)o\xdb\x07\xc7\n\xb7\xccf\x00Gpx=\xdd8O\xe1\xf3D\x90n\x84P\xe8\xf4\xe7\xfd1\xc0KDp\xfb\x80\xbf/\x1b\x1e[ku\x7f\x08\x00\xdf\x7f\xbf\xfb/\x11\xe0\xfb\xee\x1apt\x1f\xbeN\x91J}<<\xda\xec\xf7\x13\xc1\xca\x98}\xc2qL5{Z\xb3\xfbI\x878\xc7\xdb\x9d\x8f\xbd\xd9\xa3w]\xd5\xec\xd1f\xf7T(\xd5F\xecyp\xe3\x8f\x9a\xfda\nyg{\xe6\xbe\x8e\xccrt\xef=\x8e\xcdG_tz\xa5\x1a]\x87\xe4\x02\x04n\xb4;\xdb\xf3\xf6u\xa9\x06Nc\xe0\x9e\xe7D\x06\xee\xd3=\x91\x81Mpn\x0f\xdb\xd7\xfa\x1a\x86\x9c=\xf8\x86\n\x81\x81\xbbB\xe5\xd9\x9e\xb4\xaf\x8fj\xe04\x06\x8e\xf2\xe0c\x8c\x07\x9b\xdaKW\x89~\x8d\x95`\x8d\xbaf0ybU\xbe\x1c\xac\xc9#UYm\x1ems\x7f\xe5\xb86\xb7\x8d\xd8n~K\xe5:\xa1\xbet\x1f~)\xf6\x1aj\'wj\xc2VX\xbd\x8cD\x05\x98J]l\xbd,\xd6\xc0\xea\xd4+\xb4\xb9\xbdz\xa2~\xd2\x87 7*\xd5\xf6\xe2\x89\xbaR\x13gm\xe2\xf8\x0c\xeb\xd2\xd7\xc0\x9e\xf4)\xd7\xfc,\xec\xefi0,\xec5\xe2m\xd9\xd3\xbb\'`\x11V8\xbc\x19\xa5\x07D\xad>\xe3:;j!\x0b\xf3P\x1b%=\xb7-\x99K_\xbb\xad\x94\x98\xb2&&\x81\xf4x\x8dd\xc4\x04\xef\xef\x05\x88\x895\xbc\x19\x89\t\x86\xad2\xd3\xec\xb0\x8db\xa6\x1b\xc9Ha;\x88\x98\xbaM\x87\xd7\xf8\xb4Gs\xddh\xa3\xdf/\x13\xbaX\xa3\x97O\xa1\x03\x02[\xacp\xe4\xf2\xc8G\xda\xb2epx\xfe\t\x14\xc1iW\xa7\xa7\xc5\x14j\xbcz\x18\x92\x05\n\xb5j$g ZN\xc6\x1eD\xf2\xd1;\x18\xcd@\xf2\xed\xc0\xac)\xc0\xdbk\x81\xeaf\xe96\xbfY\xbe\xc2xz\x06\x8d\x02\xbe\x88\xb2\xd5\xa8\'.\xc5a\xc3\xe3\x85\xc6\xceo\xe7Q\xdc\xee\xe5p\xc5m\xa9\xc0\xcd\x10\xb8\x8bT\xa8\x98\xc5&\x06p\xc9\xe1-\n\xdc\xd2\x02\xb7T\xc6\xcd\xfc\xf4J\xf4\xf93&p\'2.\x90\xa9\x86\x81{\x0b*\x05\xc0\xedN\xe4\xbcT7\xe0*\xe5\xe6\x88\xdcaH+\xcbl\xba?\x04\xc8\xf5{\x12Q.\x90\xd9,D\xb9]f\xf3\xd2\xefGWJ\xb9Y\xc6\n$\xa7\xf1\xf6+\x99\xc0\xbdG\x90\x0bx0\x17\xb8\xd7mv\xa5\xdc<\x91\xbb\xc8vG\x90r#\xef\xae\x16#wB\x94\xdb\xef\xc3\x1e\x95r\xb3\x8c\x15\xa0\x88PD\xb9YG\xb9eL\x94\xdb\xd5\xc3^\xfa}\xba\xa3Rn\x9e\xc8%\xc3H\x0e\xe5FD\xb9\x82k\x02\xc8 |\xd1(\xb7\xdf~\x8cg\xdcU\x17\xf0s\x81rT\xdc\x0b\x04\x96\x8f\\\xdc\xbdnE)\x96\x1fz[\x15\xa7\xe5Q\xe8\xc2\xc5\xb2\x94\x96\xc9\x85\xe0b\xf9\xba\xc1\x16\xbe\'F\xc3\x89\xb5r0\r\xc1(\xe2f\xcc\x89?<\x12\xecP\xa3]y8X\xdc~S\xdc>4n\x85\x9brH#\x0en\x85\x9brP\xa3\x06\xb7eakf\xe1;\xb7\x15\xb8\xf7\x04\xee\x94b\xaf\x8cpYu6FN\xba,\xe1V=p\xc3o\x0fT\xe0\xa6\x07\xee<\xb5^\x19\xe3\n\x80+\x0cV\xe7\x04\xee\xd1\x00\xb7\xbd-Zq\x9b\x1dn\xef\x11\xe1\xa6#\\V}\x18j\xd4\xe0\xb6\xb6\xb8\xfdP\xdc>4n\xd3\xf1\xadpC\x0ej\xd4\xe0\xf6\xb9\xb0\x81\xc2\xbb\x027k\xe0\xa6\x8bp\x05\xa9\x199\xa7e\t\xf7\xd4\x03\xf7\x9b\x02\xf7\xa1\x81{\x8f\x9a\xc2\x14\xc6m\xf7\xd6^\xa7\xd4pu;\xe2^PN\x17\xf4\xa6\xe3\xe0)\xc9\xda\xc5B9\xba:\xa6P\xde>\x94\xd7\x91\xbf\xbd\x14v\x97\xf8=\xf6\x854\x8a\xe5h,\xdfq\x97x1Z\x8e\xaf\xa1\xf1\xb7\x96\xa19\xed\xca\xf2\xd0c\xf9M\xb1\xacX\xc6\xe6\x14U\x9f\x90\x86\x18%\xfb\x19\rwN\xa5\xc1r\xfb\xe9\x97b\xdf\x9eD\xd3\x8d\x8c\xe4\x01\x05\x81A\xc6\x11-\xdf\xc8H\xa3\xa4\xc7\xce\xd2\xc4\xc6eu\x03\xae\xd6\'\x14\xb8\xec\xa2\x06\xd6(U$\\\x1e\xaf\xc0-\x95r\x1f\x1a\xb9\xbe\xec3\x90;\xb1\xb2&\xa0\xdcq\xa3\x06\xb9\xf5\x00\xb9\xca\xb9\x8a\xdc\x19\x9epKS\x13.\x9f{\xe4\xbe\xebsB\x9b\x05\xeeb\xa5\x06a\xc0\x1a\x15\x1aC\x8d\x1a\xe0\x9ez\xe0\xbe)p\x15\xb8\xc3\xd83\xb6\xde+\x00.\x8b\xa6\xa1F\rp\xcf=p\xbf)p\x1f\x1a\xb8\xb3m\x1f\x07\x81+\x8c\x8c\xa1F\rp/=p?\x14\xb8\n\xdca\xe4\x19\xbb+!\x00\xae\x80q\xbd\x18\xd7\xec\xb0M\x89quWb\xabX^Y\xd8[\x1dz,G\x87\xbd\x8a\xe5\xedcy\x15\x91pU\xf6X\x8e\xdeaS,\xaf\x11\xcb\x1b\xdct\xab\xaa\x1b\x96\xf5\xe4\x83by\xd4Hx\\\x02k\xc4\xad\t;\x8dx5\xe1k\xa3\x06\xcb\xf6I\xb8\xa7w\xc6I\xe1\xd5\xbf\xe7%?\xe4\x12 \x8c\x82{T\xa0;3\x0b\'\x8a\x8e\xeb+r\xc3Oq*r\x1f\x03\xb9\x13\xcf>$\x8a\x85\xed\xd3pO\x1f\x8fpSIyR\xe8r\xa0\xbb\x02\xd2\r.9V\x81\xe6\xc6MX\xad\x9bW\xb6\x0e\x1a\x977\xbce\xeb\xf7\xbc\xb0n\xea!\x15\x94b\x04/GZ\x0f\xc5\xe4r\x14[\xc00\xb78\\\xca0|\x10\xba\xb9\x85\x94a\xa4;OQ\x0c\xe3!\xf7tE\xee\x03\\r\xa0\xe2HAw\xdb\xe2\x08\xc7\xaa\x01q\x04bU\xde\xd6X\xd0\xb8\xbc\xe1\x05\x18p\xe2\x1e\xa1@\x1cYA;\xd4\x88\xa0\x18\x15G\xca`\xdb\x16Gi\xe6(\xdd\xdd\x8e\xca\x1c=\xe4\x9e\x8b\xbe\xe6\x11\xce\x1c\x15\xb9\x93\x90\x9b\xb96\n\xb3\x18F\x92\xc5\xcf\x97b\xc2\xba\xcb\x15\xb9\xe1\xb0N\x91\xfb\x18\xc8\x15p\xaeP\xf8\x19\x11\x10\x9bs_\x8a>Zx\x80\xfb\xb0\xd7\x98\x90\x08KGQ\x05\x9d\xd4\xa4{\x8f\x84\x04\x9e\xd3|\xd5:\xa1q\xa3r\xc0(^b`o\xd9j\x1dF1\x9a\x90\x88\x0c\xb6\x81\x84\xc4k\xc4f\x18lx\xb3\x86u\xe3%\xdf\x95\xc7\xc3\x15\xb9\x0fp\x95\xae\x8a#\x05\xddtq\xdd\x00\n\xb1\xbb\xb0\xc1%\x7f\x04q\x14T\xeb\x84K>c\xb5\x0e\xa5\x18\x15G\x9e\xc1\xb6(\x8eR\x86q\x90\xbbL\xe68\xf6\x91\x06\xb9\xa5An\xd5\x1d\xae\xd3\xa2G~\xe2\x08\xb1\x9a\xa0\xe8\xc1\xe2\xcf(\xa6\xc65!\x8586\xd0\xadn\xd0\r_\xbb\xa9\xd0}\x0c\xe8J\xf7H\xa4\xacK.\x04;%9\xf6\xd0\xfdx\x84K\xbb\xd7\x9d\x93\x08\xb0+\xdcdN\x8d\xdd\x19vI\x82K\xce\xcb\xb3\x98\xc9\x19\xb9\xe4\xa9s\x12a\xc2\xc9\x88V\xd9\x14H\x1b\x17jDq\x8c&%\x94\xc5\xee\x91\x94H\xe5QJ1~\xfa\xc3\xa5\x98\xf8=\x81\t\xdbY\xc7\xfa\x06\xdd\x07xk\x9b\xca#\x85\xddtY\xc9\x0c[\xb1\xc1%\x7f\x04y\x14\x94\xec\x84K\x8e\x03V \x8f6\x04G9F\xe5\x91\xb2\xd8\xb6\xe5Q\x1a\x81\xc7\xef\nDG\xe0\rt\xfb7\x95uG\xec\xb4f\x97\x9f:\x92\x01\xfc\xac\x85\x8f\xd0\xe6\x0fs\xc7\x88\x01\xdd\x19\xd4\xb1\x81n\xff\xae\xb2\xee\x8c\x9d\xd6\xec\xf2\x83n\xba\xc0.\x14\x041#\xa7\xa5X\xd7\x0b\x18\xce\xc55`x\x807DjR\xb2\x19\xec\x06\x97|\xbbIIh!x\x80\xa5\x97\x9c\x81=\x1e`)\x8e\xd1\xa4Dd\xb1\r$%\xb7F\xd2\xc8.I\xddc\x1c\xad6\xd0\xbd\xdc\xa0\x1b\xfd\x12\xc4\xf5@W\xe5\x91\xc2n\xba\xac\x04\xca\xb4\x84\xd8\r.\xf9#\xc8\xa3\xa0f\'\\r\x9cl\x05\xf2hCp\x94cT\x1ey\x16\xdb\xa2<J#plxay\x9c\x92=\xda\xb7\xaaN\xb9\xc3N/d\x8c\x06s\x94^B\x8d\x04U<V\xc6\x11E\xde\xb8L\xa4)\x85\xd4\x87+\x98\xa3\x0f\xde)\x98\xb7\x0ff\xe9n\x8a\x94\x99g\x08\xfe\x1a0\x97\x06\xcc\xe5\xd3\xd7\x07}\xe3\xf5\x9ds\x192\xfd$\xe1l\x1b\xc5\xbf&\x98\x9d\xcb\x0c\x1b\xb1\xe1\x8c\ro\xa1<\x9c\xb5\xe4\xd8\xf0\xa2\x16\x82\\\xf2\t\xb9\x8c\xb0\xba\x1a\x95\xa8N-\xf5a\x0b\xc1\x03,E;\x82\\f\xd5\xb4\x93Az\x83i\x07\x9e\xde\xd4\x9d\xd1\x85\xacS\xdfZ\xcaY\'JD\x05\x11!4\xa7 \xeb\x8c\xe7\xd4\xa0\xb9\xba\xa1\xf9METE\x94\x80s\x84\x88\xb2xv\x96l]P\x10\xdc\xb6\x88\xb2\x02\xfe\xa9\x05\xc1\x11"H\xe3\xba\x80\r\xd1\x8e\x8a\xa8\x8a\xe8`xQe\x15Q\x8d\xb0\x9f\x13\xeb\xe5\x18\xae\x88\xda\x90\xd0<\xb1q\x8cS\xcf\xf5\xd4\xb5\x8f\x8ba\xd6\x81\x1f\xafz\xd2~+\x04?\xaf\x02fN\x0f\x1fK\xb5U\x1a[\x95OG\xb9\xad\xaa\xa6Qc+s\\\xf6X\xa9\xad\xd2\xd8\xaa\x8a\xb1Uil\xd5\x9e\x0f\xfdW4\x056=w\xbf\xe9\x8a\x97V\xac\xc1\x8f\xf6\xd5\xed#\x8e\xa9\x06\xa6\xd9\xf7?\x977S\xed\xfb\x9f\x8fl%\xf7\xc7j~\xaa\xec\x1f\x19\x19t\nQ\xfa\x06\x85B3\xf5=\xcaT\xd7\xbf\xc4~\x01\x9d\xf8#\xbf\xc03\x95}\x11x\xc8\xf9V\xbf\xaf\xbe\x05\xb7\xbatn\x15m+%\xca5Xt\x93\xa7Z\xb6\xc0\x94\xe6.\xccc\xf3\x9d\xcd\x07\x95\xcb\x955\x13\xb9\x96\xd3\x93h\x1fm8$\xbaV\xd0\xf74\xfc\xed\xde\x9c\xe0\xd3\x14\xcf\x07\x8b\xa6\xaa\xd8|:\xb9\x114\x05\xebA\x100\x86C\xe2m\xdf\x0c\x87\xe4\xc2\x11ESi\xd0T*9\xad\xa0:\xe1\xf4\x14&\' \xb7\x0e\x93S\x1f7\xc5\x90S\xd5\xc3I\xd9i-pZ\x9a\x9d\x06\x18\xe4\xb3\x93\xa9\xef<\xdb\x12w\xa5\xec\xb4\x82z\x9c\xd3\x13g\xf74\x82\x9d\xaa\t\xecT\xf7pRvZ\x0b\x9c\x96f\xa72\x86\x9d\xccN\xc1s\xbbS\xf0\xaf6\x12\x8f\xc4\xd2\xc6\xca*\xb9 n\xc3\xd1:\x84\xb8M\x16\xc8\x17\xc5\xd2\xf5/\x17,\xfb8P\x10\xd5\x11\xa0/\x0e\x7f\x192\'\xff\x8b{tx\r\x96\xcc\xdd*\xc7\xe2]\xb5p%\xccD\xa0\x89\xd1\x13\x7fNdh\x055j\xd0t.\xfa\x1a\xe7\xe6\x1f\xe6\xde\x08\x9a\x08\x9d\xc3\x81A\xe8\x1c1\xbc\xc3`x,4],\x9a\xde\x94\x9bV\x82&\x017\r\x0e\xcd\xf2\xb9\t:\x95\xca\xa8\x8c\xb4\x8fl=\xdf\xf6_6\x7f\x0f\xd3F\xd0$\xe0\xa6\x1b0\x04\xdc\x04\x9c\xdb\x0es\x93A\xd3\xa9\xfdF\x1b\x83\xc7\xea\x9cf}9".\xe3\xd8\nD\x9cf}R,]\xffr\xf1\xac/*\xb2\x02\xbf\x18\x1c\x1e\xf4E|x\r\x96J\x8b\xa5X%T\xf6Z9{\xa5\x8e\xbe@\xc4){I\xb1\x94\x11{\x85\x1e\x15\x03I\tz\xe20\xc8^\xe3F\r\x96\xcc\xf6\xf2\x9eSfX\xfd\xc9\xb7\xedS\x13Q\x02\xc5\xa9\t\xaf\xc1\x13\xd4\x04\x97\xd3O\xc7\x1b\x9c6\x7f/\xfa\xe3\xc1\x89\xa5tH#\x19\x9c,;\xd5=\x9c\xc2%u\x85S\x1ep"\xc4\xee\xde\x9b}\xa7\xe7\x1eN\xe1*\xa8\xc2iupb\xd5\xad\x08J\xe3\xc3\xc9\xb2\x93y\xb4j\x1f.\\=\xc8S \x8f\x07\xb9\xe4\x0c\x06Bn\x93\x8f\xa9l$\xf7\xcb\xf8\xbc\xc2\xe9\xdc\x83)6TW\xfeZ9\x7f%\x97L\x10r\xca_R0e\xc4_\xc1k\xff ZBjW4\x7fy\xb5+s\xa6\xe1\x14 /\xad\x82f@K\xce\x17y=\r\xe7\x11\xdeL\x86b1\xd6\xf0\x1a$\x99\xf3\x0c\'=\x1a\x93\x08JS\x1e\xb0\x91A\t\xb8C*\x0c\xa5\xe7\xa7\x93\x1cJe\xd3hW\x9e\x0f\x06J\xcf\n\xa54P\x9a\xf24D\x02(\x951Pz6P*\r\x94\xf49\xad\xcdA)J\xe0n\xcfi\x89X\xa9}\xb0\xe6l\xb6\xf9N\xb5B)\r\x94\xd2\t\\\x14\x94\xca\x18(\x99g\xb4\xcef\x8b\xef\xb4\xf9[\x12s\x81R\xba\xb0;R\xe0\xfc\x12\x02\x83\x95\xda\x04\xeel\xb7\xf74\x83[\x01\x94\xe8\xe1a\x85qrxD\x01\x14\x1f\x1e\\\x18?\x9b\xad\xbd\xd3\x93\x1ebY\x01\x96\xf2\xae\x06\x9c\xcds|\xa7\xa3\x82i{`J\xaeq\xe61\xbeSQm\xff\xbe\x8d\xb2z88\xa5\xe5&w\xc5X\xe2\xe8\xaf\xd8R\xfb\xd3\xceo\x17\xedx\x0e\x7f;\xaf\xa7\xe1og\x1eO<\xdb\x1d\x83R\xbdq\x93\xb9p\xdab\xaf\xbbbA\xb8CY\xf72\xde\x18u\xb5\x99]\x08\x997F\x9e\xee\xec\xea\x9bv\xd7\xe5Y\xbdq\x93E\xce\xb4\xf5rw\xc5\x82p\x87\xca\xa9\xcbxc\xe4U^\xa9\xbc\xd1\xec6\\\xdao\xb4\xbb\r\xea\x8d\x9b\xf4\xc6\xa8H5z\xcb\xc1]\xb1\xb5{c\xd4\xb5\x9fQ\x91\xaa\xd9\xb0\xb9\xb4\x9f\xb6\x1b6\xea\x8d\x9b\x8cT\xa3\xbc1z\xd7\xc6]\xb1\xb5G\xaaQ\xd7\\Fy\xa3\xd9\xf3\xba\xd8\xed\xd3\xa3z\xe3&\xab8i\x8b\x82\xee\x8a\x05\xe1~Cn\x96U\x9c\xd4O\x05^\xec\x0et\xf1\xbe\xfd\x9b\xd1\x1e\xd0\x19\xa3\xa4\x11r\x11\xee\xf0h\xb43\x16\x82\xbf\xe4$\xda\x19\x0b\xc1\x9fS\xaa\x8b\xe5.f\x0f\xffT\xbcm\xff*0uF>2\xdcy,\xe3\x8ci\xaf^q\x7f;[\xedS\xdd\xa4v\xb1\xa7 \xda\x07\x9cU\x1a\xb7\xe7\x8d\xf7\x88S\xb7\xe3\x8d\xc9\xa5\xb1?G\xd2\x04\xaa\xaa\x8d\xea\x8d\x89\xbd1\xf3@5\xb96\xda\xb7\xab\xb6i\xa3\xd6p\xd6\xe0\x8d\xf4\xf0\x18\xa5\x0b\x7fxD\x91\x04\x1f^T\x91$\x07o\x14\xd4pX\xc3\x9b\xa5\xa2j\xb5\xd1\x9c\xc4\xd9\xb7y\xa3z\xe3\xf6\xbc\x11P\xac04\x80\xf8\x91]}\x94y\xe3="\xd5\x9c\xbd\xd1\x9c\xc4\xd9\xb7\xa7T5o\xdc\x9e7\xdeC\x1b\x89P\x10G.\x11\n\x12\xc3;\x0c\x86\xc7]\x88\x8c\xf3\xc6\x97\xf6\x1b\xd6\x1b5o\xdc\x9e7\xdeC\x1b\xb7\xe3\x8d\xa9\xf3\xc6\x97\xf6\xd3\xee\xc92\xc6~\xe3\xea\x1f\x08\xda\x84;\xca\xca8\x00\nyL\xed\xce\x83\xcd\x16\xd9\xbbc\xc6\xa1\xea\x8b=\x8a\xd3\xb8cx\xc7Q\xddQ\xddQ\xd4S\xd8\x1d\xd3\xde\x98\xe7\xfcv\xb6\xe2\xcb\xdcq\xc2Y\x9c\x97\xfe6\x88\xce\x1fU\x1e\xb7\xe7\x8f\x99\x9f\x8d\xcb\xdc\x1f\x93\xcb\xa3=\x8es\xec\xc2U\xd5G\xf5\xc7\xc4\xfe\x98y\xb8\x9a\\\x1f\xcd\x89\x9c\xaa\xd8\xfcuI\x0b\xbabT\x00\xe9bAN\xb9\\\xd8\x0e\x87\x81\xcd\x8fl\x84\xcd\x0fi\xb4\x87\x1a\x85z\xdaC\xc3\xa3{\x82\x96y\xf8\x0bh\xcaD\xe6\xc7\xe8\xc9\x9f\x1f\xa3\'\x7f~\x9e4\xb6\xc7q>Op\xc5\xde\xado\x84`~\x1aq\xc4\xe0\x96\xe2\x03\xc7\x15\xbbqw\xff\xde\\s\xef\xfcl>k~\xae\xd9\xb7\x9d\xc7\x8dU}\x18p\x12\xf5aw\xa8w\xf4\xe1\xf6\x10\xcfk\xbc\x0f\xef\xfd\x8b\xc7\xbb\x9f\xf6\x80\xab\xf4\x9f3\xe4\xf4Px>l>\x1b\xfbp7\xaa\x8a\xed\xc3\xeeX\xd5;\x01\xf8\xabw\xbaC\xbd\xa3w\x9aC=U\xa9\xd1\xee\xc2\xbe\xe8i9\xdb\x17\x89\xb7\x8c\x82\xf6vC\x84\xe5|\x11\xe9\x89\xf6E?\xa8\xe1\xfa\xa2\xfb\xf6\x89\xe5|\x91\xee\xc9\x9f\x1f\xb4\x10A_\x1c/D\xe3\x8b\xed\x91\x9e\xd7\t\xbe\xa8R\xa9\xee\xa9\xee\xb9\x90{V\x87\xf6\xd3/\xc5{\xb1\x0f\xb9\xa7\xd6h\xa7\xf9\xa2\x86\xad\x9cF\x0f\x1c\xb6V\x87\xf6\x1b_\x8a\x8f\xb0/\xae>l\xadj\xf5E|~\xea\x8bw\xf6\xc5 \x8c\xdc\xa0\x07\x8e\x94\xc0\xa1\x86\x1a\xe1\x81\xdc\xb0\x11\rX\xa4\x11\x81\x08 \xbc\nGJE\xa0\x11\x88\xf2PO \xca\xc9\x9e@\xdb\xc0\x91R \xbc\xf2"%\xba\'\x7f~\x8c\x9e\xfc\xf9\x8d\x1ba:\xb0\xc9\x97S\xe6\x90\x1f\rCh\x8e\x0e\xf8\xb9\x04W\x07\x98\x1e2\x83\x0e0\xbd\x1ep+\x81\x0e\x80I\xd5":\xc0\xe8\t\xd1\x01\x0eU\xc0\x0elc\xb2\xf6\x98\xe7\xe7)\xf9\x91?\x0c\xdd\xad\x9b\xd5\x895\x98\xe34z\xdc`\xaeq\xe2\xf6p\xe8\xe7\xe2\xcf\xf8\xc4j\xfbN\xac\x19\x19\xe0%\xea\xc4\xeeP\xb3\xcf\xc8\xea\xdb\x1f\xfc\x8c\x8cn\x84\x84\x8eN#^F\xe6\xf6\x84#b\x10f\x11\x8d\xf0\x8c\x0cl\x14\xca\xc8\x88Fx\xe8\xe87bdd@O\xe1\xd8,\xd8\x13\x94\x91\x05{\x82\xe2\xcda#L@$\x19\xd9\xf6\x05\xe4\xee\xa9\\o2Q*W_\xa7\xc5\xf0\xfcQ*\xc7r\xadYR9\x16]\x00\xfe(J\xe5\xdc\x85@l3C*\x17\xec\tM\xe5\xc2\x1c\x03{\xbe\x8d\x02\xdbG\x12^\'\xa4r\xba\x13\xad\xf1\x9d\xe7\x9e\x1a\xdf\xb1zb$i\xe6\t\x85\xaf\xba\x13\xad\xa7B\xe4\xbe\xa8\xa7B\x88\x85\xe0U=\xaf\x0b\xd1\xf8b\xfb\x88\xc2\xeb\x04_T\xa9T\xf7T\xf7\\\xcc=\xcd\x15\xa2uq\xdc\xfe\x9d\x85Z\x97\x04\xd0\xaeq\xab;\xd4{\xc5\xadnO\xce\xeaQ\xc6\xbd\xf6\xe4.9\x89\x08\xbc\x11\x02\xd8\xd1\x9c\xd8\x8d\x90/\x92\xc6\xc5\x86D\xc2\x08\x9b<\r#\xbc\x11\xcf5\xb0\x95\x0c5\x02W\x92v\r\x04\x1d\xa1F :\xc6\x8d\x1a!0\x0f\xba\xd4\x95*\x81*\x01\xd1H\x95\x00X\xe6\xfb(\x01y\xac\x0c#C\xf2X\x19F\xbbdO\x18\xc1\xfb\x8d\x18J\xe05\xe2(\x01\xa3\x91O\x86\x8c\xe1\xf9\xb4\x0b\xae\x1e4$8P\x87\x1b\x81+\x894\xa2\x95 \xd4\x08D\xc7\xb8Q\xa3\x04\xedcV\x9f\'\xa5\x04}\x82q\x1b\xc7\xd6\xb6\xa8TA\\\xec\r{U\x05\xe1\xf7\xa4\xb9\x04*\x0c\x9aK0\x1be\x96K\x94\xed\xa7\x8d\x82\x94*!\x99K\x08\x154A\x8c\xe3\xd7\x1c\x19\x12\x82\x14_\x17\x90\x10\xb2\xccKJ\x08\x1a4Q=\xb9U\xe8E$\x84\xd1\x93??h!x\x12\x82V\xa1\x11n;^\x8fF\x1c\xfd\xf3\x14x\x12B\x9c\xa4\xc2\x93\x90\xdav\x07\xf4\x84)\xc3\xf1\xda\x089\xc5\x07\xb1\xa87\'\x8e\x84x=\xf1\x92\x90\xc0!C8\t\xf1\x17\x02\x1c\xd2p\x04\x90\x9d\xc0\xc9\x8f\xf3\t\xb0\'ZB\xfc%G&\xbfw{\x1a\x1c\x93+\xdbo\xbfNIBV\xbdo\x98\x836hz\x11h\xa4\xe9\x05\xe0\xfd!\xe3jz\xa1\xe9\xc5\xd4\xf4\xa2}\x90\xeeKQ\x1fu\xabBO\x90\x10\xc8%\xb3\x04=A\x02/DP\t\xc0\x85\x08)\x01\x19\xbb\xcf\x9a%@\xd1\'/K\x18\x05\xc7\x0c%\xf0\xe6\xc4\xce\x12\xe8\xd4b\xa6,\x01\t\xc3i%\x08\xa5\x16\xe0J\x86\x02~<K\xf0\xf3\x11a\x96`^\xd51\xa9\xd0\xa4J\xa0JP\xa8\x12\xa4R\x82#@\xeaA%8B\xb4\x14R\x82\x12`\x98\xa0\x12\x94\x1e\x971\x94\xc0\x9b\x13G\t\xbc\x9e8J\xe0/\x04C\t\xa0\x85\x00\x87\x04\xd7\x8b`\xf9\xc0\xebE\x04\xa9\x83\xe8\xf0\x97\x1c\x99\xbc7\xbc\xebB4J`\x9e\xc8\x9a\xa2\x04Z0Rq(T\x1cT\x1cT\x1c\xa0!\xadY\x1c\xcc\xf3\x80\xfbv7a\xf3\xef\x82\xd7\xad\x03\x17C\xc3^\xa3\x94\x80\xacZb\xf3\xa3K\x9d\x92\x9e\x96S\x02\xba\'\x7f~\x8c\x9e\xfc\xf9\xd1=!dH\xf6\x841(\xd9\x13\xc6\xa0\xf4\x9c\xd8\x8d\x18\xa4\x1et\x8dA#\x1c\x11\x84\x12\x10\xd8c\xc8\x07\xedO\x88\xcdB\x8d@\x9b\xd1\xae\x81\xd8,\xd4\x08\xb4\xd9\xb8Q\xa3\x04\xe6\x85Y\x93\x94\xc0\x8f\xa1\x80`\xc7\x0b\x9a\xf4d\x92J\x88J\x08\xab\'\x95\x90\xb1\x9d(D\xa8\x84$\x97\x10\xf3\xbe\xb6)\x12\xa2\x95&\x15\x07\x86\xdb\xa88\xa0\xb6QqPq\xc0mvGq0OQw\xe2\xf0\xa1\x95&U\x02U\x82\xdc\x95\xc0\x8f\xc5\x18J\x005\n*\x01\xd9\x13\xc6\xa0~#\x86\x12x\x8d8J\xc0h\xe43(cx>\x83\x82\xab\x07\xcdc\xf8\xcbB\x8d@\x9b!\x8dh%\x085\x02m6n\xd4(\x81y\x8a\xbaS\x827\xad4i\xa5\t\xe4h\x95\x10\xd46*!\xc0PUB\xd0F\xc8<V,!U\xfb\xa9\xad4\xfd\xa9\x95&=\xd34\xea5J\x1c\x90\x9ehq\xf0u\x1c!\xcf\xc2\x15\x07\x8c\xde\xb0\xf9\xc5\x8b\x03\xdd\x93??h!\x82\xe2\x00.DX\x1cDg\x9a\x06\x8d\xf8g\x9a\xccP\xc9G\xb11R\x95< =@\x04\xffL\xd3u\x04\x92\x07\xa4\xc7=1\xcf4\x8d{\xe2\x9ci\x1a\x1b\x97y\xa6i8\xec\xd0S\x0c\xa0\xcd\xd8\x0fH{\xc3\x1b\x9ci\xaa\xdao\x9b\xb7m\x07\xb7!V\x7f\xcb\xb9\xa6\t.\x1c\x86\xbdj\x9a\xc0\xef\xe9>i\x02n\\B\t\x08D\x84\xe4\x83\x9e\x13\xbb\x11\x83\xd4\x83\xae1h\x84\xc3\x88P\x02\x02F\x0c\xf9\xa0\xfd\tY\xc9P#p%i\xd7@\xd0\x11j\x04\xa2c\xdc\xa8Q\x82&(\xb1\xef\xf8\xdd\xfe\x9eC}Q%\xc0\xe7\xa7J\xc0\xefI\x95@\x95\x00\x1a\xd2j\x95\xc0_\xbd@\xb1\x01)\xb7\xc54\xc2\x0b(T5\x90\xd5\x08\xf3\xd6a\xaft\xb9\r\xe9\x95\xae\x06\xcaz\x02\x19\x96\xec\t\xb4M\xb0\x84\x18b#FO\xfe\xfc\x18=\xf9\xf3\x9b\xbf\xe6\x8d\x17Pf\xa9y#.N6\xe2U(f)_3\xc8r\x9e\x92<6\xa4 ""k\xdet\x01e\x86:>\x1e\x01WZ\x0b\xf1\x96q\xb0\xbcQ\x11\xb0W8\xe5D\xc0~\xe1\x94!T\xfd\xf79\xfc<C\x04\xcc\xd4\x1c\xc0\x1b\x05\x110]AF\xe6\x17\x15\x013zB"`\x8eP\xc1\xde\x18\x15\x01\xb3\xe4#\x8a\xd4\x07(G+\xfd\x94\xe6\xc4G\xc0a~.|D\x08"`\x89\xe6\x8c]\x03\xddeBV\x12\xb2\x138y\x0f\xb0\xa8k \xe8\xf0\x97\x1c\x99<.\x1f\x8d\x12\x98\x0b\x81\xde9\xb5\x10U\x82\xb1\x8fh-\x04m\xa4\xb5\x10\xd46\x93k!\xc2Db\x82\x12\x08\x13\t\xac\x11C\t$\x91\xba$\xbc\x9fI\t\xd8AwTx\x1f\x95HH\x1a\xf1\x94\xa0\xbd\x10\xc8\xe6\x04\x9b\xbf\xf3A\xab\xe2.\x86\x86\xbd\xaa\x12\xf0{R%P%\x80\x86\xb4Z%\xf0W\x0f\x04op\xf5b\x1a\x05\n(\x88qY\x8d0o\xa5\x11\x81\xb3\x11\x13\x11\xb2\x9e@\x86%{\x02m\x13\xc4^\x88\x8d\x18=\xf9\xf3c\xf4\x84T]\xf8\x14\x86\xc8\'\xe6\x0e\xa1F\x04\x85\x11\xf2\x19b\xd8\xa0\xba\xf3\xb6\xdb\x18\x14\xc6h\xe43\x13cxT\xa9&Pl\x08\x8aZ\xa8*NG,\xdc\x8d=l\xf2\xf8\xf0\xf0\x08X\xab\xe2\x1e\x15\x91\x8e\xc5\x89\x80\xbd\x1a(\'\x02\xbeU\xbcX\xf21\xf0F&?\xcf\x10\x0135\x07 uA\x04\xec/\x04b\x9b\xc9\x110\xa3\'$\x02\xe6\x08\x15,\x1fQ\x1100\'6?cT\xe4\x01\xd6Y\x88`\x04\xec/\x04\x83j\x83\xae\x01\xf1\x9a\xd7\x13\'\x02\x96h\xce\x18\xb0."\xa0!\xc12\x1f u\x0f\x11~Ot\x04L:!\x86\x0eO\t\xda\xfb/?O;+\xee\x0f\x04\x98\x90\xb70\xfa,\xaa\x16Q\xb4\x88\xc2\xeai\xa6"\n\xd9\xd3\xac\x12B\xcf\x89\xdd\x88!!\x92\x10_\x92\x17\xcc$!\xech=*/\x88\xca@$\x8dx\x12b.\xce\xec$$t\x9d\x81J\x88J\x08\xd4\xabJ\x08\xbf\xa7{J\x88\xb0\x88\x857\xe2e!hf\xc5n\xc4\x90\x90`\xd5u\xd0\x08Hf\x05Y\x08cxH\x16\x82f\xf5\xc8J\x86\x1a\xe1Y\x08\x91P\x80\xe8\x085\x02\xd11n\xd4HH{q\xe6\xe7\xe2\xcf);\xb2\xdb\x97\x90\x1c\xb6r)\xc8C\x8c\xe3\xa7\xc3\x0c\t\xa1\x13\xef9%\x84L\xbcI\tA!O\xf5\x84\x16}\x90\xf9EI\x08\xa3\'\x7f~t\xd1\x07\x99\x1f\xb8\x10!\t\xd1\xb7\xc2\x0f\x1b\xe9[\xe1gy+\xbc\xbfz\x08\xb1\x04V\x0fmD\xdc3\x01:d\xd0\xb8h#\xec\xca\x08\x9c\xc2\xc0\xcb)@6\x1ac\x0f5.\xd5\x13\x06#l~\xf4KWQ6"\xdc\x1d\x9b\x1f\xa3\'\x7f~\xe0B\x84\x19\x96 \x162\xa0u\xa5&\xc4F\xc2B\xca \x03\xe3\xc7\xdb\x88P\x13l4\x8eMGsbQ\x18\x1d\x12\x0cIFR\xb2A\x8aC\x9c\xd8\xd4\x0bh\xb1\x90\x00[I\xa4\'\x7fHA\xa1\x86&\x8f\x87\x04x\xe8,\xd9\xca\xdd~\xe8|\xe7\xea\xcb\xf0\xa5h\x82\xd0\xb9\xb6s`\xe9\xce\xc0\x8d\xd1W;#\xbd\xc6\x87\xce\x98j\x93j0\\\x88\x91s\xd1\nW\x059z\x86\xd09\xd8\x13\x12:s\x14\x0e\xd6\x9d\xa8\xd0YP}!\xeb<d\xe8\xec,\x04\xaf\xfa2\xe5\x1d\x88\xb2\xea\x8b4t\x0eU3\x0bX\xe1\x00D@C\x82CgQ\xf5\x05\xec\x89Q}\x91\x86\xce\x9e\x84\xb47\xd3[\t\xd1\xfb\x88\xb5\xfa\xa2\xd5\x17|NZ}\xd1\xea\x8bV_\xfc\x85\xe0T_\x82/!F\x1b\x11K\x0e:\xa4\xf7>aN\xf5\x85|\x9f06?\xf0\r\xd3\xa1\xea\x0b\xd2\x13]}!_\xac\x8c\xcd\x8f~\x9752?\xf2\xad\xd9\xd8\xfc\x18=\xf9\xf3\x03\x17"\xc4\xb0\xc27\x81\xbb\xf2\xc9\xda\xed\x1c\x04\xb4\x0e\xc3\x06\xab/7.g\xc5\xdbn\x90\x8eF\xc1\xbe\x17\xfbsbP\x98\xd7\x13\xa7\xfa\xe2-\x04\xa7\xfa\x02.D\xa8\xfa\x02\xda)T}Az\xa2\xab/\xfeB \x93\xf7\xe2\xed\xe1\xc6%\x12:k\xf5e8\xd6\xbb\x9f\xc0\xbf\xb1\x0c;t\xee\xbf\xcf\xd4\x9dQ\xbc\xcd*\xab\xcf\x10:3\xb7\n@\xdda\x87\xce\xfeB \xb6\x99\x1c:3zBBg\x8e\xc2a\xba\x13\x11:\x03s\xc2C\xe7\xa8\xb3/\xb5]=A\xe8\xdc\x7f\x1f\x03,H\x88\xde\x9c8\xa1\xb3\xd7\x13/t\x8e:\xfb\xe2/\x048$8>\x08\xa8\x81\x87\x08\xbf\':t\xf6\x97\x1c\x99<\x9c Z\ti\xdf\x06\xf5:\xe9\x04\xbe\xbe\xca#^\x1c\x82\x1bK\x10\x97\x84J\x89 \x01\x91<?\xab8 \x8d\x18u\x154\\\x93\xf4\xb4\x8880z\xf2\xe7\xc7\xe8\t\xa9\xab\xa0=!\xacE\xf6\x14\x8e\xfa\x05\xa5yzN\xecF\x0cq\x08\xba\xc6\xa0\x11\x0e#\x8e80\x86\x87\xa4?D\xd4\x0f\xaed\xa8\x11\x9e\x94\x10\x99\x0c.\x0e\x9c\xf4\x07\x1f\xde\xae:\xb6\x9f\xbe\x16_[q\x08\xbd\xe7I\xc5\xc13\x07\xe5\x01\xbc\xcc\xc1\xc9m\xd8\xe2@D:T\xe6\x80\x9c\x05\x98S\x1c\x90\x9eB\x99\x03u(\x82\x12\x07\xb4@\x8d\xcc/^\x1c\xe8\x9e\xd0\xcc\xa1"z\x822\x07\xd1)\x1e\xac\x86\xc9\x10\x07\xb2\nGf\x0e\xfc\xf7<\xf9\xf9q\xd4\xbe-\xbb\xe8\xee\xf5\xc4\x11\x87`\xd9\x98\xd8\xb7\x8d-\xba\x07\xde\xf3\xe4e\x0e\x9c\xf7<a\t(;s\x18/\xc4\xff\x03K\x8b\x9b\xcd'