From e575c34406c37e8eafb365f20aec6f1d8a854b95 Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Sat, 4 Aug 2018 13:51:26 +0000 Subject: [PATCH 01/12] Move qctool version to 2.0.1 --- bitbucket-pipelines.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml index 21f2ebeff..b14dd0a77 100644 --- a/bitbucket-pipelines.yml +++ b/bitbucket-pipelines.yml @@ -3,9 +3,9 @@ pipelines: default: - step: script: - - wget http://www.well.ox.ac.uk/~gav/resources/qctool_v2.0-rc9-Ubuntu14.04-x86_64.tgz - - tar -xzf qctool_v2.0-rc9-Ubuntu14.04-x86_64.tgz - - cp qctool_v2.0-rc9-Ubuntu14.04-x86_64/qctool /usr/bin/ + - wget http://www.well.ox.ac.uk/~gav/resources/qctool_v2.0.1-Ubuntu14.04-x86_64.tgz + - tar -xzf qctool_v2.0.1-Ubuntu14.04-x86_64.tgz + - cp qctool_v2.0.1-Ubuntu14.04-x86_64/qctool /usr/bin/ - qctool - apt-get install --assume-yes zlib1g-dev - apt-get install --assume-yes python-pip From 0bfb260ef8c070bad462a14b9be99b0baadbcaf3 Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Tue, 7 Aug 2018 09:00:44 +0000 Subject: [PATCH 02/12] bitbucket-pipelines: use my 14.04 build docker image --- bitbucket-pipelines.yml | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/bitbucket-pipelines.yml b/bitbucket-pipelines.yml index b14dd0a77..f2d75af59 100644 --- a/bitbucket-pipelines.yml +++ b/bitbucket-pipelines.yml @@ -1,20 +1,11 @@ -image: atlassian/default-image:latest +image: gavinband/ubuntu-14.04-build pipelines: default: - step: script: - - wget http://www.well.ox.ac.uk/~gav/resources/qctool_v2.0.1-Ubuntu14.04-x86_64.tgz - - tar -xzf qctool_v2.0.1-Ubuntu14.04-x86_64.tgz - - cp qctool_v2.0.1-Ubuntu14.04-x86_64/qctool /usr/bin/ - - qctool - - apt-get install --assume-yes zlib1g-dev - - apt-get install --assume-yes python-pip - - python -m pip install robotframework - - qctool -g example/example.16bits.bgen -og /tmp/x.vcf - ./waf configure - ./waf - cd test/functional - - mkdir -p test-reports/-o - + - mkdir -p test-reports/ - pybot -o output.xml -l log.html -r report.html -d test-reports -x xunit.xml ./tests.txt From e3c0a416cf90a766fec708c9e73e91d9d7e71a22 Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Tue, 7 Aug 2018 09:01:55 +0000 Subject: [PATCH 03/12] Pull rbgen test changes from master --- test/functional/test_rbgen.sh | 38 +++++++++++++++++++++++++++++++++++ test/functional/tests.txt | 4 ++++ 2 files changed, 42 insertions(+) create mode 100755 test/functional/test_rbgen.sh diff --git a/test/functional/test_rbgen.sh b/test/functional/test_rbgen.sh new file mode 100755 index 000000000..3b3d42c81 --- /dev/null +++ b/test/functional/test_rbgen.sh @@ -0,0 +1,38 @@ +#!/bin/bash +R="$1" +RBGEN="${2}" +if [[ ${R} == '' ]]; then + R='R' +fi +if [[ ${RBGEN} == '' ]]; then + RBGEN=build/R/rbgen +fi + +${R} CMD INSTALL ${RBGEN} +${R} --vanilla << HERE_DOC +library( rbgen ) + +## Test we can load data +D = bgen.load( "example/example.16bits.bgen", ranges = data.frame( chromosome = '01', start = 0, end = 100000 )) +str( D ) +head( D\$variants ) +D\$data[1,1:10,1:3] + +## Test we can load data on a subset of samples +samples = c( "sample_001", "sample_102", "sample_050", "sample_499" ) +E = bgen.load( "example/example.16bits.bgen", ranges = data.frame( chromosome = '01', start = 0, end = 100000 ), samples = samples ) +stopifnot( length( which( E\$data != D\$data[,samples,] ) ) == 0 ) +stopifnot( length( which( D\$variants != E\$variants )) == 0 ) + +## Test we can load data for some specific rsid +rsids = c( "RSID_10", "RSID_20", "RSID_171", "RSID_9" ) +F = bgen.load( "example/example.16bits.bgen", rsids = rsids ) +str( F ) +head( F\$variants ) +F\$data + +## Check we can load complex data +D = bgen.load( "example/complex.bgen", data.frame( chromosome = '01', start = 0, end = 1000000 ), max_entries_per_sample = 50 ) +str(D) + +HERE_DOC diff --git a/test/functional/tests.txt b/test/functional/tests.txt index fe7a7944c..e3fe061ca 100644 --- a/test/functional/tests.txt +++ b/test/functional/tests.txt @@ -4,6 +4,7 @@ ${HOME} %{HOME} ${BUILDDIR} ${BASEDIR}/build ${TMPDIR} ${BUILDDIR}/test/functional/tmp ${BGENIX} ${BUILDDIR}/apps/bgenix +${RBGEN} ${BUILDDIR}/R/rbgen ${QCTOOL} qctool ${UNITTEST} ${BUILDDIR}/test/unit/test_bgen @@ -39,6 +40,9 @@ Bgenix lists variants ${length}= Get length ${lines} Should be equal as integers ${length} 202 +Rbgen loads data + Run process ./test_rbgen.sh R ${RBGEN} + *** Keywords *** Create empty temp directory From 121dfc90e182f94a2b539732c62046dd12046f17 Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Fri, 25 Jan 2019 09:07:22 +0000 Subject: [PATCH 04/12] update docs --- doc/html/bgen_format.html | 1 - doc/html/bgen_format_v1.0.html | 106 ------ doc/html/index.html | 99 +++++- doc/html/spec/latest.html | 1 + .../{bgen_format_v1.1.html => spec/v1.1.html} | 89 +----- .../{bgen_format_v1.2.html => spec/v1.2.html} | 284 +--------------- .../{bgen_format_v1.3.html => spec/v1.3.html} | 302 +----------------- doc/html/style.css | 31 +- 8 files changed, 151 insertions(+), 762 deletions(-) delete mode 120000 doc/html/bgen_format.html delete mode 100644 doc/html/bgen_format_v1.0.html mode change 120000 => 100644 doc/html/index.html create mode 120000 doc/html/spec/latest.html rename doc/html/{bgen_format_v1.1.html => spec/v1.1.html} (65%) rename doc/html/{bgen_format_v1.2.html => spec/v1.2.html} (63%) rename doc/html/{bgen_format_v1.3.html => spec/v1.3.html} (62%) diff --git a/doc/html/bgen_format.html b/doc/html/bgen_format.html deleted file mode 120000 index 0735d0d78..000000000 --- a/doc/html/bgen_format.html +++ /dev/null @@ -1 +0,0 @@ -bgen_format_v1.3.html \ No newline at end of file diff --git a/doc/html/bgen_format_v1.0.html b/doc/html/bgen_format_v1.0.html deleted file mode 100644 index 18b4bcc5b..000000000 --- a/doc/html/bgen_format_v1.0.html +++ /dev/null @@ -1,106 +0,0 @@ - - - - - - -
-
- The BGEN format -
- -
- A compressed binary format for typed and imputed genotype data -
-
-

- This page documents v1.0 of the BGEN format, which is now deprecated. - This format should not be used for new files. See here for the most recent - version of the BGEN format. -

-

Note: The data layout documented here has the limitation that alleles can be only 1 character long. - This prevents its use with (for example) the latest 1000 genomes data release, which contains structural variants many kilobases long. - Version 1.1 was developed to be backwards-compatible with this format, and addresses this issue. -

- -

SNP block format

-

- Each snp block in a BGEN v1.0 file consists of the following data in order. -

-
- - - - - - - - - - - - - - - - - - - - - - -
No. of bytesDescription
4The number of individuals the row represents, hereafter denoted N. - This is an integer encoded in two bytes.
1An unsigned integer S, indicating the length of the storage used for the - SNPID and RSID fields in the row.
1The length, SNPID_size of (the data part of) the SNPID string. - This must be between 0 and S.
SThe SNPID of the row. - Only the first SNPID_size bytes will be used.
1The length, RSID_size of (the data part of) the RSID string. - This must be between 0 and S.
SThe RSID of the row. - Only the first RSID_size bytes will be used.
1 - The chromosome on which the SNP is found, encoded as an unsigned 8-bit integer. - The encoding is: - - - - - - - -
1-22:SNP lies in the chromosome with the given number.
23SNP lies in the non pseudo-autosomal part of the X chromosome.
24:SNP lies in the non pseudo-autosomal part of the Y chromosome.
253:SNP lies in the pseudo-autosomal region of the X/Y chromosomes.
254:SNP lies in the mitochondrial DNA
255:Indicates the chromosome is unknown. We advise that this only be used for test data.
-
4The SNP position, encoded as an unsigned 32-bit integer.
1The length LAof the 'A' allele, encoded as an unsigned 8-bit integer.
LAThe B allele.
1The length LB fo the B allele, encoded as an unsigned 8-bit integer.
LBThe B allele.
PGenotype probability data for the SNP for each of the N individuals in - the cohort. If the CompressedSNPBlocks flag is not set, this field consists of P=6*N bytes representing the probabilities. - If CompressedSNPBlocks is set, this field contains a 32-bit unsigned integer specifying the length of the compressed data, - followed by the compressed data itself. See below for more details.
13 + 2*S + PTOTAL
-
-

-

SNP block probability data

-

- The probability data is listed as a sequence of 2-byte signed integers. These should be interpreted in triples, - the first member being the probability of AA, the second the probability of AB, the third the probability of BB. - Altogether these occupy 6*N bytes where N is the number of samples. These 6 * N bytes are written directly. -Alternatively, if the CompressedSNPBlocks flag is set in the header, these 6 * N bytes are first compressed using zlib. -The SNP block then contains a 4-byte integer representing the length of the compressed data followed by the compressed data itself. -

-

- To convert the stored 2-byte integers into probabilities, the following calculation should be performed: -

-
    -
  1. Convert the number into a floating-point format (e.g. float or double).
  2. -
  3. Divide by 10,000.
  4. -
-

- Note that the range of a two-byte unsigned integer is 0 - 65535 inclusive. Thus the resulting probabilities - can take on values between 0 and 6.5535 inclusive and are accurate to four decimal places. -

-

- Note: to convert a floating point number to the format, do the following: -

-
    -
  1. Check the number lies in the half-open interval [ 0, 6.55355 ).
  2. -
  3. Multiply by 10000 and round to the nearest integer.
  4. -
-

- All numbers are stored in little-endian (least significant byte first) order. -

- - \ No newline at end of file diff --git a/doc/html/index.html b/doc/html/index.html deleted file mode 120000 index 1596fc0cb..000000000 --- a/doc/html/index.html +++ /dev/null @@ -1 +0,0 @@ -bgen_format.html \ No newline at end of file diff --git a/doc/html/index.html b/doc/html/index.html new file mode 100644 index 000000000..eb3053bd0 --- /dev/null +++ b/doc/html/index.html @@ -0,0 +1,98 @@ + + + + + The BGEN format + + + + + + +
+
+ The BGEN format +
+ +
+ A compressed binary format for typed and imputed genotype data +
+ +
+ +
+

Introduction

+ +

+ Modern genetic association studies routinely employ data on tens to hundreds of thousands + of individuals, genotyped or imputed at tens of millions of markers genome-wide. Traditional + data formats based on text representation of these data - such as + the GEN + format output by IMPUTE, + or the Variant Call Format + - are sometimes not well suited to these data quantities. Indeed, for simple programs the time spent parsing + these formats can dominate program execution time. +

+

+ This page describes a binary GEN file format (the "BGEN" format) which aims to address these problems. + BGEN is a robust format that has been designed to have a specific blend of features that we believe make it + useful for this type of study. It is targetted for use with large, potentially imputed genetic datasets. + Key features include: + +

  • The ability store both directly typed and imputed data.
  • +
  • The ability to store both unphased genotypes and phased haplotype data.
  • +
  • Small file sizes through the use of efficient, variable-precision packed bit representations and compression.
  • +
  • The use of per-variant compression makes the format simple to index and easy to catalogue.
  • + +

    +

    + For example, the following plot shows the time taken to list variant identifying data - i.e. the genomic + position, ID fields and alleles - for various common formats (Y-axis), against file size (X axis), for a dataset + of 18,496 samples typed at 121,668 SNPs on chromosome 1. Both variants of BGEN defined below are shown. +

    +
    +
    + +
    +
    +

    + For PLINK binary (.bed) files, identifying data is + stored in a separate file (the .bim file) so the time is effectively zero. + For text-based formats there is a significant trade-off between the use of file compression and + read performance. BGEN stores + the entire dataset of 2,250 million genotypes in 334Mb, slightly over one bit per genotype, and in this test took 1.5s. +

    +

    + (Performance optimisation of all formats may of course be possible, so the above plot + will not represent the best possible timings, but should be regarded as illustrative.) +

    +

    + The BGEN format has been used in several major projects, including the + Wellcome Trust Case-Control Consortium 2, + the MalariaGEN project, and the ALSPAC study. + It has been adopted as the release format for genome-wide imputed genotypes + for the UK Biobank. +

    +
    +
    + Acknowledgements. The following people contributed to the design and implementation of the BGEN format: + +
    + + \ No newline at end of file diff --git a/doc/html/spec/latest.html b/doc/html/spec/latest.html new file mode 120000 index 000000000..194093f80 --- /dev/null +++ b/doc/html/spec/latest.html @@ -0,0 +1 @@ +v1.3.html \ No newline at end of file diff --git a/doc/html/bgen_format_v1.1.html b/doc/html/spec/v1.1.html similarity index 65% rename from doc/html/bgen_format_v1.1.html rename to doc/html/spec/v1.1.html index 5a89e993c..c49912393 100755 --- a/doc/html/bgen_format_v1.1.html +++ b/doc/html/spec/v1.1.html @@ -3,8 +3,8 @@ Gavin Band's webspace at the Wellcome Trust Centre for Human Genetics - + REL="stylesheet"> +
    @@ -20,90 +20,9 @@
    v1.1
    This page documents version 1.1 of the BGEN format. - A more recent version of this document is available - see - the latest BGEN specification. + A more recent version of this specification is available - see + here for details.
    -
    -
    -

    Introduction

    -

    Background

    -

    - Modern genetic association studies routinely employ data on tens to hundreds of thousands - of individuals, genotyped or imputed at tens of millions of markers genome-wide. Traditional - data formats based on text representation of these data - such as - the GEN - format output by IMPUTE, - or the Variant Call Format - - are sometimes not well suited to these data quantities. For simple programs the time spent parsing - these formats can dominate program execution time. -

    -

    - This page describes a binary GEN file format (the "BGEN" format) which aims to address these problems. - BGEN is a robust format that has been designed to have a specific blend of features that we believe make it - useful for this type of study. It is targetted for use with large, potentially imputed genetic datasets. - Key features include: - -

  • The ability store both directly typed and imputed data.
  • -
  • Small file sizes through the use of an efficient representation of probability data and compression.
  • -
  • The use of per-variant compression makes the format simple to index and easy to catalogue.
  • - -

    -

    - The BGEN format has been used in several major projects, including the - Wellcome Trust Case-Control Consortium 2 - and the MalariaGEN project. - It will be the release format for genome-wide genotype data for - the UK Biobank. -

    -
    -
    - Acknowledgements. The following people contributed to the design and implementation of the BGEN format: - -
    -
    -

    Tool support

    -
      -
    • QCTOOL can be used to read and write - BGEN files, and to convert them to other formats.
    • -
    • We have written a tool cat-bgen which can be used to efficiently - concatenate BGEN files. We found this useful for joining together chunks of imputed data after a genome-wide - imputation run.
    • -
    • SNPTEST has supported BGEN since - version 2.4.0.
    • -
    • PLINK 1.9 now includes support for BGEN.
    • -
    -

    A freely available C++ implementation of the BGEN format is available in the "genfile" sublibrary of QCTOOL, - available here.

    -
    -

    Change history

    -
    - -
    -
    -
    v1.1 (March 2012):
    -
    - BGEN format that is designed to cope with the long alleles present at indels and - structural variants in recent releases of the 1000 genomes project. Features - of this version are: -
      -
    • Support for biallelic SNPs and indels with alleles of arbitrary length (up to 232-1).
    • -
    • Store probabilities to at least 4 decimal places worth' of accuracy
    • -
    -
    -
    v1.0 (2009):
    -
    - The original BGEN format. This version is now deprecated and will be removed - from a future version of this spec; there probably aren't any files in the wild - in this format. -
    -

    Detailed specification

    diff --git a/doc/html/bgen_format_v1.2.html b/doc/html/spec/v1.2.html similarity index 63% rename from doc/html/bgen_format_v1.2.html rename to doc/html/spec/v1.2.html index 812c9f910..eda8d90cb 100644 --- a/doc/html/bgen_format_v1.2.html +++ b/doc/html/spec/v1.2.html @@ -4,9 +4,9 @@ The BGEN format - - - + + + @@ -24,176 +24,12 @@

    v1.2
    This page documents version 1.2 of the BGEN format. - A later version is available - see here. - This version is backward-compatible with the - earlier v1.1 format spec - - this means every v1.1-format BGEN file is also a valid v1.2-format file. - The v1.2 spec adds a new, more flexible layout for storing variant genotypes and haplotypes. - (See below for a full history of versions of this spec). -

    - Note: The UK Biobank full release imputed genotype data will be released in BGEN format, using - using 8 bits per probability and zlib compression, as described in this specification. - Phased haplotype data has also been released in BGEN format. -

    -

    - The UK Biobank interim release imputed genotype data was released in BGEN v1.1 format. -

    + A more recent version of this specification is available - see + here for details.
    -
    -

    Introduction

    -

    - Modern genetic association studies routinely employ data on tens to hundreds of thousands - of individuals, genotyped or imputed at tens of millions of markers genome-wide. Traditional - data formats based on text representation of these data - such as - the GEN - format output by IMPUTE, - or the Variant Call Format - - are sometimes not well suited to these data quantities. Indeed, for simple programs the time spent parsing - these formats can dominate program execution time. -

    -

    - This page describes a binary GEN file format (the "BGEN" format) which aims to address these problems. - BGEN is a robust format that has been designed to have a specific blend of features that we believe make it - useful for this type of study. It is targetted for use with large, potentially imputed genetic datasets. - Key features include: - -

  • The ability store both directly typed and imputed data.
  • -
  • The ability to store both unphased genotypes and phased haplotype data.
  • -
  • Small file sizes through the use of efficient, variable-precision packed bit representations and compression.
  • -
  • The use of per-variant compression makes the format simple to index and easy to catalogue.
  • - -

    -

    - For example, the following plot shows the time taken to list variant identifying data - i.e. the genomic - position, ID fields and alleles - for various common formats (Y-axis), against file size (X axis), for a dataset - of 18,496 samples typed at 121,668 SNPs on chromosome 1. Both variants of BGEN defined below are shown. -

    -
    -
    - -
    -
    -

    - For PLINK binary (.bed) files, identifying data is - stored in a separate file (the .bim file) so the time is effectively zero. - For text-based formats there is a significant trade-off between the use of file compression and - read performance. BGEN stores - the entire dataset of 2,250 million genotypes in 334Mb, slightly over one bit per genotype, and in this test took 1.5s. -

    -

    - (Performance optimisation of all formats may of course be possible, so the above plot - will not represent the best possible timings, but should be regarded as illustrative.) -

    -

    - The BGEN format has been used in several major projects, including the - Wellcome Trust Case-Control Consortium 2 - and the MalariaGEN project. - It has been adopted as the release format for genome-wide imputed genotypes - for the UK Biobank. -

    -
    -
    - Acknowledgements. The following people contributed to the design and implementation of the BGEN format: - -
    -
    -

    Software support

    -

    A freely available C++ implementation of the BGEN format is available - on bitbucket. This repository also contains a number of useful tools: -

    -
    -
    bgenix
    -
    A tool which provides random access to data in a BGEN file by creating an index.
    -
    cat-bgen
    -
    A program to efficiently concatenate BGEN files. Together with bgenix this effectively - enables map/reduce pipelines that operate in parallel on seperate genomic regions. - For example, we have found this useful for joining data into chromosomes after imputing genome-wide.
    -
    edit-bgen
    -
    A tool to (destructively) edit the BGEN header data.
    -
    rbgen
    -
    An R package that can be used to load data from an bgenix-indexed BGEN file into R.
    -
    -

    - In addition a set of example files and example programs, intended to demonstrate the API, are provided. -

    -

    - Bgen support has been also implemented in several other software packages, click on the links below for more information. -

    -
    - qctool v2 - SNPTEST - PLINK - Mega2 - LDSTORE - REGSCAN - BGENIE - Hail - BOLT-LMM -
    -

    - (Please contact me if your software supports BGEN and you'd like it added to this list.) -

    -
    -
    -

    Change history

    - -
    -
    -

    - A history of revisions of the v1.2 format spec is as follows: -

    -
      -
      BGEN v1.2 (November 2016):
      -
      - Major update extending the BGEN format to add: -
        -
      • Support for variable ploidy and explicit missing data.
      • - -
      • Support for multi-allelic variants (e.g. complex structural - variants).
      • - -
      • Allow for control over file size by supporting genotype probabilities - stored at configurable precision.
      • - -
      • Support for storing sample identifiers.
      • -
      - A draft version of this spec was published beginning May 2015. The following changes have been made since the earlier draft: -
        -
      • 2015-11-05 (v1.2 beta1): modified the treatment of missing data in Layout 2 (v1.2-style) variant data blocks.
      • -
      • 2016-03-21 (v1.2 beta2): modified the order of stored probabilities for samples with ploidy greater than 2; - clarified specification of the phased flag for samples with ploidy less than 2.
      • -
      -
      -
      BGEN v1.1 (March 2012):
      -
      - The first widely used version of the BGEN format. The UK Biobank interim imputed data was released in this format. - Relative to v1.0, this version is designed to cope with the long alleles present at indels and - structural variants in recent releases of the 1000 genomes project. Features - of this version are: -
        -
      • Support for biallelic SNPs and indels with alleles of arbitrary length (up to 232-1).
      • -
      • Store probabilities to at least 4 decimal places worth' of accuracy
      • -
      -
      -
      BGEN v1.0 (2009):
      -
      - The original BGEN format. This version is now deprecated and will be removed - from a future version of this spec; there probably aren't any files in the wild - in this format. -
      -
    -
    -

    Detailed specification

    Overview

    @@ -988,115 +824,5 @@

    Representation of probabilities

    We therefore renormalise input probabilities to sum to one.

    -

    Rationale and FAQ

    -
    -

    - Q. Should I use BGEN v1.1 or v1.2? Or something else? -

    -

    - A. The short answer is that we believe that for most purposes BGEN v1.2 is a - good choice for storage of hard-called or imputed genotypes. -

    -

    For a more detailed answer, the following table tabulates features of various different formats: - - - - - - - - - - - - - - - - - -
    PLINK binaryGENBGEN v1.1BGEN v1.2VCFBCF
    Supports unphased genotype calls**
    Supports unphased genotype probabilities
    Supports NULL/outlier probability
    e.g. NULL class from CHIAMO / GenoSNP
    Supports non-diploid samples
    Supports phased data?
    Supports multi-allelic variants
    Efficient representation?
    -

    - - *Hard-called genotypes are converted to probabilities in GEN and BGEN v1.1. - By convention, males on the X chromosome are stored as homozygote females in GEN and BGEN v1.1. - At the time of writing, the storage of genotype likelihoods and probabilities for non-diploid samples - and/or phased data in VCF/BCF is not fully specified. - -

    -

    - Thus BGEN v1.2 is appropriate except for storing genotype probabilities from cluster-based calles such as - CHIAMO - or GenoSNP, - which can assign nonzero probability to a NULL or outlier class. Use BGEN v1.1 or another format for these data. -

    - Another consideration over what to use is tool support. Support for BGEN v1.1 has been available for some time in - QCTOOL, SNPTEST and other packages including PLINK. Support for BGEN v1.2 is becoming available across a range of tools - mid-2016. We expect tool support for BGEN to continue to increase in future, driven in part by the use of - BGEN for the UK Biobank data releases and the availability of a reference implementation. -

    - Q. Why compress the data for each variant seperately? Doesn't this end up using more space? -

    -

    - A. Compressing each variant seperately has the advantage that the variant identifying data fields - - which are stored uncompressed in BGEN - can be efficiently accessed without decompressing the whole file. - It's true that theoretically higher rates of compression could be acheived by compressing as much data as possible. - However, for large cohorts, each variant has plenty of data to compress, so the difference is expected to be small. - (Alternative indexing approaches - like bgzip, which - compresses data in blocks - also incur a size overhead.) -

    -

    - Q. Why store the number of individuals on each row? Why store the number of alleles twice? Doesn't this waste space? -

    -

    - A. Yes, each repeated field wastes 4 bytes per variant. However, this is expected to be a tiny fraction of overall file size. - The inclusion of repeated fields makes parsing simpler (since parsers don't need to be stateful) and also provides a useful way - of testing that file structure is correct. -

    -

    - Q. (For Layout 2 variant data blocks) Why the choice of colex order of genotypes? -

    -

    - A. Several considerations motivated this choice - including simplicity of specification, ease of implementation, - and compatibility with established standards. -

    -

    - The colex order coincides with the order specified for - GL and GP fields for diploid samples in the VCF. (At the time of writing the VCF specification of this field - only applies to diploid samples). This makes it easy to convert between BGEN and VCF formats. -

    -

    - The chosen order has a useful 'nesting' property: adding an allele does not change the order of probabilities for - genotypes not carrying the new allele. More precisely, at a variant with K+1 alleles, genotypes - carrying only alleles among the first K appear earlier in the ordering than - those carrying the Kth allele - and with the same order as if the 'extra' allele wasn't present. - A practical consequence of this is that mapping of each genotype to the index of - the corresponding probability can be accomplished using a single lookup table that is independent of K - (though it does depend on the ploidy). We used such a lookup table in the - QCTOOL implementation to convert hard-called - genotypes to probabilities. -

    -

    - Q. (For Layout 2 variant data blocks) Why omit the last probability instead of the first? -

    -

    - A. The intention is to make parsing the file as simple and fast as possible. If we omitted the first probability, - parsers would have to read and store all the other probabilities before computing and emitting - the first probability. With the scheme described here, parsers can simply emit the probabilities as they are read from the file, - before finally emitting the last probability as one minus the sum of the stored probabilities. -

    - Q. (For Layout 2 variant data blocks) Why store dummy zero data for samples with missing genotypes? - Doesn't this increase file size unneccessarily? -

    -

    - A. - (Note this behaviour was changed in the beta version of the spec relative to the earlier draft.) - The intention is to make parsing the file as simple and fast as possible. One option for loading genotypes - from a BGEN file is simply to load the uncompressed genotype data into memory. Potentially, encoded genotypes could - then be used directly, e.g. as keys in a lookup table. Storing placeholder data for missing samples - makes this simpler to implement by maintaining a predictable index for the data for each sample within the encoded - representation. (We note this will be more complicated if ploidy varies across samples). -

    -
    diff --git a/doc/html/bgen_format_v1.3.html b/doc/html/spec/v1.3.html similarity index 62% rename from doc/html/bgen_format_v1.3.html rename to doc/html/spec/v1.3.html index 9f7e24254..7272af0d5 100644 --- a/doc/html/bgen_format_v1.3.html +++ b/doc/html/spec/v1.3.html @@ -4,9 +4,9 @@ The BGEN format - - - + + + @@ -19,187 +19,25 @@ A compressed binary format for typed and imputed genotype data
    +
    v1.3
    This page documents version 1.3 of the BGEN format. - This version is backward-compatible with the - earlier v1.2 and - v1.1 format specs - - this means every v1.2-format or v1.1-format BGEN file is also a valid v1.3-format file. - The v1.3 spec adds the ability to compress using zstandard - instead of zlib. - (See below for a full history of versions of this spec). -

    - Note: The UK Biobank full release imputed genotype data will be released in BGEN format, using - using 8 bits per probability and zlib compression (so compatible with the BGEN v1.2 format specification). - Phased haplotype data has also been released in BGEN format. -

    -

    - The UK Biobank interim release imputed genotype data was released in BGEN v1.1 format. -

    + A history of revisions can be found here.
    -
    -

    Introduction

    -

    - Modern genetic association studies routinely employ data on tens to hundreds of thousands - of individuals, genotyped or imputed at tens of millions of markers genome-wide. Traditional - data formats based on text representation of these data - such as - the GEN - format output by IMPUTE, - or the Variant Call Format - - are sometimes not well suited to these data quantities. Indeed, for simple programs the time spent parsing - these formats can dominate program execution time. -

    -

    - This page describes a binary GEN file format (the "BGEN" format) which aims to address these problems. - BGEN is a robust format that has been designed to have a specific blend of features that we believe make it - useful for this type of study. It is targetted for use with large, potentially imputed genetic datasets. - Key features include: - -

  • The ability store both directly typed and imputed data.
  • -
  • The ability to store both unphased genotypes and phased haplotype data.
  • -
  • Small file sizes through the use of efficient, variable-precision packed bit representations and compression.
  • -
  • The use of per-variant compression makes the format simple to index and easy to catalogue.
  • - -

    -

    - For example, the following plot shows the time taken to list variant identifying data - i.e. the genomic - position, ID fields and alleles - for various common formats (Y-axis), against file size (X axis), for a dataset - of 18,496 samples typed at 121,668 SNPs on chromosome 1. Both variants of BGEN defined below are shown. -

    -
    -
    - -
    -
    -

    - For PLINK binary (.bed) files, identifying data is - stored in a separate file (the .bim file) so the time is effectively zero. - For text-based formats there is a significant trade-off between the use of file compression and - read performance. BGEN stores - the entire dataset of 2,250 million genotypes in 334Mb, slightly over one bit per genotype, and in this test took 1.5s. -

    -

    - (Performance optimisation of all formats may of course be possible, so the above plot - will not represent the best possible timings, but should be regarded as illustrative.) -

    -

    - The BGEN format has been used in several major projects, including the - Wellcome Trust Case-Control Consortium 2 - and the MalariaGEN project. - It has been adopted as the release format for genome-wide imputed genotypes - for the UK Biobank. -

    -
    -
    - Acknowledgements. The following people contributed to the design and implementation of the BGEN format: - -
    -
    -

    Software support

    -

    A freely available C++ implementation of the BGEN format is available - on bitbucket. This repository also contains a number of useful tools: -

    -
    -
    bgenix
    -
    A tool which provides random access to data in a BGEN file by creating an index.
    -
    cat-bgen
    -
    A program to efficiently concatenate BGEN files. Together with bgenix this effectively - enables map/reduce pipelines that operate in parallel on seperate genomic regions. - For example, we have found this useful for joining data into chromosomes after imputing genome-wide.
    -
    edit-bgen
    -
    A tool to (destructively) edit the BGEN header data.
    -
    rbgen
    -
    An R package that can be used to load data from an bgenix-indexed BGEN file into R.
    -
    -

    - In addition a set of example files and example programs, intended to demonstrate the API, are provided. -

    -

    - Bgen support has been also implemented in several other software packages, click on the links below for more information. -

    -
    - qctool v2 - SNPTEST - PLINK - Mega2 - LDSTORE - REGSCAN - BGENIE - Hail - BOLT-LMM -
    -

    - (Please contact me if your software supports BGEN and you'd like it added to this list.) -

    -
    -
    -

    Change history

    - -
    -
    -

    - A history of revisions of the BGEN format spec is as follows: -

    -
      -
      BGEN v1.3 (January 2017):
      -
      -
    • Support for the zstandard compression library. - Tests indicate this has better performance both in terms of file size - and speed of reading and writing.
    • -
      -
      BGEN v1.2 (March 2016):
      -
      - Major update extending the BGEN format to add: -
        -
      • Support for variable ploidy and explicit missing data.
      • - -
      • Support for multi-allelic variants (e.g. complex structural - variants).
      • - -
      • Allow for control over file size by supporting genotype probabilities - stored at configurable precision.
      • - -
      • Support for storing sample identifiers.
      • -
      - A draft version of this spec was published beginning May 2015. The following changes have been made since the earlier draft: -
        -
      • 2015-11-05 (v1.2 beta1): modified the treatment of missing data in Layout 2 (v1.2-style) variant data blocks.
      • -
      • 2016-03-21 (v1.2 beta2): modified the order of stored probabilities for samples with ploidy greater than 2; - clarified specification of the phased flag for samples with ploidy less than 2.
      • -
      - -
      -
      BGEN v1.1 (March 2012):
      -
      - The first widely used version of the BGEN format. The UK Biobank interim imputed data was released in this format. - Relative to v1.0, this version is designed to cope with the long alleles present at indels and - structural variants in recent releases of the 1000 genomes project. Features - of this version are: -
        -
      • Support for biallelic SNPs and indels with alleles of arbitrary length (up to 232-1).
      • -
      • Store probabilities to at least 4 decimal places worth' of accuracy
      • -
      -
      -
      BGEN v1.0 (2009):
      -
      - The original BGEN format. This version is now unsupported. -
      -
    -
    -
    -

    Detailed specification

    +

    Overview

    A BGEN file consists of a header block, giving general infomation about the file, @@ -999,116 +837,6 @@

    Representation of probabilities

    We therefore renormalise input probabilities to sum to one.

    -

    Rationale and FAQ

    -
    -

    - Q. Should I use BGEN v1.1, v1.2, or v.1.3? Or something else? -

    -

    - A. The short answer is that we believe that for most purposes BGEN v1.2 and v1.3 is a - good choice for storage of hard-called or imputed genotypes. -

    -

    For a more detailed answer, the following table tabulates features of various different formats: - - - - - - - - - - - - - - - - - -
    PLINK binaryGENBGEN v1.1BGEN v1.2 / v1.3VCFBCF
    Supports unphased genotype calls**
    Supports unphased genotype probabilities
    Supports NULL/outlier probability
    e.g. NULL class from CHIAMO / GenoSNP
    Supports non-diploid samples
    Supports phased data?
    Supports multi-allelic variants
    Efficient representation?
    -

    - - *Hard-called genotypes are converted to probabilities in GEN and BGEN v1.1. - By convention, males on the X chromosome are stored as homozygote females in GEN and BGEN v1.1. - At the time of writing, the storage of genotype likelihoods and probabilities for non-diploid samples - and/or phased data in VCF/BCF is not fully specified. - -

    -

    - Thus BGEN v1.2 or v1.3 is appropriate except for storing genotype probabilities from cluster-based calles such as - CHIAMO - or GenoSNP, - which can assign nonzero probability to a NULL or outlier class. Use BGEN v1.1 or another format for these data. -

    - Another consideration over what to use is tool support. Support for BGEN v1.1 has been available for some time in - QCTOOL, SNPTEST and other packages including PLINK. Support for BGEN v1.2 is becoming available across a range of tools - mid-2016. We expect tool support for BGEN to continue to increase in future, driven in part by the use of - BGEN for the UK Biobank data releases and the availability - of a reference implementation. -

    - Q. Why compress the data for each variant seperately? Doesn't this end up using more space? -

    -

    - A. Compressing each variant seperately has the advantage that the variant identifying data fields - - which are stored uncompressed in BGEN - can be efficiently accessed without decompressing the whole file. - It's true that theoretically higher rates of compression could be acheived by compressing as much data as possible. - However, for large cohorts, each variant has plenty of data to compress, so the difference is expected to be small. - (Alternative indexing approaches - like bgzip, which - compresses data in blocks - also incur a size overhead.) -

    -

    - Q. Why store the number of individuals on each row? Why store the number of alleles twice? Doesn't this waste space? -

    -

    - A. Yes, each repeated field wastes 4 bytes per variant. However, this is expected to be a tiny fraction of overall file size. - The inclusion of repeated fields makes parsing simpler (since parsers don't need to be stateful) and also provides a useful way - of testing that file structure is correct. -

    -

    - Q. (For Layout 2 variant data blocks) Why the choice of colex order of genotypes? -

    -

    - A. Several considerations motivated this choice - including simplicity of specification, ease of implementation, - and compatibility with established standards. -

    -

    - The colex order coincides with the order specified for - GL and GP fields for diploid samples in the VCF. (At the time of writing the VCF specification of this field - only applies to diploid samples). This makes it easy to convert between BGEN and VCF formats. -

    -

    - The chosen order has a useful 'nesting' property: adding an allele does not change the order of probabilities for - genotypes not carrying the new allele. More precisely, at a variant with K+1 alleles, genotypes - carrying only alleles among the first K appear earlier in the ordering than - those carrying the Kth allele - and with the same order as if the 'extra' allele wasn't present. - A practical consequence of this is that mapping of each genotype to the index of - the corresponding probability can be accomplished using a single lookup table that is independent of K - (though it does depend on the ploidy). We used such a lookup table in the - QCTOOL implementation to convert hard-called - genotypes to probabilities. -

    -

    - Q. (For Layout 2 variant data blocks) Why omit the last probability instead of the first? -

    -

    - A. The intention is to make parsing the file as simple and fast as possible. If we omitted the first probability, - parsers would have to read and store all the other probabilities before computing and emitting - the first probability. With the scheme described here, parsers can simply emit the probabilities as they are read from the file, - before finally emitting the last probability as one minus the sum of the stored probabilities. -

    - Q. (For Layout 2 variant data blocks) Why store dummy zero data for samples with missing genotypes? - Doesn't this increase file size unneccessarily? -

    -

    - A. - (Note this behaviour was changed in the beta version of the spec relative to the earlier draft.) - The intention is to make parsing the file as simple and fast as possible. One option for loading genotypes - from a BGEN file is simply to load the uncompressed genotype data into memory. Potentially, encoded genotypes could - then be used directly, e.g. as keys in a lookup table. Storing placeholder data for missing samples - makes this simpler to implement by maintaining a predictable index for the data for each sample within the encoded - representation. (We note this will be more complicated if ploidy varies across samples). -

    -
    + \ No newline at end of file diff --git a/doc/html/style.css b/doc/html/style.css index d5c7bd003..babc2ab32 100755 --- a/doc/html/style.css +++ b/doc/html/style.css @@ -25,6 +25,34 @@ div.header { font-size: 15px ; } +nav { + clear: both ; + position: relative ; + font: sans-serif ; + font-size: 20px ; + padding: 0px ; + margin: 0px ; + background-color: #dddddd; + border-radius: 2px ; +} + +nav > ul { + position: relative; + list-style: none ; + padding-top: 0px ; + padding-bottom: 0px ; + margin-top: 0px ; + margin-bottom: 0px ; + text-align: left ; +} + +nav > ul > li { + display: inline-block ; + min-width: 5em ; + text-align: left ; + clear: none ; +} + #overview { clear: both ; } @@ -245,6 +273,3 @@ div.logo_container + p { clear: both; padding-top: 20px ; } - - - From a855a8a2c5b92a555df5810e9009ccf1fdfea95a Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Thu, 12 Sep 2019 10:11:48 +0000 Subject: [PATCH 05/12] bgenix: output multiple IDs with semicolon, not comma separator cf issue --- Makefile | 21 ++++++++- apps/bgenix.cpp | 2 +- doc/html/history.html | 95 +++++++++++++++++++++++++++++++++++++++++ doc/html/index.html | 9 ++++ doc/html/paper.html | 66 ++++++++++++++++++++++++++++ doc/html/software.html | 93 ++++++++++++++++++++++++++++++++++++++++ doc/html/spec/v1.2.html | 10 +++++ doc/html/spec/v1.3.html | 10 +++++ 8 files changed, 303 insertions(+), 3 deletions(-) create mode 100644 doc/html/history.html create mode 100644 doc/html/paper.html create mode 100644 doc/html/software.html diff --git a/Makefile b/Makefile index 9b5804165..a7b0ac865 100644 --- a/Makefile +++ b/Makefile @@ -1,3 +1,20 @@ -FLAGS = -g -std=c++11 -Igenfile/include -lz -bgen_to_vcf: example/bgen_to_vcf.cpp +FLAGS = -g -std=c++11 -lz \ +-I genfile/include \ +-I db/include \ +-I 3rd_party/boost_1_55_0 \ +-I 3rd_party/zstd-1.1.0 \ +-I 3rd_party/zstd-1.1.0/lib \ +-I 3rd_party/zstd-1.1.0/lib/common \ +-I 3rd_party/zstd-1.1.0/lib/compress \ +-I 3rd_party/zstd-1.1.0/lib/decompress \ +-I 3rd_party/sqlite3 \ +-I include/3rd_party/sqlite3 \ +-D SQLITE_ENABLE_COLUMN_METADATA \ +-D SQLITE_ENABLE_STAT4 \ +-D SQLITE_MAX_EXPR_DEPTH=10000 \ +-D SQLITE_USE_URI=1 \ +-Wno-unused-local-typedefs \ +-fPIC -O3 + +bgen_to_vcf: example/bgen_to_vcf.cpp $(wildcard 3rd_party/zstd-1.1.0/*.o) $(wildcard 3rd_party/sqlite3/*.o) g++ ${FLAGS} -o build/bgen_to_vcf example/bgen_to_vcf.cpp src/*.cpp diff --git a/apps/bgenix.cpp b/apps/bgenix.cpp index 8915a982e..2ce5e618f 100644 --- a/apps/bgenix.cpp +++ b/apps/bgenix.cpp @@ -816,7 +816,7 @@ struct IndexBgenApplication: public appcontext::ApplicationContext assert( alleles.size() > 1 ) ; std::cout << chromosome << "\t" << position - << "\t" << rsid << "," << SNPID + << "\t" << rsid << ";" << SNPID << "\t" << alleles[0] << "\t" ; for( std::size_t j = 1; j < alleles.size(); ++j ) { diff --git a/doc/html/history.html b/doc/html/history.html new file mode 100644 index 000000000..a6c4cc32d --- /dev/null +++ b/doc/html/history.html @@ -0,0 +1,95 @@ + + + + + + + + The BGEN format + + + + + + +
    +
    + The BGEN format +
    + +
    + A compressed binary format for typed and imputed genotype data +
    + +
    + +
    +

    History of revisions

    +
    +

    + A history of revisions of the BGEN format specification is as follows: +

    +
      +
      BGEN v1.3 (January 2017): link to spec
      +
      +
    • Support for the zstandard compression library. + Tests indicate this has better performance both in terms of file size + and speed of reading and writing.
    • +
      +
      BGEN v1.2 (March 2016): link to spec
      +
      + Major update extending the BGEN format to add: +
        +
      • Support for variable ploidy and explicit missing data.
      • + +
      • Support for multi-allelic variants (e.g. complex structural + variants).
      • + +
      • Allow for control over file size by supporting genotype probabilities + stored at configurable precision.
      • + +
      • Support for storing sample identifiers.
      • +
      + A draft version of this spec was published beginning May 2015. The following changes have been made since the earlier draft: +
        +
      • 2015-11-05 (v1.2 beta1): modified the treatment of missing data in Layout 2 (v1.2-style) variant data blocks.
      • +
      • 2016-03-21 (v1.2 beta2): modified the order of stored probabilities for samples with ploidy greater than 2; + clarified specification of the phased flag for samples with ploidy less than 2.
      • +
      + +
      +
      BGEN v1.1 (March 2012): link to spec
      +
      + The first widely used version of the BGEN format. The UK Biobank interim imputed data was released in this format. + Relative to v1.0, this version is designed to cope with the long alleles present at indels and + structural variants in recent releases of the 1000 genomes project. Features + of this version are: +
        +
      • Support for biallelic SNPs and indels with alleles of arbitrary length (up to 232-1).
      • +
      • Store probabilities to at least 4 decimal places worth' of accuracy
      • +
      +
      +
      BGEN v1.0 (2009):
      +
      + The original BGEN format. This version is now unsupported. +
      +
    +
    + + + \ No newline at end of file diff --git a/doc/html/index.html b/doc/html/index.html index eb3053bd0..e31288b7b 100644 --- a/doc/html/index.html +++ b/doc/html/index.html @@ -3,6 +3,15 @@ + + + The BGEN format diff --git a/doc/html/paper.html b/doc/html/paper.html new file mode 100644 index 000000000..65b572038 --- /dev/null +++ b/doc/html/paper.html @@ -0,0 +1,66 @@ + + + + + + + + The BGEN format + + + + + + + +
    +
    + The BGEN format +
    + +
    + A compressed binary format for typed and imputed genotype data +
    + +
    + +
    +

    BGEN paper

    +

    + Our paper describing the motivation, design, and performance of the BGEN format + has been published on bioArxiv. + If you make use of BGEN in your project beyond simple application , please cite: +

    +
      +
    • + Gavin Band and Jonathan Marchini, "BGEN: a binary file format for imputed genotype and haplotype data", bioArxiv (2018), https://doi.org/10.1101/308296 +
    • +
    +

    UK Biobank paper

    +

    + Our paper describing the UK Biobank data resource has now been published in Nature. + If you make use of the UK Biobank genotype data resource, please cite: +

    +
      +
    • + Bycroft, Freeman, Petkova et al, "The UK Biobank resource with deep phenotyping and genomic data", Nature (2018), https://doi.org/10.1038/s41586-018-0579-z +
    • +
    +
    + + \ No newline at end of file diff --git a/doc/html/software.html b/doc/html/software.html new file mode 100644 index 000000000..709f1573f --- /dev/null +++ b/doc/html/software.html @@ -0,0 +1,93 @@ + + + + + + + + The BGEN format + + + + + + + +
    +
    + The BGEN format +
    + +
    + A compressed binary format for typed and imputed genotype data +
    + +
    + +
    +

    Software support

    +

    + For command-line users: BGEN support has been implemented in several software packages, click on the links below for more information. +

    +
    + qctool v2 + SNPTEST + PLINK + Mega2 + LDSTORE + REGSCAN + BGENIE + Hail + BOLT-LMM + FINEMAP + STITCH + bgenix +
    +

    + For R users: The rbgen package can be used to load data directly into R. +

    +

    + For python users: A number of python solutions have been developed, + see e.g. the bgen-reader library or the pybgen library. +

    +

    + (Please contact me if your software supports BGEN and you'd like it added to this list.) +

    + +

    For developers: A freely available C++ implementation of the BGEN format is available + on bitbucket. This repository also contains a number of useful tools: +

    +
    +
    bgenix
    +
    A tool which provides random access to data in a BGEN file by creating an index.
    +
    cat-bgen
    +
    A program to efficiently concatenate BGEN files. Together with bgenix this effectively + enables map/reduce pipelines that operate in parallel on seperate genomic regions. + For example, we have found this useful for joining data into chromosomes after imputing genome-wide.
    +
    edit-bgen
    +
    A tool to (destructively) edit the BGEN header data.
    +
    +

    + In addition a + set of example files and programs, + intended to demonstrate the API, are provided. +

    + +
    + + \ No newline at end of file diff --git a/doc/html/spec/v1.2.html b/doc/html/spec/v1.2.html index eda8d90cb..a825660b9 100644 --- a/doc/html/spec/v1.2.html +++ b/doc/html/spec/v1.2.html @@ -3,12 +3,22 @@ + + + The BGEN format +
    diff --git a/doc/html/spec/v1.3.html b/doc/html/spec/v1.3.html index 7272af0d5..ecfd753e2 100644 --- a/doc/html/spec/v1.3.html +++ b/doc/html/spec/v1.3.html @@ -3,12 +3,22 @@ + + + The BGEN format +
    From 59a74cc089317de848dcd9662a3192f954cb530f Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Thu, 12 Sep 2019 10:21:06 +0000 Subject: [PATCH 06/12] bgenix: use semicolon, not comma to seperate IDs, cf issue --- apps/bgenix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bgenix.cpp b/apps/bgenix.cpp index 8915a982e..2ce5e618f 100644 --- a/apps/bgenix.cpp +++ b/apps/bgenix.cpp @@ -816,7 +816,7 @@ struct IndexBgenApplication: public appcontext::ApplicationContext assert( alleles.size() > 1 ) ; std::cout << chromosome << "\t" << position - << "\t" << rsid << "," << SNPID + << "\t" << rsid << ";" << SNPID << "\t" << alleles[0] << "\t" ; for( std::size_t j = 1; j < alleles.size(); ++j ) { From c5d597d0154364ffc330ffd837a1304082a2fac7 Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Thu, 12 Sep 2019 10:27:03 +0000 Subject: [PATCH 07/12] Bump to v1.1.5 --- wscript | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wscript b/wscript index f59428540..c4a262eae 100644 --- a/wscript +++ b/wscript @@ -2,7 +2,7 @@ import platform, os.path srcdir="." APPNAME = "bgen" -VERSION = "1.1.4" +VERSION = "1.1.5" def options( opt ): opt.load( 'compiler_cxx' ) From e19cba884e2d1baac391af7bda483df476c939e0 Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Thu, 12 Sep 2019 10:30:28 +0000 Subject: [PATCH 08/12] bgenix -vcf: only output unique IDs --- apps/bgenix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bgenix.cpp b/apps/bgenix.cpp index 2ce5e618f..3c0200244 100644 --- a/apps/bgenix.cpp +++ b/apps/bgenix.cpp @@ -816,7 +816,7 @@ struct IndexBgenApplication: public appcontext::ApplicationContext assert( alleles.size() > 1 ) ; std::cout << chromosome << "\t" << position - << "\t" << rsid << ";" << SNPID + << "\t" << rsid << ( (SNPID == rsid) ? "" : (";" + SNPID)) << "\t" << alleles[0] << "\t" ; for( std::size_t j = 1; j < alleles.size(); ++j ) { From 07f6a725ec8b0aed9c38ccd2cef9fc3ec8fb0105 Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Thu, 12 Sep 2019 10:33:18 +0000 Subject: [PATCH 09/12] Pull bgenix vcf semicolon fix from master branch --- apps/bgenix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/bgenix.cpp b/apps/bgenix.cpp index 2ce5e618f..3c0200244 100644 --- a/apps/bgenix.cpp +++ b/apps/bgenix.cpp @@ -816,7 +816,7 @@ struct IndexBgenApplication: public appcontext::ApplicationContext assert( alleles.size() > 1 ) ; std::cout << chromosome << "\t" << position - << "\t" << rsid << ";" << SNPID + << "\t" << rsid << ( (SNPID == rsid) ? "" : (";" + SNPID)) << "\t" << alleles[0] << "\t" ; for( std::size_t j = 1; j < alleles.size(); ++j ) { From 5bcbd97729cb45ff4d4a7fe642fd6dd927472bb1 Mon Sep 17 00:00:00 2001 From: "maarten@oyat.nl" Date: Wed, 15 Jan 2020 18:00:27 +0000 Subject: [PATCH 10/12] syntax python 2 script was not compatible with python3. updated waf to version 2.0.19 --- waf | 15 +++++++++------ wscript | 20 ++++++++++---------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/waf b/waf index a42ba919f..b97424a91 100755 --- a/waf +++ b/waf @@ -32,13 +32,13 @@ POSSIBILITY OF SUCH DAMAGE. import os, sys, inspect -VERSION="2.0.6" -REVISION="f8aee10f7730da942389d88501d489e8" +VERSION="2.0.19" +REVISION="597b128bf9f9d1a665be0bd3cba5812c" GIT="x" INSTALL='' -C1='#0' -C2='#/' -C3='#.' +C1='#2' +C2='#-' +C3='#%' cwd = os.getcwd() join = os.path.join @@ -140,6 +140,9 @@ def find_lib(): if name.endswith('waf-light'): w = test(base) if w: return w + for dir in sys.path: + if test(dir): + return dir err('waf-light requires waflib -> export WAFDIR=/folder') dirname = '%s-%s-%s' % (WAF, VERSION, REVISION) @@ -165,5 +168,5 @@ if __name__ == '__main__': Scripting.waf_entry_point(cwd, VERSION, wafdir) #==> -#BZh91AY&SY68fOE# 0(b wzۡ#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#._.Ԫ̱!vԠ%6JMbF3}ii݇im<^-bP/n۽q=guҐ ]3!nkϧ|t{Ƕ6vwoowi"{ly#.#.' z}#.8v zˠ{WV(nWIO@:HZ$#.EJ@^ڭhXAI5k*^a>oouǽIz\NkT[X۾kg#..l屽[kGv;o{z{]ϋ紛vmپ76ݧtsvhzr$#0AH#fjTn{gy^yc+mѬ;gZzdT)=h#.!PIT@x#/l)Qe/{5*& S/n4PI$=>1K#.js0]ހ>wl7;IzǶ<=Jo tӍqӢS|;s}}mamM\\{_osSٹ[׷m:[}:5^>:|O'F:{wo]Jvj>lfv̦Uu&1̳NNtMt{͇sǮxQE(A(UEPNmfvJt֧e.zh0͝(zէm soIOkw{u3#. z܈#.:;vnUsk=g'Ll[=4zcU%+iΈ}9W^^oy UAyN&;K^݁Q糾j-qoN壧q7=>eգIҭ*wnvV^9ogu;{#R]wΙ;+ֹ87]mO^u >j-#.#.gmt;]k˾v{yVDl{'gg}@zM&{c]n:nݠŔ(lKGV#/c=olڕދymZcAGpȶd˜`;(+9roGFM#.#.4hi14hSȍHHM&CjzM3==(%4A @L Mz#.#.#.#.#. BCSAODSŠzSCG4#.#.#.#.$JH=&4h)MS#m@ѵ#.P#.#.#.#.#."HB#.4Ѡ&ɪ{&2b'#(#.#.#.#. 54L#.Tjy5(v<DͱSShR,rV?Li]#0G`?r;V#/hk,7lgOSCm tsw.AX,.\ۦE\ۧƍ7_)Ѣ,[wW߶kL1#.8m!TR/=h0UP09jdcIE~fP5zu7;ns?Š: 7mZ/Wn^{z@ufom++^L.@dE@TUrɨ6m%~@&P#0A՚" ͥ O>mzm"c1"&#.Pdbg /|e .k^w޽oJl=E}J4j/d#0r\KAһcbѲmA'B,zz^mfB)jKGrPak[>#/Vޔgv~>#Y6PgkisPHe0ZCV.)(bCiZҜeE2R]U"wU{}e99ev Y"N)#/D-5i )sA*,|b#Km-5kJ]A4W6QXIZ)EP#(D{N#/)}*ey]\~̔ elmn|Ғ\cr#viY2dAjC?wL}w2&0ᆞw;:w}X(>N< DAȤQo`XOD9Vvm>*SΉ4B(v'Őa2 W0j- vR߉#v/6^p5&!/:Pyˋ0Ƒ.F֏mQ#C&;#|1{}iơUdk2ʇ4Cɤ8-v߾ڜ_ߌ~3–j0V#bwMZpo٩4_2BAnhӴ'nr#0==VO!$"={R$P-˂:BLۏs #=G2\xpzj;&;iP!D#0Ԯ Zۍo&۶,cȶ_f[yõ_7!">>^=v~ݕIa e@mEҊBUɔ:(*3JF}W/šjj#0U@;W;iWWKb"QV,UE3ϨO6+U֭{k+>s> Ѻ#0ѨjuH!ܪ~hwr6ZɌ'ݖzSmgv(J|kkN5eZ'Ʊ.p|:MXGf|DU rE[vwCV&e)E"/5`"R,)9{VҬi4c?S߶oƉ}*/KOHkCkL׿k{6wiq6NfAty҄ >r-2tO3"lڍ:wXw!7aB3ՏL(Tkp^0ő`"I"(T;<޺C7%#vb=>xqny]S!Q*6YSo$yF3/gj>W4Q(X=* hݔJEc*ΉG#0l%{#0\:2 +cP514w XM1hB7Ose&yYC;*wd};fh#yDs32LJ\95kqp;wyS=ޝM?c¡|n6DptqB˩LH)Uy'.g %Q/"Qn5 Eu6蒌#0궎WذJ*lPbM\E)!V@JDk^bFz1kmGZ8}O50x]ZСeU;r{X#0H<ϻw^7Tϗ&9ø %D=#6:NDJdL`N3AuA6MWΪ*`C?2sd#/[O2JAQ9dtiuT?6MN*Ӷ(ÏMؓ{&G#/1K4Zit~<`7;.U<<1piɿR)9:sIǢ# U Kde`<^f8El]A֓g^V^z%}0xQQgͽiUQ9c:L]ِ>Ug Q#/rC*4[X6bFGB>fʚT-W'#/+W?;2(;32 jbYzB?Ym}6XŇP/ܝb\9&R9P+E ݵdf#/\̍gպc0qхU WƂV"<#0嚗h]Wށh,Al@^MzM}1wG9,!?~=^gF7ϿjsJ&(\'O1pD@9ĆV!E^}(#.A4#. 6#/Cݒ\Aʴ srTQ4}2-3Ԝ8&a,06@03V^Ql;{#eJcdٷ;&>rjdXմL pSJcUVrҨL='ݭi ;n)tʨ$_;%}lEȇX|qW#.}O`|A>xl7227B4.xUP жѹ6LmnI׵\|($G6TA,#0;b^Ug:Tq(Ū1<v3*Hpg2Sz[/$Zvo-mկO~qӗ(5#;DBiuC~;D$V%hʜڨ2sJ5#/]kI1Jafߵv?5#/#/UMKcE`}1B#09;w;{yxMZCE8m^&S^{6@`ks:}}uReLJH%ҷvc}@z(5n#{RNΙVWkx$XGUApaH;z+ 2#06H_(geNC! Iur߯UH'[1 Ёv4#0MMՎh y8,l7򣦱wkJ5LYGzyw_ zvNWl\+ҡ;u^XNźiDbo\1;PrQ\=l@LrE\2- ].SK]79/zm4A#.(bǃʣ{2x?]O".v3f3~3+@5C1`Å1 yE8E !_CJM]3!'0|k{m\pTĈXW8[\E)tYCg~_>Dh5 *]?o;r/?NR F\*# zR{m`$P9x(@HqwloHIo%#.%"A/D-s+]UGZY"E6I#A8^^qEHz#0V"#.ąU_խ #06(Z~Έ h#! @$=.BC`p(\ ݈f(P#/5Ks**Ž s݂*$51sL"~'Ƨq#.gޯH#0eD=Dp]e޽ݔw:N% K6D#/hQ*(M.@*"K3!'Rgb#R&xƁbRȼ GE) ]Нq{4ٞP3CG`(cχﰓͥ߭A1,TgY\G_qL !fčlQ؁D_NM]7ǿmnw?}5¾nwzv;B@ּ%4[nĽ6=Z]q͆$!UM=9܈m~sxK^-3\}OYo0x̭uު?_!>5$y͛ᑊz7c߾D9NLjtO;.H""8JNe𧻓hfDj0=I>T~>|<]+'ZyX#/+\eϒZ'L32 I[c)>܍&ńa˧ۃu\u'8!,40d/Smm6].w7wk3z41[?nf}~Y#/O! iɶ1@*RG_&0OW&zk<:.ᝯ0z6O5G#.\᧦Ϥ߿_l&pضѤ?)}1oM8UpJg9&)=#/70keT/,H4]nR69j$QC,dy#U_ho~z uLבqZ5x?^8MBGWe|Z{&XqQ)t" {N|m/XN=[VGDwVIBwPo~ᾯ.c^de$!Ͼ>C~:pv|<~riaB@8".Ń)2ABL ?9#/ӲDθћDSPX1ڂt#/3 @dM=#0j3m) Ld*&XYwsAATDZE1=*ccyhA+:S1G V CUMwT>FV:x^}_pAT6Q`o%GV8/Qojq#/בx'Y#0g0##/0/)4$#.@~Ȇx:k^\D 7#/#0NeJ(:QJO2cDgq_hwV[.Qf(HtPUGm@N'9!1Y#0@é7_M먃tjW#/-xF3Z-סq8E#0Ahe5EY&M92&[7=AIUtʸc׏Lr:]#/GBqnyӥE<>3:2(nC4 'VgbtØG#1sJaFaX=V])v@5X^kn+ۑS*&VQdĘ],Lx#.?O2Qh*7Ƭ%YkhuY|Ұçà\q@OТPG,-.eD+7lT"(wy\Vx"0Ze2RA@P[Gk:MM7+ԯ[}0Ҙ q A5LUaL`40g0iP"Hb#.{@ș {x2j^06G-${ޮ#/N^M7t 'EjWYKoTFgfhMXm$.(1[v! Uv݌? CJ.3PPE8U&B)"d@p}yZ2 wHXR'ϴ^RLDO#iVI7Nv>\Y=)yC^Ӌ̙?/8~яZF0oћ*&2SMȎikM䩣Fww&K,l-RnxmrFc+FG } BhCQ#/51b >FL3h.ZX8!3e 51||~;͏~ӅJoxߘ8RACd,PtWЯ=m#0L1bhF*mBM a`Xвp׋sx ]M#0I֬u%b,W-AKfVbW#U4:&ўRǛpHt("vv^hnc 'vH)ȁs곣PD#0|(R5%]:?5~#/f{̤Pq5. i*~a SG.úa!$2$L@Ё-gIv`IOS͟ZUdun'Vʹmh']J-hZX0FKgY3܁vnŷBZvVJHΚG1HB*ݘbؽ1li a`nehҙESHmd2,tE4'Fk%"t(෍#/o\Ԉm"r\`@hb\H;˶ DSj*E+GB&3&KJ#/AhmnS*LD`!L .7{wjf?|aE59(o-9 al-~^79cH\4ŧ<ٞ#ɶnqXP6.2e}.W9Iڡ3Z.s";6sz_*;Dcqew5khX-+9|F"6=E~G,$ 'n,5Gf)2R n)efKLڢ)Ex'.SSmwCKIR7ɸ5]!Kn.09mK/9}=dHj*Q׮2c&#/< a0NϊsfWn$"7?k|{dl_iFA 0ts [!מ=ޥ"uQh4#0shcd\PT.Vq-#.AۄfjQD3m˓*DbԈA=%}Uo;0T%L"u97O+|'b`r'~Sa0mpJץٟfz"ت';6lEBh7Bj%K]AyP1e51dz1JY##.X[k5sn[ۦHhb Vb!c,D"o22ZRu]36o 5xbi6l&u{ByiJ@Mޮegn`{xȶ~d_d#/uͼ#/HáK(pMѠbh~ۿNP=dX{=g#09mp4A>sV%ZU#ZOo9\࿽\u9c-API7\CٔY\!`bw'y-V_bDAK./^~;ZMzO[_/`nۦc/óigZYuvN6.HG{$<\DDuq SaFAk)#YE||x=vo~_Ϧ݃qXW<ܫx6[PY%m b?} P@&/ZIO$ի] RH#0Ð#=Gjw!1N.Dr~rEBb3h"%D͕,J/14iWGmڊ5J)!Q-$x|]q-P~^vvzllR$t앧PQzҺzQO_FqA(RJTx Ԛ>/+Q-?RAtϮQ_?hoѯ)},h$9#'$!J)A[ԫm$ZnUTEDO}>ya؝qLjhv)- >Yi#.\pW2d߽t -^Շ2MX|{iuar@==kg3`(X74|G\%rJE)#0ݥjPOjCMHy5`xa}PCAӻ\/T(` 4ްȢQ,;;#P=e@eo?TFQwbȋb=zCm!CM&*~ILٷ?E겗W6y>O~zD}Wо)='ts#/1}swHנv~5tH^1o* $z$?]Q4Ӻ/zWiVns/@HD29Orz#/SA&l]w>?뾈eE<6q>iwׅ!U&r sQխ́;H_bș<;Nx j#0NXS#/n#0kԵ[8$(E'IbX#HuVu$}Kid0RqR_DGra+;^jVYhV/?K; ;NĝZE7k QT$UQPTDK J?@d{1LaA~O˥}Z3i#/1 ۙ(Kvy>#ε,p_CfOuֿEZ>+T/j݉/W(qHOx#/P-  [=drz_^>=]!Ѻ"|:!uK*QJK")#.Wٟ%GH ("D2V:6.S>f*==!Zg+vsZ^t>i%-rgklQ?o|o}?;tv}؍>r`+5W.G|+fw819o;+V"onVyy͂|;cYpQp ]OO7ُD`JL.|4,\͈Z̋sOifx'qqmxۉXwz<%vlwlaDXVN=+#/ii]:%!'jL|U #/?u;ڝLk}O߷0vQԮ75n7zݓ8'pw퍾mEW]_ϣǪ:t[VJ޵KJ/0?_ wiGo_Y@ehƘ41][=9oo`ʟ_wvۅrHh/|]]oSЖ?[ |ca]Իj${z۔(>gZ$W%uxxk[ɫ{G_DJ,U&wÄA*8~Q#/,i~#JիBjjBЉ^?#ϯa}`:Ǘ~Bu6Ϫg*Ӻ&Ϡ~~)ninK`N7Gӛ٪=p8O~B=CHCW {ZZ9s@#Z!G+ŃGz )v3W,W!mhrq_׷^"?G|~B~AY̺9g³&K hx兑$#0{F:pL_wӰd$,*) s6#.cNfDgR +ft^IBfIڒ~;A1c !/V%c:)Wg\cxq{#0׎ iPTl#/O Kʉt*QYx;.X%sKXSwN,a8/;I;n6:[p}᠄Sx0*VEpqF<sDSjĉ}m74CgDswr+)1/1B+Sכw귚]:,9 Eirp/(dk'yd'G(! >!>F䕵'[]zeXx ˃*υ{4B1[}γL0IIE#0$u|@pgX#/#0`̼gk6#/ZXGŞc#0=>g~Yã`nKdWswGT/#0Ea'JN=t=NEGtkQ٧HUz4Ye}uW;nrkJ˹7Tjߪt-ϙ2f> ofq|\?80FL<a0/SOmlc"<>QJyGzF0#.W4v^ U:3?1GG)fe̍ې#/A"80)}1AAHMJ*Q&#/cqa (8 %l.`Vj5fY "Vإ91LVDRE,h5b9O#/Ss6]&6) [֡ɡ䄍П6+G N?_ z?ɏk' us*3.D$ttFk1wд6,*RB40U$PͲ&S_7,ȧ74_'.}:1Hdh>ee;U.[{^9uN^>^1UuwGG6x Ns߇㔏@;E[ߟc;,eVMqeo'950 #00}DzDKG ji(%~ËMUMmWSpל:p^D].sWI`aha^#0޿i{ɳ[q&߱u~{- }oaV\p?)pMb!H+iC b풞#0hQOW[Gyͼce,sQ.FĎONED+,E=4au%э)j!lZ-P 7Nn0c] D܊#0)F ilA4ýsjduD6bY0̳#N㣢[\ !hp~^7SVX>U~˧ߓAm!CT1zЙ"+QehA1#KC[֊FMD YEpAyY=ZEXf j U 2Р*0be#0w/nF&f<mZ9v1.kcX(nd3Daʧ*c#if#/U`Gg32YbZէhCYihfk|L%ECe(E&I`#.Z7rƣ3u#/1llX -m(UzѣFYzۮ^\.}N#/1= VߕN#xaAӊɾ7]t E*ݼ>.r1sMA$g㐸(&f4ꚜkļ#/#.AP/s4 NG+-z=S<4:h v-)W`Ν#09IAaUx.ZV#qnGix7A|TsncE.q{yratHNj0 FG[qN𮣲lpUQHiWF㐊^,4';1ql %Z8& eXPXJe@U ,B62(cրwCHʹd[k0U#/UV uLѲh!#.̓BpDDՋ] 'q""w#/aXc?![^Cdv`j0tE&Y#FS!*U0W[Hr|=24F7 >tsB`^5T'j3Xt1mxҭA>?O:e[>"2`Τhv-뎐/xme1lsn,-.*H]s2So8�i!]qL5$#08n#/$$1P}svuk}^Bޥh M+]ڗPʽ}UWy2Tw]'usxom0Cm*6-dܶҹQNhnQёnRiއ^B볺 K%nQG7Ju#0}qa.:1]"c"tbg;6TZf vjN19b4,@ZsSa3}\\˾iC&tWm+eBG{}B`0&%{Xti[|]O_9!^5{z?0ibc#0quuZ[N `=sV~5#W>14,rprڃM?Ң$o=]2|k:[5ToG9p&gec tW#Fߕ>ta|ui=܈w#0eF.Lhi@zuLpa+P=31WË`V&'|\b/lp+Zlְl†ו 2bN9:Co0Q0$(<Oz]Ne"CKm QLX`v` 샙df_Ľc\trN(w/&!EU=F)#/%Xn?F+Ֆ"3PYWC-+w+rl%m~e{¯֒^$cz/0,3Z )A{TX#0-n/x-(}OƙgD+J#01ȳ.l,m=;~.1P_ aK`ݕ1qCҁ8rC#.W!EYRƒ "# \:a#/b{7'%ُ֪xΎ!uEƧ-FӉB {[&x}nHvso -h=&ٺx`3O?#/<#/JJdr iU6E_FMz%$z b8St$6rhϬη+7jhȗoR7b|L_APSO.5)ϝEr ^IQ#0rKps]&cC Y_|18d&XCnԶ89-u#|d$˩ wG<'€O\}g-:p,~[ii3HDa1(($/M`s#0LâД驭? n4tWA [8M/LFd-vGijP_sv3#?a <ǎ{xZjf\ GͽO2.ST:!;֏U/nSPFI?^`i49}Ye/+{y%`b;-bN[R f{3*C}]`A+%sp6F%@)էjS?x%Nىy䐫]_4իxduu>y65NQpNHe>!Rd͘fX.6:O_Jk88wa4ҋb]^Kk$ mS9:*yqlRߟ k܈?&dlV^!6vriv U͙%)9tRj#/pzPv߷SC:l#G4}穀 jc1Tci|#/Y87տWp 5ryƹ(ΏW5t3D6Wd[l2Z/6Fwg⨚THE)BV$Sp$oCnp AQol%ðY{#.tΠdd,lQgHGdP34 `ܑz٪ͱeX"=6z~!/Kcjs;ۉڕ,cz" wcv"%6EA &]]]+g|> 7O`k@UZ2iV‘. jЉlyNi4xw#ÑZ?yUmt0"TAܒp[%[nmohuܢ'q۰X#/("jĦuo1B+Dl.t,eu٦r btI9*/- :SC@B}c #{?dX?]BD3KSĹWoV—V9 h)+O<ֲaXl!%aVtK˕nrQA>f tz\!eaa4-k&+04]T.k `Vx,QwƲ#/E0]B#0Zu抮J&5ҋ.0atOS(䢿#]5aF K,GW^L6pS6CG_*M#^d7C )JN)+Ecٮ(㏧o;纪0WDoFRZ%mv1kc1HOQgQϵ!RrC~iP) l#/- Hɋ.:]Ρyxg~k?N%O))R(WgՔ~mte7tk/(\7*/>VJݯ m,E[ٯr"3SO?Xx}}ـqnABZW\e'/"uvȺ1dIa(OQ9~T$#0]ذd BKPEJADJkC\F]2y'zA%?NͻO<\Zo4S׵sftiKf^\pKEI'vx;Co\TȦVY0#!. #.R:E#.'#/N&MnyN!6{m9}KWD/#)stbX{~.K諰ĭBϣgϚ,+O'|$|7!ys >I iU2tx3, BVA#0F7>˞a{mMtYg㛋0](BZ (s'e"3+LV#.5da?kk>7\_xj62(KXobU@q Ke"Ͻt5f1#0Ƕ,7o6:3)9\W%6ރ7ugmeϔlD4SXA]TUmQ)'OZmnH"aH҅6+ڋ#/7&e)7Ge y1ۮT؄/-l#/|2y?tXo'<97}`_LGxeeۊ/*Cfţ;+ũ3u-IDl7ѠrEK_s= jjUL$˅xmIG%W#0jN#(rR&&o!j#/@%a#0:_ [usJ3&:1s+~oTG9|}+z~^L:=hun]qUP|h:U:f-r~ȇqA)9Rh 8@ @3;aSSy9J ͳf!i)mn&^g5tM{ǯ 6JTn|ųUNǤٳk~F#ʚQ0CAm"n>&|{tƣF}b<=mt^<ڗyְ-&wVp XAWTbs#|RHFب`Z*o~Ѵ'5rDcS%VT$d\: EX֙Ch{Z]VpzW1D*I%^Ԑx7GԆöBh9Gnj4B;59j &țپ4ӡ$o9I4:7#0A"ẻsizF XF g3ñmMH:W+cWSRBDE7XkDhJt9`"3qsiXp4blyc>K T`paR=:GgwD {6כ:L]9jKӇBh/d`VSu*}Lse#0gMГ=x[WcUb-[ 3 K|Qz@mu ltb;68vxޏCB#/Om]>:ߥ:PͱZjRD|j9b6τ2EŁ%ऱn]ռ1@B{1ȗБh#/|:#/nND E-K 2y&+Ƅ{iipV9):-4OwubG6c7r*J19]<%g3zx[9_sz5J򶱊Zd;RǣwCzĎ9Ŀ#0-W#.$ԳI77,Kx gnn|,P(PAF;tVw7gӇ42g@SzӱgM(ߣvu[[lMjhBv@5s"_⽣VH>N2#.yBuSSBM-{|HkҞֺGls+LW#.){:ׂ՞?Ynz!viR~I჌fja?`RmRPE5;g)c,Pg?=?ybmQE!m-Y:#0JzvdbtolifmeN5?$ƒ5'ӱ# P%60Y|^f8F;</}~w9u)i_7"#0{*#.x\4rOpvW =y#0'WwӜ#/λĖ}jMlbj~~F'"%!DJ $f mϕu聾k>re^IEb"A05! |KT^^G霎 'bȢ+}(Fm od?#.MiVтaK|uAXd(|YTxT^;Vp]v#/X[yY>#/znFcluT%ҔػZC)r'6O8"Il$&D_SCCI5P1:Xܘk>'R^UoAXuu~s<7MaVNvP쳏t\egsZ*'d eQJfh.$z|m߾>^VN{CPE5D5@o>'2t궸#.N:^pFz!;Jq.jQE2_#/+i<HRLlDZ0a;(,ZuQGU%g#.b@6Fz;]-a?Pp'1c!3V/8Ja_0l}3l0BIq6۰u4\,dQ֯Ttɲs̭JvqD|(Wn:ǁS+ VUuTY@J, ^2f*߷|;iUίuᛵ/t, `/gwGhA@ @u gQ 9GP+C*r.DsO'ȄBnmwBMM2|æG'J R*<6(ܣԊy7?- аE#.̀c#0H{' i8cm(k38{H< F?#0GQ E%4|6ă09I;ϕzm!+yμdMC6.#.\5#0vBݑ~[Tl^R$##.S0HI`QdYAߺ6L"`TDJV].@P`"$8u*\^yPb:@8Y%&$*#.EBD)ZN(*PgCz)#0u66*&9ߋȣP!$&۵oX򞏎$fP?L+#/ AES`% ۪,tOQan0aؐL̅]>/~׻[/hMTFnTa("3#0IzPȼx"%4g  ۲5̾*d-WNCSے[~^L_fvw5!KoZBW3d$tbGvxx4 VPݵ>CHoIgASjckߍxkש{BR F&woI })7 iTi7qH*H-üYr~Q֑Yl°W3VYx]!ٹfȄ98%`K6-ʁY6 Z@pǕp IuJOQD(h9r톸¡oSP!x5!ֽ(ӱ7#/xUɒbrgl&|$ /K ߪz 6 漎ɼy`/rCb/ Krkcm[#/|#/vfszdwlj{` 9}lKT"f4 X0g=gʹ-3[NYs>ν;QӞcuX^{kSᆟ,7"Sɴ?;ىb8BB#0\E&e.󹑵VȆ7R@d(g{:bȎ/IW6KVuޥV5*`CJpk>wvpjzy{Wp~)TH)``tWo|"$R5#0.)iV2$\){C= & rn5B[Xj~Ԁz.kg%~ޤdF$*xג %bJ!6WȑzpLn^|cV8z d~whj icҩ|ۭ Arl6GkAvj!J81??(qup$U^";RB٠c$&PQ+v W&"gCz_mTܶ㝳ZLv9G>-8J : k;#.SRi:p-Ieh׌ZTdzr߫}bPJ2)Wц!iO #.#N*_֙4)ۺس oq#/8)F"c%ID*@FgA뢍9P፞’1SfZH60ӧn#9L5gW#~fDѭ(^O,8룟HM-<=>m#/roָt>LJbZJpgFF"8t)y}$gTo?[Ms!B$. ť+vߡ;v<ȢRXOT^w@j-E}Jjh~pr#/q>߲<ڞ#.sJ[#.y*|[JG#0zq(MrArwv c=1Gj.$P!#ms!Mtp1u5؟Ezȉ7,_Ʃ؝^skezl9]#0H^T{ʣ}*haǷQMXdFgi%_~ѾsA! (:+ |wşXTx>NOya1S@dnuEAR^ }'F$ ~+`3=?OƩ1dӷTB)vVeiP:{I1`w|!_'`Yr[2 ZB;T tY[b,¬[hpt FY DKc[3Me%ȩ UGR DbC@LMpFJl6],fV3Pvł0,8H1""Q#/GCٔT*:-;W}O~_W?J{}=[SnG1gϙ?[48)ܹ#/ƅ89x$`266};+М]rꞸաv;ZgVh58!`8yDSuOh;/slY%i\3MΕϡ#ښd^OLd0^T(#()LJXA7m\"&kw& Щ,˝].)/AxۈNN(VrwlxjGՈJܢVA3\\[(0ʪ˗U#/;Y5F(yʩi]a:㋚Zשɜ7G험%fu!м7 M6*G4ABoiO`Jü;]^d$!~=8?_mf#m2 !1b{<ά$c$E=ZyT;`7X$]#/Zm2$ 3#ñ L%˪@e*i#/7T<.XAHA*'#Ceϝ& #.}ykJ"6΢\k}=eMQaƉA]V7vI)a\ǀR鮍5m3}yCIy>C v*l%`7Nv4θ04q"zPG|C8H\mwY:],sR&HGMJ`8jwdN(lPe#/VsUJ6m&WKjdR걈QHÕ 0XgE& dMWt/>dTq^@ihb<o"B'B}#/p#. $o%GtRV<(:=S}+ImٕbÆdc ZaJg]},(桓K}<*Ʋ)A.wq=P\ IK)4$RJK^&I#0r[D+ؠ,᥻|vb>crNƒ=C!@m;M5,1Y" P8@356FDL{t |pL $NvOՍ1\Kf3~X/L 2r"nEą+2XLیlhMP0y#0dZ-/LΚ8Tn#,>wZu\2pҎU_o/seˮ:ddPUQ1%*p{\3k  ϙgӖMr#r9#~xѺcSK)vut5Ko7MxT%A}67:靝EqA݁C a'q)T#{h:d$={s KF%B[ ZTD[@E`Gj#/SD{4h1ߪ0Gᦆ3g;\88ewûdh/zI XhD!Ro.EU %*N5ՌN^.v]Kn{+Q:p#0B=궈`}ycf> E:kiѷ 9:d$Ķu .V1%S}yיDS5jD. +tNi+f )/+A?{7}< d3@"1#/@t*n&HT*C.9((>!(%QF-hjB /^ﵒ6MDNtrT#0#DHCdx.(=US#.p(sCS13]j5ɸ`9s| GWcKr%])Y˩]bR9lO6d#.2l(KՐE8t]Ё>:R-2T!^yN!C9Zd>URQfl!hQr(B !]7N$in}NB4:vAC2&Eq@,AF i=5ddlo][1cG;m:"$le|t~jC'!Ahqz/O»0b).C;IɐY#0vZwTYQU&x̋%b*p n6أWǽDm ~U3җ|da}y)4)?wnp}eEXT 䈕#.@?/}[6v>Z≠[K?ؖ1ws^Kzyk ?C&4F $Z>&~#."ï_y<4(T~m>C#/K#.99=#;f9DZ;6?/vycbyz#/]zb [}#.]7d2#.bPߏ8`pCI[@͔UWp.ڟzТg\Fv8OOnCl?úJkbkHge&m9. @p{O*%@,ZuN4߃-t*Jn-ʌJGokp:B@88fLÝt&ۈzK$ۉ(Fa8xP-52 sD@E`-҃ S'y'MR }N #.6H2<т#/Pݷn;tXCLz0}F Ft>'..91]hsœnq+TO}$y=H88|dU_sKA/23v]P|"|ϩ#. GpBg9OޛƱyK뵋w7 q|IT;yΚIJSHVY-l@Ҫ1 \8(8(R!`RkծV-kU&`oU7si=P'{IJ5%M)MW#0P2y@pD=#0DBIT~#09Q 0:#0^>wpLφ.6-Ⱔ#.Sq折D+F#044@W(M089='f#/VoBD=#0>!Aq O+t#0ZpWO)HTFGOsEPt2t2gcBAVY+nW o+xc_+2LA!雥͎T=v8'z-rE+d5w޻isN?)])xm9 <ɉ_uf8NqG^ʳ:1ӏcb!0yyCלz}Zb(<3rK#/lm|$dp,ՁWK(K9SCFsd8C#.#0v=6ԭ Azrf9i1~W$w[(-dWoqe?V !L DGv|76pLS8SGCLH%DZNsZb!(h%~Ҩ9bt4&gYo}M;_ώ#/ɩ1{̾sO(cm/zË8>SNBuyOv1m8.nwBW>M>#/ge'n_oɳ0ҙRjg!/Sj"bĖ+ ђ6vr Cv(#S?>I -{"cZ_SBvN햮\U#%uM혠<&;S"=bw)A&\Iê7MCvڽLJ%HƔ ]H2]9iE!*;~Hubr퇌0F!MTQ[\Zt_}͟:\w"-?[u'W{=٣Y̳Ժ^M*n~ݸ"`b7:8+Mq˸Ah#0~AgʇK%LAy‚YG÷{>.)H?Z#/|Ü7 R}=pG&Zh(5gK\(DEJ奙h'  ;‚]=X#/aP|*y02p=Sof ŶFAp KacG m5!ㇿ!LW.Y4!qxvVtd<JJ`e~/FdN n0}rxL)Cy?Bg~?]6vKxwY1ˆ#0n 鋄Rg[#/aU#0%*80Ҿk(Af4,Kc.aYfccߴ<G}pg~A䷜jh:w9v|&OԬ_zu8ðowfqƗwKF^ocdӥRZ#0#0tNd4Yq''|>Gӊ=!VEG[̒s{N2bo}#zɗHr(Ur"zYxr2҅ + qR'R Mܭ܃ ⣨eRW8<ӿV:rzV&IaNŠ d&%@#.P)#.$ bi*HƁ,k TuUbbvUd#.ԈןfYSv(=~I@sxrq|) EnL2q[ (-#G̳߆<9~5w1?hqAQpQz#.O掌Xy0Zb]u"~86|/keFEgĆ&FWw?T`Hw\?N'Y@O(3g~1Me&M%&PyJ%o,oͶP<܁e8O = _H GJOC7#.'?̚?-{]Ҽ}PKޑ#wK>\?ϣ@$=!qӤxO8-3J~)H+OODA/wŶoږ2 04I?* 1D#b`?XDfkf~q!q,(IO /=Yߡ{@Zu}|?ylPsm's$A>z0.0}jڤbW#nX0 ƫA>h#ӂcrvx@w#/J^!ʀzrvK?7@!3mr)DVcL4|}|:z,aebT$=wSo֞,Ō@p^#0P^*,K_b>mX7!wL:T#/HqI`03;b$tl,tge.ğʜo&#0SmLzP>:Q8#/k+/`u3I++j$kςY-ZNǫ;vp;{[a@pM#/ȍџ#/#Yj~ieגfNÇep?OA#/%&ܪ\`i>HtSR +o2ǐ?=QE;Fb a (xnX޵@r]6#.3TJ#LU#/>IRYuc;rEy6D/[;/(;)Uy_-3D{+ /禐Ǫ,|S^;P𡫣蚔aV@VgmO^Ђ#/;7 ޱ@AֺkX~8XR[Txd!V<i}uVĿ243َB_0FYmψDDe 1BQ|QTNHc+|]3R}kkؒsxn?IGH_[>i?Ok|9E#/At!a_i#/;`MÒyMW(B-Vv;B!Nc";{|QAxN;Bbz<6P4G2RfgߒxpgL{t6{<]\7gn#0gn\Mj#0h {}g#rP6;kٍ2ojxnXEE`>/ѣȗYnRǗ˓Nσ&EM;-gUJA)SifO5?U{~%0#0qMy~e!X<*M*~qoڨx4>vTʢ$k.H#. 8R$x6m-lm$ 9#/kjK{#j!m׭i[=# U(yΪ^b־ (ͲG&لZtځ׼& d08nu,$@؁l޾k#.w^CӎuuvK-D#]ۖn: 3 o{JDr-ײŔ b*)qIZdua/}l_(#xovY;Nt @K$`<#.Q; fXA]@sys %(seFzeڭX#/k?siX3IfeW5sg(ERe@M]vcvT9pz¶GN֩qfBP֡fnޡ%21m. ȶ6vI|_3GOI0z Sy{E"o1䂶@\,Fͦk#/>d761zT۱ln=c^L荧lZɶN"/0O㹾W$m#0*hc"[KV*W;b#\wS7B +u_1GZojFaf/a+lr]h{'e[l$?IAl"ІPDNf.vC0nz ڦudhonZ6Ś*6`/!*a;Ũ#.>DKk#/-@1#/FDtu>m^%aQOf;tQsX>[7/_V:~qܰqm7ބ:îa,&q\$Cm6;l4(ۼWvΔ"o?}E 8B7@kp2TNǜr\4{6ݮ|HӝpvS<;I`"RJk|{!xeK4h}L,7RWHO/`._ht@$*#/65ax (㍉KI¶[S.(LuX?.7A٦3l^ɎpfEGk݀|^D^œ#0El\`!$\l#."pfب#.Ϸk 04;Vv8A뒻?ڽ^ {:xγ,FYC CxVK<(,DF?X O1gc?X/ ;DT*Br(S0e|; Mԇ Y#.._#.g$I1RTIu,z@xvbQ` DX00-g[c #/oj[T#0?@dr9.]hzwM@Dy^|ͩ==#/7ÿS=]D+/Υ*#/ fUG *vp;~|}noҾ(:p#+Q_ER"v Yi^]оiV_fk(#/rN=C^cd& 뇧(7鏃wqӞ Ś-TAs^_whuVk7[_x,#.gXJ^GHF}_w7oضKtũ$hu_i1n?s *H,] >#7$1II=om/ !z |P_7 pv7jѠX%.S7pMނ_jv ҇Y #/:s QX@3i MiT<֏!Ԫr9wvlZ?C` t{`y7g*#/԰F2nłw4y 8֔HalNaBr_ͩ8z#/88$#0rcA#0JI{|C*;ep~*( j,h#0ڲ #.];`$IQ+Qa$Nmσ )c%ƻWy܍^51!:i,deTYJQ(A5 H<>Rg#0"0UA?|SIJU[5#/mG|<ɑ:0X7W9u D!1^d8p#/oE; |s5:IF}Y/p*D7[R+#/'qi~⪐)4* *D usmos!֦6Y!R哋/;cZ\%Ԑ0j}_ÐZӎlU9sT:kU0\sÀ{M{{L2 nogC5wMLñ,'20=P3V@+ :%G/S#B^|'Y!)|̚鿨ߵ}Rgp'ڴgcb;\DF_HWJ'ld%)xAM1ٵ!#מ66@H8hFkYCG%FՍQ"F˚.s~y#0KXPb@B64?-6DQ B! 5>#0 ߷gWqE#/2+ӭMY*u (xyۓnqVJ "ON4d#.:;#.5d6;A*`k|X|󊼋&Bw.t)cP$ MʔfffjE3'wy_Ɍ L*Ũ"kp؋.Y=Y#.A`3YQu0!k$~'~n.3`Ur~RSXZ~T,(qD""UWFo#s%ޣpL+Ѭ֙! k9 Z]`:2JD4Yy$IXLֵ--m5sVZf=2]Czޭyhhk?7#/]9n2#/* Ic?~j rѵ`x<`zYcr=ݧ#z=ڳu{9]fj@Omi\TSWHg]JKkZj}h8Àu p-? B[!6]$$Nݵ}g~7徥tcЪWf` RE&&I>kɡd.I&؆v^xO.J-5Rkӄ\~%>'brzE$S߷S/X>p2=)OPf67O9N[iKSsDc$R`*ӌݩM".nA (+U$/ίS1[Ɏdc_H$鶴tb,,K_x}6ͩIl\JOaoccU4RԅBBhHmu&[4P[ݚʅ`ĥK:Rd~7iѮAwj o>LqWX-4n0&*d-'p72u,3o[5xVV>_$#05?!NeDG0ɵwȷہ !V(/O^b)g@DMeF"埼OTWc'09|g66XV:>v&PsӐTcꟜsg~aN*PDǴ&&iF zo].80#/Q45gPϬkOMoglH )1~_:@Oy@&-W;Ӌnw0|פ@TSj*W_B/p+'QY'_>~uTAV~Zϲ+C}VAu5S5BCI'k5UGA4d>?үI>S;&J!zQGJ87"A~%ڪQ8ptLHДT4Q.CS lR $)K37nha-G-%p&ΜȦax;1`$P;ˆ-SL\'y:K,jv"|"5\(.%"Jױ {b'>ްWnk qx~D 6^x>|: #/bgf)_?̨JXUjACh2xiPp4XBeeRBJJQk'l~Ǝ09⁚SްVUVԑ*#0?3;y"=Op9,}G#/#/Gm_Fn艥f[__~}"Cu;iN7礝#0{b#N~Jwd`S#0~&)J#0 GL2]X|t~:#/#.wنgAVttfܹ^[֔b\~(ĩ5I6L#0ꈌ P{ 5Ik1QH {*H!qDqk3`s4<-[aے. 49 <=oۃ; =u+8n LPQE%OzOO2JWgi=tc#0$+\#/]i?!1Ԋ#0$L J/ |MfنAɺ;ukR)@`jHQA@T#/Oȁ6zGQDs'$/WdA櫳`0Nozx^'yKj;nyaކHDi1ϯJQBؓw+HS,a]Co%dL c%C% USN,S#3h'_#0 *ؔDz?)v'!O{OOوg(UCpKN!_ ݂V0\#I>/pq'P&1{R@RW$E A8#0{\*BP:sUR AcCt":fp?L.w7#.{#0Fq`*`3]G咝APAސ8t"nd*kS=V*NX ES#.08QT< P[EysBŽT(:N L񗖷E+_L>ٞo?;&u \R^$U$M()RC&[b%VKn9kbreF2cU@*U'&9/IgFk#0A>]7\b.{ `7n1Iw> r"9d7|:Nu&gY 8#0՗N.N;Ӫ ^=Wy7@#/v[g+Lհ"5CJNfHĄt p #h F\'P+\@^u#.KNڪAl1O(X7s<GT}m3ç{+k#0C 9#/fOSg5[ępl+X#.sgN~ڲ`ޟʌ]אݮ#.5#0˲(6Cр=8n} 7$i#/jc<ì(~{0Cj ##,`#Gtyw&PrL h+$#.lΣ#0ߗ}#/ֺ9UD2K8'@T DVCU6#0{8gcq8'jf˅WO*⚫4mvPI>ǣx #/۸F#>7Yx kBCH|an/O9L"B,sO8Zav 144Z+F11^^r$cvXACdDz'X}/C移>Cԃ $Aǽ;]8A#.ldֿuxS vpҎ~#0XZ=7VB~upN#.nDž~B!ck$L=?QT$,_ъ8`fkMӓڸ=42dl4cu.*U c.@Md[9ōrT%44HE<ߛ8PGƎy5nוhkCci6N. R>hON>H5>5!9Wk\ ~H=ȷ< |5e8ҚD$4̨g@{?Wi9*M>0߶ `xp|R{^(FTTwTE.]n ogv2sނ̄~VHxv5T$#0I|sܻЉXEc}\=КdRHBdfjf:CM#0~{ߌ`OlqA;t\jd/#.LnT7?7|oַfc%i:rMB!:V8F']~};X 9eiFU,::5.c}V8]>6 7 8$Pqd22R#0O%Fyۋ>OW}deTӀW&R.5`5m.<6ǧVF)xe] do Mfdr02m|Ӂ"pp`m:4 \nIf-&ko4 6_q{ȠQ6P d=#/ƁQ!` Ѓ876 xv0U,0q֬2OGg>b^#TenC#/ձT=^c\$ |10OYoz",iQ)7YbE C#B}ɤt>OC]u6fi/粒O.p?h]i~HX#0F#.#/DN~mU<doNilFڠ'䨥sCohrP>d>-TwdE^Λo}<l޽ B!va7=μ>n4=&>Nu a8)>elC*X~n88vzl#/8sY)10HTy}{nK#/I8Ƚ1أ󓨡32@4j9;\&<Ӊgȗj)Pt#/{P?&ZCg;0VìUf3!.I353o\#/ (ADxD[4;ȘلnP0ԋJAHX#0s^YEb4IP*Dn4$dEmnL.$ysGD\~ aY1-<5402FB="TR:YE=b!!OOXX 跣4HDs~_YV"`T[dD͔Cz%d[Ҫg,ݛ͹o#kPY#8< 01PbhF# .PfÃd#/v8n>B V2¸o[׷sv=^mUH)%['zx#0wT#.6#lI#0uɬ:ot'a#Pwo}~,ƋH~zOF%0V4H626\)ZclhH4AZej~I_ʺ[6mɑy_oif4F Ƅi*#0>8$F{Wvݞ ?8`{{$[5H,=Cj?qX.e!4H"`Õ _4Vڰ!O2BxdG8C"<&pbo(zͪVqw^8M6r#X\!UG)3M ǏW#/WWГ S-96v۰\[D#0:;t\y]bu0w~ȶLl9idܟzXUZp)4gu"0 !we*45:&e%Ds-)jU{Za%& ;pIsxÏ'Y=d׮wG$f>W;y;p۹BEv 脍r[,ƃu ŕƙ`vui!f#J#0 ],F IPX$C8ꊌ{!ESeS+O ˰Woo`y-%p΢b2 ʘp.#/ܖ5 V!.e2RӍO'=>O!6YND?{(ٰGt[69gY-CZV->7AiHHM MjMm\XD#/X˗"?c`}nRC(/C| 3';U'EМ!$epY" c<Y^@sn" iƛԠuܘ$3C,aC2!6|tǂYn46dpCN#.kX1 #/= xCj9:㑱F2)3rrCv=l(4LβdԅbMaqՇRd J t70n3]Bʑ4)%.(ƚ B"1dTH$18N{r`kQԹ2XȎRSU2`F!ֵܴ{ \uQCgps<aev=Ms'wƫ\J#.Jn_vL#.X 4٪f)7MEAъn`>/#.+M}~-nFZ o#{"#YCcbJ'Xo 8x8*\&l*J %fOޫ:K.*&ͩ&wb{Bc5#.I|E>{=ZF%}|饳yLdlju?zG?lQ뻶tL r38*xdö! u_G ь$g\WzstMxփZ#0V`fo߉/=6[(@$\$6CƁ؞HQ6B|(#0z8#0 !`ʃ@ {ǧ.#0\Hs=?GPeJVKw7U脁6V]JQl͒Q#/vxxP2=r}@[Kp~> $uo[vjexl%"rK*mRJhrՋbvEUEK`wg.d;X'HIK^q(S DZQ>[DSNMTUw>x+)Jgi$5k8d;"S:E*{:`DP!qm%T~a #."$g=41Rȉ:"#07C d@"ah?Ok5ߛe:L^yg\fwV.0)/(]L$nf["-pcC;#/$$n$̝vUvyմ$@YȏOfʟ9#0Cq( @#SzA<>\qb/ p<` b鷪dP`EWtE#0H>!GUXZ6i 1) z$s%`qk#0Y)=!i[k@'Z54Lf`b!@adqy*L1xEJI"ޮۛަ^]u.nGusrY]9%yuZ.C2S{=`+l*+ZCJ#/;6uv䜃y給,eV{ k@H)]L@}j1Ag*]4qz*ҙ1AM Tȓ2$c iV?'!c@OXпdwfW[ׇ3ޓΉ5^&K'-*P$ِhY]a>gҹ5mF̟,bwq %Y m\K۹+GQƢUM%D! U* ޝGEbz5RnB/\YFHDw 3P 1" fRrl^IqhyR;HF p+VХHs&*pnXe[[COPR)Q-&ZRR#/ɭEb6ZƒlJV5KjlZƴfeRE*I}Rr' F@~{c DS^skȷU#/s`M~s!CᡱG5F /I| e<UE/C#0͈t4γ,B]zoM4oËMW2 3N;$5<#Hp=E8>s!F!"9o=v=snW:BD|m}iӧ+.2PP?($&ϳM.#0SSBuEV%{߮+e4њD-4ēPA#/Jb i`DH=\qݻ1;Yl(JPN#5=$xHڧMr#/f@J(ba5%MI]fp3W4U]^*}ye\BgfS}#!ܾ|P3v'{+QqiE~UDx.axdC|_PD=ۿW}8g`ov2c.年ar#.;:#.f'T'#p>w#/qԅ(l#qo ?+k}M9up,li*ÖYcE7vk:.!B)2zl@(OT#.>C@FOIQPyQ"S:1[w~i/7>e{#/N'dx)|U ,!"t-E`yf:dzϏ8b;bjK#0ujZY#.eyEy+miQ0-tͦQ=.: 9ʵ㥷;WeӿcpqF;jt,٤m*a\{략/u KlDexZ""t/m\d\Ky2@A μgj#/r ;z7~56|Zꅔ[9l9k0֧z-F GFq7jnQ/`Qh|19y.nɍ7>wCw{NsoUBd;; a?@KDg"fh_g qbEǪYTu^*a=y[+e<]::Q64#0zJ#0PD=-#09_1fm6|kf[6#/q]ԝf( YӈcFB@wچa+2pwѸ۫uohؖ$F4BjdkCy6p6pgk|&&6Y7,Ln=lsr(T;%MJur"Tb0uO=D&f#/(Su#cMʦ^=(#0Qˌ @xr|W3yW#0֗1лȘ*%l1!7^=Z6`LKvx>ؚs%+kyos,plPC$SGjjFdG]IqB'}_ *~tc:V@3cdFl8!M_.{:/L$:Iɭ{#/I<)SKD Jddhfmt9&4ֻ~/.[WrQV8hd$]gDG Fk.2 %V2F#.d&8&NPR#0af6}_n__#.B$4 |,`tmV0$p 0#/U2O24( '}p#0@1R@Hsi>{><pGYGn 쩶F{L>!Ŷ'Oh\~5BNhS8h!XkZTͷ{Zi Wj'7#Q-Ƴ{@Si;O-w]}H3(BE.iԂ@F (H)FR4"! !R@A,մS0#/Ng:ۉmbG20A( #0XL& p0(잺.]yQٯ| I|[n\tvI~, ߈{#0"^*z\ly-ɖ5Q[ֵ;;*VMGk'\3Niử(DC4/LuK y 7m2#.Bc#/72}f!s~GosAnfm=ˡUyh1E㑳!mbX$PJg:PWM+ULC>A$jMek-FoN"Shӓ%7@8,;~4/}3{8B2#/PR'U,hOi)>ܾTLNHH0NQkCJF򪝔o?o)6fL<(I ]ҍwָ2 ]; ᠄]e46Ԫ F@% )LAMûCLuf[Eޫ:Ť]CmtV7.U1"j^d"")ϕ$B#/*2pd:98c^=*Bei~[&ϭ =E萍>aDO+L=4ķQCl <&B'uV+T63G#.yK␛T9k/ |NIG|ふlg|*13%P{k.\J(c=}ӄ]&rj$+ΐLМ0ר%3W8Ć62h\`\6^jz 18{v2v=:'ѱ~|֓x!@sm@{r;> 0zGi„E-DR #0AA!#0&B.Gy4\#ȣX*1s˖1uD/m>c1m`rya2ќ{HT8"B/@<#/Ce|<0rx( IO#.j 6#bPsݔ84^eIKaX#|aQ:e૳RxEQ׃75#/D7Yg zrz_g}Ts%a^:"H 2#T@+#/j_Ntw}Iڬ|o{c%᪉@O:21GjF8Ve5dDŒs#/fciwy\f,nj7NfsP240Նrଆ,3Fj\\fe\d)ud8s782?^kY.N0]7KŅSÆoLu~&maݵRI1XWS2Y*A =,\>$Q1C}N2EN Xˤ/R<0dj5h1lI9iRt?Mg]"yr4,7#0R[&*_4To#/?02!n6#/ΩсĐLc'0׳:e*V#0瓨iM\KH12v2!řcl]u i5zY̳~s[icXt؂v&0ݩqaϓmF-&j#H9P|N^q,ڋz"Vnkj5lf>jv֯r@mMīv;pɭn}ÿǮqmOt)0Fs$;^GfqpumLow3Mb3#/ PI=sn(}b8}֮fLƈI:Ÿpjc6hזka\uXD`BG҉#LZIDihTGF\iMBG0i'M~NL1(X#07VMﺭde#.&X\llQ'g oWw_IIe|Мcm1fncZX!%&`F:U oACI5$m!n!tîppt9,n%5&G8dN1IA#/$0ol8)CvJi[T싇ZN3]`;-(#0 qMwAy4X1q=2" oaö#/3R-UJj^[M)-ݥͷ9V2#/M![ $nmj:FרE:($e$z~ub#/N͉HɢU*eNE$EJL<1i0Tk!ǨmHCt0(dvl`n%Ms ysaa^0;K6IPY#.4#/Fg1g¢1mAuN2u0-5i&M&ML[ FL14 lͪ]hIB3g [y40!ljl ,WGd-05z##/9*pL2NF9J\!v!>2~ „nlPu-6ʹt:p#0c(3323j c#/N؃v,Is0@?(x}ה7N3O7:rp#/yƟw/x3B>4h#0Qw:9'MӏOR`V#}A/&/a,%b![js#/#/lfMji085840ΜbJHXwZm88e:;pS5xɻ-&P8}a#|n:fɔ#R:1:N*]0nK9, `r#v[q-9!B@GV7ף#.{Hc{Š)!sGZc9%oڪݺq2l@#.BȻ6T! &) x{ѱ䍍+PZF?CEd#/jdz|t63N_"*[#/'P۳wf\tݰZad%a"*k= x(<:Ǒ,#0?`(#.w(oEWϑk xXdERQOO֮ҌuX~lȻf"k6#.0h͈Wc-nmd ƆeSjlB%/1h6#/ ZLc#0i bޠ(kH#0Y#bw#4"Ƅk;OF}}ae#/ ,bL'0d 2#0$",F֍ePT[b_7V\>6M:VȢWZ6uwIi'CHo@#.0~ۻ^,"$b6a$8DVQ#0n8ZGwwA,oJ-'|~^4h6^ThZRE\ϦY0w tm-3+UAL$yؠQƖ:EF'f4 #0M0&0 BZB+ 6e)d#/4V ´fhb#q+DsaږHMnHq AUR3oQ ǒw2v-(97n;!ތL}x\%9vHT%P&@D; tVh- oF& !K-MT^#.HxP]Q,#0둚eÊ1;N"]EY2&DUKF& XD*+%Yv@A4C#.?GdN3/K`L1f-iP? MHn GoUN#0## q]gRrE0;>/#:=EݠފC()kL[#/maŰkppsJW3e<>6E;bNk3-#0!%@B-AbV75R'wwDߕVsk-V| #0`InĐApg(|Uev#P6J+\9sypY)7y.3F0X9ضK!SfgjޘА.P@@aGF BHX)(ݺd <HB0L2 Q$أJ#/L@c8BĂHnp]сűMMC(G`3>DW&~#04E`VA@L>'k <1GAbi%G2E $o_*رTmdV RA$Dަh}*>=;ԹEßr_S`2Kq5:[: 7VVuVoj9l9VW"ɽ4M2eZRq;]5L4N[lc6h9aNID8) ms7a 1%02/4O/nnHV)"$27DM̗CR#E5#.軔hv:G=qNTǬ+Lh2ӵ:'ap29armwp1#0)7l315ędgU3U#/7+oSik9is I2dž5S9 %,o*(kX#0%hndآ0_Ŝ% 8S #27[(",#.#. Zb ,(秹x˕Zk[rn- )`6(Đࢁ$HdV栳]#0TW a-X"X/,/Sf.=5m^|797w۴#6D#/$ܐ1q+V2S$n3AۡWm]#/һ+v2Ӵue^H![ȱQi*Ve?٦JD)E60"h)m3l"lmiu-t,MifTQͯQjhJlҐR[fTW&BLCd]&ACDnm#0]DJU:#.2h#/_8!w I;.<#.DA DW|I#0|?LTeFo2.IDSV^zvMQVH]R{v&I7mr,5LVuZiX[IHiK)E1K-@.)lbMJ4ON(EWu%vjSA36SMjKXSF5*[mkr%^$UVdI"muII5-w4MeMXUeogm*#-W^w$2hkmx.WLJ$j& dp^ӞRVS#. #.vh}>5ۙګVqL&CTZ~1S=LtYmTe*$ L ͥ-I/_֐+fkmQw`1!fD*.,ȵDdUJB*R"fH)6մSHfj+KnmUKZ[51KI(J5)5Jm٦mdJhJm[0"LbZ E(JHQa)M"jLѰQX4el&D4,lj#0RT Y"ԢmFm4#0RbIM2M2TU65DU#j)bfԙ$YjԳY2hҒZR,*|-ZiYY ZM5jRɪ[{5yUͫj[hR5iKVZWi<Ã?]6^9ʃlnnՏ#/HZa;u9J&3y^ADpj)$2!{{vX#.Bp#.#.-U"W-I#.B0  DKq5tzVb|s{`\$0j<-)O{$v=NWhoJ~{6@=4%ں~`s6feF6 *1h*h4C D˱ mZ#/XjIZ`6C0RXԍ)Z12$(8q0mjCZ[])b+ $Is фU݉IL~z!)T#.ltPQ+ѪQ?թrE8&Bƣע ڀcAi·h%c4~m4z*)/3]g<&18#/a .C)JcJԪ#h`\/hϭ[EIb$> H\Hu#0;7p۵O>-І2KF{SE[$WUb;3y_-%̯ͺQ&&xۦ, YS*#o׽#/̛CpcORR9r^2&YGLM-#.*ĕ?t0h+B{ϡ 4!h#/6ĜS|wVd֙id86Y`Hm c@6#/5))<>5#.c(&P#GgkgfkZΝPqn\6HC)<ZcȨ4iA螲ps'O腒ˮ!Pl55k^t:gaٔJ^N/:9sߊhm$,"akLp[.yZnj/:p2@H6Fp`1(g]RUFe)b#/e"Q0{u,=݄'C[ћcݭIC`gĊ։rl7ug}uh:(N35P pC-S*K#0lnCս5#0QpPP$o|yّI]XA:4Bz'n3|+t# 0-_BI5 *5LdaTuL~Be xK0L.E!0yrRm&f$'zjj%_ פ[ZF{wtS%QcT*iF+JB26k[ H!GtW]Mݺl]20hZfjcxy21#C`F'))cA?+p8=>-ߣ.@( #/}h@`UWH5|{kNn^VƥK/:Y1J2kźKc -UԬjm°DD(ZʃUX*HHq "õQE!c!=0Tx8{~9Z{G[EQ䆇PbPB5*m*_bl#A TbE뮯Js=8#cG(7 "H+M#.^-Mr4[du2n[^-}Kk/N6!U5wlZw"^ݚ54^n(#0IIV,#.mTPG8jV?^]FhL.ZIY`TR"(^0d&Xf#/d(XÊ-22UW{q#Ȳ~Rn!wK{7($8Hܾ יN#/0l+1*E*g.RuBq.*\IpD.Xs,tO/T(i,}op5s!@JȻ#.TįH#0A4*Ucj׼Uk)WQ!DQ$pt<f@yueb;\H=GE#.X#0pfhQ%Qu'R>Ezh4t0֙\?xn^c9o8f(3N&6ڦDt֯i"D`R‚ rPAR/aDU#/|A|P:x#/B)pDQ#0! QMME#/ -E!l ?ȃ8I6tt9 trl昏ѡiؓhp]Z$F#RY#/#.\ɋ}6׃l * WgWB"i(@F09(ʢTHfF17:2a,@:邌r?c*5)0;`-]FkKx>T[MZʸk2P!pHxUϽW[-[lԔ,1Mm-IkJMʙig-lE 2JESŶUR2eX-(M46ض4[L"ZN;%B&r#.z?bQQRDD@u]Js[x6#0D =G_#/8#.u󵹫1ss_pp#.u?!q_fg9u5̼ku+^盂|4 E!>;V E/i S9 8 (TU@#/jrC`~+bBD^"(" {R *{PA{9(Šo!qxj *!fb6'&ї:˚旬%\-r!\'p4phikZs|P8=:A@8-#/WM u`2(nL88!`4p=XO80+#/ $3Ӑ)L;I?GYQC>egjUeBbO<mFiA D?ˉ, մd$CL[ptLH%kÎxݿ6tr[ 9+tFlhߦ+/WZ#/˫KiQo[VMH,H(@XXw%٦1'fqބF *HJ7먵y2!q#0U+|+| 0džu@ "P5AUK-! 0@FBaB! BkV yj%~-$/`l$r P"\#eP8k9Ɖ&(}WLys@MzcA~is2Ib\&p5pMo7#/L$80rGSBg\7onlyjv|aOFzMvhDD #.ҁ XQ#0JҔE,$BD)8pR։#0iy\Z#. v;ꨑ S$`Q#0mUbOr~d.MPQnل$+M0+NA 6;6Z*5ˊv 85W#0 dƩASQA&Y؞5\[˽o**ѱk}+R玓yr(*UdhDR8Y>#/q"!ĪQLEBI&Ua OȆ' h%Rrf5"Yj}>::}r+wr.*{j-@m+*Y\-޴wf 9Cͭ8[GJM~OpdȄq3 ҙ6mZ [S)r-މ 5,v#ɟ0#csxx.(gptCT<"ɜԀˋϴ#zJXu=J;jv86D-5_ƭ58 FʴYFP>vxgg5qX[5PPY)$gCU@#.E#/ *V9Sݳ,ݧG_C_44wR`Yr9!IdNѳ:聦Ap\!%؋xO#/YrroCYc#.CGh346s&iQMCTfIUY~gHAY>#Yg:gBMz0VZrgVԮ3İ92 sۭgs6whChZ^+'O#/HQA#/QyPJ6eCe7k~ #B!8#0dq'(#.H T[ؼmmQVhU4mȣ"Z#05R*ka.G~}لD`;H@i!8.U^#ZH0|z߻ &#/8;YbV"`MjVnaLgѷfMu?EzuWCd7MH0I#/5`L̢=Za0y0A#/JGiA`RWh߅N?^nŸ`kᕇs.`D~gq˿MD=4=w3 V1yQ!E- jJ-]t(L:"Wzg@,Dr=D ؉I>zgL(MA < E- %(eq}:h@F+̑b$rw;538  p7$d2A4UlO׏;k<1|h)['<՜`X*nJ?C=nbÕ51KDL%#0Tr١PGQk f/X  #08>OB<}9 0B=t6{6S̿*Zh$ju!L2UP#g!YIO8{cx5XPCEE ltʷuR6fm MmF4/#/YC76r@b#0cLL2Rq 1 7j'8:5*`$H5U*#2`|H,N5Ji-!P? ,UZՙs|s#fVt3ݤʐ5\n8+j1h(bĨT` BZ #/6Ʋʐ#, 0`QFc@*#/JJ 61I#e6,3$Z^mi˛rb\杺5󼉢KPܷ뽞d56R7#/7LfZ4Av˖!U0MR0wIQMbp&p5Lb20Ŧ=zb$+^QFD5B0!#0X6fY-V-]]vJhF%"吴 k6"V$2)#0riF%J+dEaFb7H1JЇ$xȜ6nȆ41ژ7e8Da2fR7ce3 Ƨ8ͪq+RAX˃yZԆHLL,#/2M4tpD{D{T.rᜳ\2h}սDQ IcXcOJXH՛[F8ZNԍ.i\6k1lTMX#0X>VnAzgJspGL}W0 {'w BYp;zX_f_ߎ`ر3o',+#0b&P-Ɂ D$ͲK.7M%8k$4$ör!XiUUG-/pqoM}G9fChF R(e"#/d\A&(턍ZnAUnD.%<ᆐE@iD@\d$R@(1lS`@#.a t@hLUU,Sv D$ #.#Q{''F ~7oTZ,CL#E#0{=Lh5(5iFMұBzm*EJhFUGF4<5ϙ~JYqĻ]›SuR"U/ )4O;Ǹ1CfmltW\mL#8 ;]jڋ2f8p#Fٽk+:=>ۙ`r#/.#/k 6rCC:.4~'p<co?Fvu曍"{f$O wFPSКSvTD@#mBbLC늻s" \T(ZH>^\6s#.奾)+A41wdj>"'e##xH$mVWjŭeym]B`$~>MPoQ4;UZ-n-]X\jmʻ2mE<3Ib5#*m;jMTkM&VRI-,<PŴ(ǨG$R_)5m$0P(F-azI." Euhj k#0}[m"0 ɶֽEFR_ꢛ(LҕQQ1Qe`ѣf6K23TшڙƲ-HH#.Cqu`Pde_i"dLk^zIBB "He6_wޏ_O'>ttǯ[|4cFx@G!( s},Ѫ[xin+N-wi)j܊J[JkZVvj(JEf;qNĘC(O0d@C(#t$Ul\Is$%) A6{T,!-(GJ1#/v κkfֶ!4? >ak6ƹ0{Ϣhf®d2,'4a#f]7Lf7?U61I0A0ftpI<ܛ};LxR<8ڴ! 6xLl) 6|U90NP s'WIv6_7{hSK͆dė;[AG#/=:.كnl0;Qf5mۧ~{@vs""m_m0 *iH Mߛ<4>$ t#0Fv#ߠ&6#m^D#/45A>x@k}AwsjQdb"d,U#0J2;V|n;#/!#.$Tb*"B吝ˍqFҽ{<ӼrJ:y#/Nnee)&6Rxu6K& snW6yqq\"x&6[W.,hv6D;mnZmr3I5wtnݙ\J۠]eγhh-u۔jNڞf`$A^;8(#.;!A)PN"X[^h'"Ӧj?pTA> "Xqǻ}}h%zu?7i~ jZƳ0FFSF$6%ʂ@ Tg#0#.ί)","Z2M^_~v]_ǗhJsN:YX-x$߃ScM hg! aĉV/M[O:1#L*#/֭|n{U^F"Bx0b#0#/)k`&Q@L`BA.w.bd"y‰he~6)LaF1X#/>cɨP:.UW HA@,;#.ۗȸXUmSjF4@ HO3ɀoCRGW諸RZf0$b$V! n#.:fk33\]zअv(S@ 6@I&L((3e AIć1ݎ2ܺ#..pVkNEV"#/#0TɠIy!?UKcb$BI86Ȥ_^ 6R1m4qۆ_\Pq! h#cI[M6ޡ,!$0 dTwXd6-hgG#QYxUmZINkCVG4C"O[xm4;AA?@~FJg#/"TM2?"#T]iݕUMjAZPB(ES`ſ'#.6s#/!߂L׭?)&BS4imXM( 栦"a~4n1+ԠdEQ}}tS,z.a_{3#MF8ZCD"[b[gtؔj_5Zh׈º5PVCby*\ZN8׆!#/#4ON'n%qWA#.,ѣ"%-O#.!߹D8=?#.bb+@(=gwkq/Hh%vZ϶9@Ѽ#/3]7uԁnM^YF=JE80DiivfI'd0☄A<'^S+$wwc#+D"hx*GF.SB4"$vb7:VPUz^=/i0UhMyt#.hT շL?Qg"йgBso~#]$#lL#."Gq^I|L5d#`n<,]&ah# H}GmNj7E#0ÙF>]LȘ' CJRýՂ5B>֣*ԪͯB>Mp+$$D#.D5}*jե7,B|Y=!#/10!ُ'l+=#/5Luf[z#..9#{Oj 4c;(L#0 [wsGlIɣ|SDP(ކڞj.:/:$An<0DCΏ=%&_>VkJ>Glrʳ`:q|mE1#.Ѐ@ &7N l`'sMGPGpv )hV! 8-k+)"cE$lejll c۳2JDaMCH`|cYذB8y(AELڡvS(ғ"3̩R45 D QZZQ`gTƗyPgv#w{/yJZzv5ۥΔlmEVvx#0>QI@逍,HD De]ӄ@!5 ~w?`UϷBh}fV>^ERW#0U1ȹI#O~aܮp.4ЄӧM _Ka -H;9-Ug䏗rϒէz5*j΄8pFJ҅+]#/a1.'iv_B(}IdtaݖcV*TIbTdrvM[lk44%SQMsʵ$s\.]4Ϧ tS3Fbz'd mf0hmLBLhb#JlBfɰ#1f㍂ R,d={byRMv̠0h4L2m1cR"(`(bo~5sG1SO8s!f #0mHjUfj0b]d=9dȁ%l`znoK0 kUS; dJ3":ZQzMvzznp" ~UOƴeM x$L6x>d*#/I#.'[%^^ mΪf鰷6!f+Dd"뒛۵.n;VB1 )FP^/aH0@ @h#0Be "Dhf(`BEFB8.ݶ#/Z6I2p*mr&eFZb/#0a"b#02jJKULe3MW8Y!xMh/,o p%G"R_b #/qSFiXU7* Ń Njjh\-!6Z#.$z#0jJ]yD!w,뷁ͼ"DZ$P D|I#0r)i"j$[ji4iLj3SLlkp%+*ܔ#/UUZtGfW[k#.@W#0%]R(܂#0YmӭJ*7JQ1ѸP %:{:ycb.*IvCJHP zW2։Mm7DJ(|f9zƌ8xHv.riYBH22j5 }f֞AwTVbȗ# 0mvb$;B@ވiiYhڋ'c ͛$^$֤)QĴxQ4Q%G#.f#/%IƨȆ\Ev:#/D(A3cJjF(晜Ci4̠/#0u<ah.5"js+6"6AԆVdeJZ &C#/̈́ bh#0Й"MXSIȂ Piѽ@tlU!̚px#!lU4M#0"&com }mΠc5T]2t iE/Lil8 QhPD5qen#/nd|I#[h5x#0_3k9Q]}XPXѠܥ7j"Bz%=0j| P"ՖLc<ڤ#/Ӿ0h""IhlM34DA#Ih6(@ K `#0AD*("#.24DH@>Ԓ@O;zDRjVUT?ɫut:zJ|jQmBٴ͖LͶHYD?J~W%RW݃#.* Jp #.ہS2i ?[mVjV]|uS"kNrDT#ugiPX+E"Wg<%aH7Vӯ'zhb1komu҇wG֥uAcht1%l$RlŔ@{C)eR@va##/AM5K᜖M?F`=&mvwƸK9]x tmyA+6yOxjT/; Kޤv|3W+h#/WAT>>x*f\NF(Ay, A2AET2i-:Jv%ˆask33r#.ți 2QHa.ڋ 5F7:Du@q5okmMo#κ^6"ۊEsk%[ƭؖkW-Xͮ[tՐ66mk&s[\܍dڈh^,U Ǥ2c,st(Mw3D#$/dwlgHI#0ٽn" ]ݻry&. A4TsH"X LBl 4R(V W0d$M D$n" iAG`O*Q-.P<lFFմJ6A 'MDp AowSoT&F!#.Y,#0րCϪ#01j`>^)L*T^֔|:D%/@왗;C0I@NCjVMs_*9=6 Ƶߖںڿf$ 1idi6,Ы%)II)hЦZڋZZLcj6 ~[Z ac]k9kkFCaPB27n1DAP#v*A pīEbm dcb#Q¨l a)j!E#.F@k#0P(c>՝⩎S¥ˣnvbڞ)/LD@UIfh- 2@!$󳞨c\XyS3Z\E*WpI_#UOp@S#0h7XXC@K.-.1R"(bJLA#0W@jƲƑi fF#0 KF #0{ӂv߶HkwҺYvTٙBKkW5T#.!pil@{<%MԟڬDWlO$-wC-dswh]q>VNw)O;-ͯ%a]nٲ8/uD=Ex/YuPjBixQJ'*v&n<ݙRHdwQ`ϧV3a)GZ*z\km N˹4gU\|xU3L,3qsZYLĒ8n]@mqW;[p C2*&Z${m}$;BsS=}^p5Iu&L? qT=n0օXr5hCj$*аkǨmK`1ż9qXiIypC֧eTQSSNFj,Tc[-{ZҶwܜclݸ`b\豄Q<_uXLC[ b_lBz߉hYO3UVsloMkEmHώe-a}V-_U=wX `֕f#1n`C4qlU)XVS"}EfadR师Ab: `Pnl*9fK{ ~NX!' <߂(;VL{U#/>wKf#0LL:!r U$;8ut+}:Z<qbrDD#/cM.dl*k8V66ߟ7!#.iY5XEhzmISmFhq(lJ@l2YZhA#ried"EP$)!"MUmy&Ƶ6ģ#/#01!fje"Ȋ vXkAQUd*P|A7LYώ}(ơxHYvTEW񷍹&ƴկE[FW*dġZfo:U3_ugC5#0pn#o`Q 3W3+[hSn.Jii"•HRɷpJ'B]"C2ST[i T2۳J $UT@)WžMx6OŗN8bdU!_8dkb)ƳZ ܎go?^W#.G7wxUg{&rkm. |k钎AJ3>3{p1;0M1cUSCla%y s UFハj :#YFuW HH5睫WԯCs۲JJTZkjkV#0*_z࡬G;_]hjIVlcL#$b&J)Q46-jKj%bJɣ fʋE#-#0iRlRIQj%"Z3))T I0 6a$H-}_~kUNf29[n]n~GCWxBFo@x=^yT-HP#/aQ*ːӌbq)H)#/_Ga"#ʡ#׷rAWaoZtnDhQ$Ӆ߬~I|NCS*(fҧH|ކ+w3iFax#0J6ȔF*Zծm"BQ3HT` QJ}a,˿8`NJ%4EJ>VEŔ tA)-o;^fe5ٷ))`Kdt3RSAy/D"4&Ti)P^Nez3%C/D<50^eAU ^x#036kv\M|#F~ٱo7#UJ;2M2:Cx@z7V@Y6$#/#/.H&A9d$HQCL)H F7,$UkOGwv!ꁜg%DJ3=DHFBnD :U| KC{҉u:Dx %BɄbce(Z<Wipϋ6)N!EU819Y8*6hdhfx#0#.)RER.Ș8(U`%؁QQ|˳ gmȷzԆ#.UCS(fA)0e Ď&4@89݆4&ae 8 @2g#3c6K$#/M";yyu)1g|Q`MyH*D@8g2, @JdbfF#/)d#/Ɩ43%cj/M‘@ˀ23@>޻ѾL@]vQ!69YbaH`Al0eO?vk#.tF~vE2"97@1-$TLNIgl_|%e38t#.a%筻)1>A$rzz%[36[s.LBCGM(D* b5V* e XJɂH!QyebYSLRM<"TSq4W$yۊPvXc,2i271H#/a]VqU(*Ş6|0$eL0mg8pp$3k:hU=(rMiqm#d7mX)z:9Ɉ̴2}clj_Q91260o(4S4Z ' )nƱY C7Ctó"dY Ozg--<2MJVp cR ^z\w[[iTF= :ӥ,y00MY`iFkiU^7Ms.!\>2n&=!V:hYxBDo8pglӸI R B|֭]5D)nt]ʁz#WC]&&XE#056ɛ!;ncMK|`iRu0:ù_ZyA~SZ`#gʎ#/v꠵#/c&"hf4oJC]#.9lV"†04;b5:kC#07ZH+BN\mgY[6JcV6&@\q5Ar1X)7k;4C3&DyX){.&"msMB\ Bf]-Y[Etͤp?;)D=\˃ȥk^xi??Lt* H#0`9_#0p{_5yScPCYj%=(vicrGMFpL#056Ѽ߁`LRkPC6 Jb 6y3XS0±.qQ45#/E8p)wHMܭЩR&/Xl846ӈcn8,풵VL82#0@Rf L$hK:mf\HIFf#0l#0-164YeTsV˞5znYk|3ͻr:4 (,,kDg=]' ;۲id9C4;a"i{U늷d(gd CfHXN3b#0)P\+t $bbf$L(6PM((IWJjwݲX^Z2Y``b#.v6T0,*0&1 :6+W|i((0X4ELfAT!$b)4%6Y* n03,UDMF#.#/D#db*eW%ڌBʃb(t;#6.r&Q01(oY![l&]1`SFƅBFj(cW ꤦ (@SD^0T;xq`lRn8(#/!!QuLʅXcYQHX"O<|OySk(ףIr&ۧO`3 |9!! &E#0s"l9+d-4ʱN '5.iBLeQ#AnKH9tY{1ޯEFGkEi~-Gq&i קyF6͉lvU]y뫒j"x&g.e+Bod%TJaq~LJN֢dw*D8Uj{׮J/L9;ݱ1#/eMZҺÀ'9 @#0Ő.)}yl^O$|)2UqC(V1}召A*2%:"eYd{ET3l윹2^AO:*,0c#/D$&{j)xNVX"##0dU FMNkCda,cFBHR bA4`C6?]CR#.|#0pJoJ5ήkiju@I,͑f(Ѿz'k|aVJ@,dwDdk/%Y>O'I;[b!pU+D2S#0.$n*fȉٮ"Po(O_@r)x2IcwQ,>/!4wP}aa+Xb n *r]˙f1|1)Zb LG2bj}쩙67rpNt'z :lۃv46h1|k,##0I3v^;22"=}0$ݨֿJRQk+kJBkS+kFQaeƐD.@m*"^,Qd@[ "@X!Z#. >zeE!Je(DCgU7;" , ,Ȓ:/MJ߆f!E#.#.$EI_oӖ>ƍqg@.C;q֘:A%{㣑RJ)0[d@c"f&KMdUhH26('`ģ!J0eac)BB 8oprβ QQ׌Uܥ#/2,s4Nyib >UfYriZAz(C JG>ᡏaC6(F@W#/.}K=7ćD$PuS @DL ӍK`d/G%0E<&adΉ:(cIT:CCXn2fKB)4PZU^"D,u4)B<M}8ИOĩ!#/Yu_Ot$@a"'2 *PRuÀ0.:K>Y=Gp?#/Qn^Ik5S6RMK-1)AmY4"SmIh\g5ĀŊPwgz\3_vl;CoD\'cXp " >Dl ǠvlRwP;D &dSB^4̂IĢ9ծ:Uani(e5-/PA@& ٞ$0f+쁚;H"1F(]=h!Q HHTTlmCK2U6m_EF_}QFҔڿQL$C_Eą"6vԐ#0illk#/k21X(h2ARPED@B/n*}>?uI<&a'}GѲ>Y5\~YAd;{0#/XNQIbH'cu^6#0):gЃ"xa1@l" {x|./T֡d)@8:'Z BT1QkRZ5m4AIA*#/M6H 756װP@)#/AJ.))VEeQWPՍ:]zk Ni`Mǡƅ8k!$,(]$i%ޮ[:Kהlci#lCP\,|Cvi~^7djY%IF-T*#jj-6߉QZ(H1UPNӟ]r$#l)#0FM#0?9ԍLQꢚ&ͥ @o!Ϯ9]%R#.$PBcZ[A(j Vf 2 ##/jǞJHj~?+QF?}q)qJ)(rMClWW4A'ܓ"l#0Ҏ<^ٖSDuID囶 ɀQD(]@7IDd)R޳a]ͮ7Y5*䨷ݙ]svU2Zl iMYT4XXH*CmFƨ#/6޼M-RezV]y[oek-w-eMtG4<`![a *#/!4A?!#0 "œp|{WKѳ=PZ)PڏIJzLA#/Ic̓1xNnxLKj.E ]^a; -DV>:7dC)uFB'" v$ǩCURWto#/#[faS QrFq/ }z{I5:RԓGmVD]߂YI/њo _CJ˺Rz{[޻@qBRCLTxZeVoS'Bl3$e|'5J?58zVuc2ꌈ?,z:POT>D U7(4 eTR93rd6c3ܝlD#/L";6f#0 _=S~c#0,R ED4RzJ'^ی_=ϣGbuwt/'8ځ6^hòPNlhs-o{Q;X Bb89TJ|o#0j'娈gN֯Z͵pC'г#/S2K̈/26t[#/BSG~T*#/0c|:t:D#DF)5OxޚAdIkHHtwC2@#.0ρo=Qc8$${E8Q">y|42 os2V#/~WO'Mz}$Q'ۈM WQ)y #/{ⱔ>Zf@e\;医Pݖ]pƭW\ب""#e>_7߇|\8xo?{y{>u0>"<= #.)RAWM*\C(Vhت+ h`Sw_ǟwuHfgѭ$f J#|2k !Y5w² ?ݿ~tP\!@zL6OH:!ќy$C-_;#0,?P=}#.d?o`S<5g29?od=>{])\FZPQ`Y w2w?c7<9NI*]],Zc[V]ojTԑ#/{Y6548CeCǒW0gD"U1'"a]’p)rFey#/ax0UQi&y]ϯy]ǖc:PU@_~[)f#.s2k#/bii`DJ1r* * @(wQV g^K_.hfseb!&9kG3~f+P!FB%LjJlZem34#0##S_=W[mpP<4>sE3#.UTi#0Em_꽞;T5|:| ϛ>i>o+|SYs#ƓSM=kJp*Q*yWoW l3#03=\we ٢P)RZ#.8c|M)~d:9E#R&) oK#0m|B}.{_E! "R1ಹUE+o,Vi5&mk6ҍ^V4mRhWk\oԬȰlPlj E22#@!xn`N2Ap'PQsp]fO=I/zoV,}%ƒH{zCۏ%R$Y#.1J;GGWDw#rˑFfZ(z ,XڎR4IJ MnڮWұ6jMzkz$REANw`;z@2e##/ش?$q`q>b ~?SgIv!H<#.mMDB Sbe -HyW?i9q{~t#pX]yx>CW?{?e ~Ԝ~~ӋiSVFob#0&?zv{*DtN$RZJqTE3oU,#/L;qӧm3&X߇hTK^VӘH0g)b;WzX& l Bn)R ]ۑ$B M'#0|!g#.OH#0 +#BZh91AY&SY[AMXDPm(¬#%00e(b >px#%P#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%#%MsmY]fӽ˱JUJ4< 3{٭]OGw>j{mj*STzf5]ۻgy{z [iV_yC;tPzzqn>n{7Q'0#%#%#%l#%>O#%O@$#%m2ڤ#%(UhHAѦ)AA*A2"ձGZ+JMvR׽kD}v3Fu)t%GCuJmW۷9_v>nGa]Er;%wmgaoyy{ͷev #-4[kfTn{{;cdv))WphDQOA؅i0d6mv>ϻlb-:Z{\7 wBـ<#-[a}g#-qKIcѠ_vZfaǣu{mƬ͵icwn}^{9qtcϦb"u#:wmk+L3{וwsU)2'[[zonU[Nß%㻣f{k۟^`z;QJPQDHU#%v]b"ZwWuwFrA˫%z:KJ.^κݯ(Rݝj#% }͞o|#2͹wfEQ{֛{=]Ȟ:Ÿ|{z_MJAΗ'G{#-{w7{v }9m4K#Qgbmj&#-^:oN\9.mE4uwg]u0Cu;ez{==i(kQ6׼ӽ#GF{{{u]O<Ͳk-\uh AT]U5bNw %\._|;y#%zCC^#%#%bޙ>@#%T=\{ y16w6zwqff+uv vUlimWYHcp[[{q^Ogկ.j{g6gQy}GeٔvmglDwݶ-om=w$_4#%#%#-#%Fɣ&CMM6)($Li驽 @ 4jjzhFhz#M#%h#%#%#%#%#%A" DBb#%J='Jxi=G#C=@#%#%#%#%z%$=OSM&M#%Hh#%#%#%#%#%#%#%#%RBL%O2O)E?Tm2=5##%#%#%#%I #%h @@4OMML# #%#%#%#%UZ\_f: P (E#%H #T3_9ST:k@2S6Elj"fzT/vofeD#-qFu(շ} ^-Jr˃;["ã#2X.)$#-ᱢrj@gﱣrIB9\E̡օe sL?bۜV#-8gBd~ՋN؜ZHdmΖv/\ Ȍ]&s #hw/^zU^59ܲμ]fsW at+xn49#-#2`ZY#%b3( f^呛sFdJ3.PdJzoP+@txîy4Yt\&&ASM_ս>{8#rEm&Z"˷s5ϗ11vAª(pAm9%F9Qƃ*; cL✧ ouq%_6#-).8&&&9Y.2## y!1+i;G+7y} j$(aZ8Vp(^&!УE;F-i_jR lB/vvh5DŽlÿ {`G,Dײg|S&#-t&XKzrW~`c su$߲)kGAF5֔7f>{'h@bYl#%xgv2GT!"PcgH7>Id4@k8hW+CLo=e$7!gvA?e]Z]LR/98s\ug'۩HF#2I#=651(C uop[uBy;g\fH;#m5R3HX\#&Լ(~'A#5K~ؼz*Gs_K|ӥ'8-6.\Y.[sƴzm*'ܩ1a?g[#-VFyz-1c$?wњXN<^.:HtFb>O^-DcL!2.sեbZ.Xh솘#ݕ EYϩ=u7}pHFOkE s70c_6g\&?8N ֫呭ɶGGmvca gb=!9[ţ\]}6y!$"=yґTc6qF?)u^Zbgd.wc7<]^Gq%<^vSrֻk]4 kn5zٍM]V6YǑlw?~f;kLgًlO]lл)1Rk{#2((.ȩ01g) *'zu^o>ˣ뿬!;/y#uE{J'AC$¢|EAE#-^r~ycm([V=5Y[f(/rHxqbr̵f~Ua7#- 6߈DϾsRmcg0WɋzpoEh 7I/WjP*1˳~5ku1iZ&L.}0QLsηM3cmM;,{i3&‰EE&a5tԪ9ꀾkՏe(^!Z6u<1TSbz?#WfA螆d\l2{c(x+ˣ;Y}Py#υG#QY/NoK5FaIwt%׶ÜC5݀dVwsNaB`2!7aҤΐ$Mgd"!Z3b#22,2GK1l6[c{VvTœ(vs!^Ln9z &E#-,Ǡll(˅q҇jw7廜~Otn+jeDe|IU:"SY{]]N~Y֦TQ+DFm=ӯKD׶"rPr8Hcrf}X'j7)xdPE-:4tXıHot3Q1\jHvK#%6'Vݻ×A(|: @*.@~S3c4DD;M6zڸ[|E.g׭]e-C?je7T!?ռTG#2M.r> qǟ8*KudpQzX-X}f^mHtJE e7+w#-$Ed{_qkEF^Jk MU"2[z">[Z6dg( !c,"v ta_S=m$sN'۱8"G-҃4V#-(Rv(*[Qp5~3mc>{f,rLlckϖwWp?ulFmX2l7gUy=d?XJ?:֔M3mdyj5ZkHNjDuqy+b>vp1;F`M71+*jۻsxE.::/>mX ModIo76l59Dž@KOqRI.I(u\W#%~5!Eo#%M@/ӁIYavVd)Aеz$[mg𨜒>\s9ĩCį|`uN# j:x)Li6,'IJru<3oӶ24իm-G z5:sء$wOȋDpYQ5$@5||",JK#21)!+go\v|b#2>Gw܍0@0ъSoCЈl0mY}n814Ш"b*t=lQT1y%l333r֦B2]oՇ$,ß@W3h-\U[CxDAc7ZΕ./\S"2E_#2:3dtH!,҇fs,8HnǓUH'Y1hZ.4TœXc6{ǷJ@ƎTrPJ&Þs5Yζ/#%hF/Rj_ yy~״ʹljo>fכvbΚQb16t[@9sVvoEvſQ-vŮ67Tsˤinj|p9T_K?GT#-#%Tc(gXɢJWHI !WQkbdNa@R2+-cw tD_jbۣ[wrA|*s ?R#-wn`j *O#q)oۻ#I.?Y^4v74pdnDEeWy?#% #%A_\& Ha477#2b*R?)IqQ#2<G$ ~nQEH V#%@ȢnUiNɧS2\AT-#%8u# rj=DPȁ owOm^w_#2wJD;yDAhe\1؍clw0GWT;vS+B&!B =羍 f^dRt]Xo ; ~퍟+IAUL3"Vп~D8H,"c#209ke*FPY٠& <+]+fT=PFQ B#2"Xms \UqōlҳkX=6$e7_;E3nݭ?X͙#=yWKLͣP=h ^#ئϓ;Krvdjb ?tGec7v]Pw?u۸yz)E9+瞿*.B_yz+2`5@:GM JI $hW1-k~Y;6Щ"pSjGa9}1t W#2 !f<~~Rzo/3ǏzrHLwp|X3[+Y*W̿B9~^_=gA3f5 ϿH[`g0,8L[@oY%Yq bG&n 䔩;f3t@{/OFZC=iO߿p\{tyLD[&/vӴ7>%;AbKlzS>=*%ưIH&oy!GJlMF`,2 $E{OFS^i>xl=h m_KUu&(7.qTVB-P-&kEgG<_,۲CG4CUL5#2HC k/`՛j3F#% $϶>x[}GwV#%toВ+ܺ>2&k*,N"pLSyEAq},CaƩ*-ĵ5`WߜSz]EiQGI'Dx6D.*:+uS[d)z]ki_֭MXaK)ܯv6sqO=1q;Pʜt;nsmDWƠ՞W[L);>=#*!_j[5oy#2*ΘAY;=l:X hj 4z^oo^2%Jy2z֜Lcy4kZ{:oud&6Par1r ߋ,hTaO^)ݞ|f:MXF4I2I#%:!8喝_#%MM$Båݛy;[#%X<U)7#%W4T7#-B;(@mpT#%`=!#-SX#2DCkG^n)c.AV!sPE`AIpE,ҴPUaiZ=jBu3 $l2U!,1g-  .%l¶Վru(ݽG!i:/.a/_'R(<31fYXVKD"eL+P.{y*^q6y7t3ߦNI<*(~Q gPpbA0'\ͅTfxX6|آ^y/ 0QCZ#%g0aK5h c>E3觩N}_9?X!?no[͉L%r&/B`U>jW{uL*MYSkQv}<,x_b{|9,Z[c#2LW~.nbEm.^l RdW["9M䩋"Cwa3%ѵC|KKԗZm#dnĜI9hM9!ǯZ$1 h$Լc6PYll(у#%φ9ȝzB[zT@#Q Tk^{zLbі*Ci6h,-n_(i` pSr#-#%Gv4:SC§ҮXEdliHCrAq`asǗrșʺ#%4 L1lͺ-e'vA;U6|fVA"A#Q'*VpR TTyC:#2?(m`tplvT+lݡf$@kVfp[xm&ǶU f޼I$Z*~b 4Kq>\H! `EX7.ap{#-}z0}!8uAz4*a4ADycQwٗ j#2RDtUtY#>#a#2\86ނ [+:+x#RD&uNjhӥ3S= #2t#-ENXCBpdlY)cQG#-u <] #-(F"<[LxbYSKpaۨf*Ȗ8[puhFǦaACŦdy6^0hMC~kF9(nsB2kL1w-#-+wqeK # Ϋwi[ȶe&ʑr a+!|}7[oK!%Bb3h"%D͕,J/14iW/Gmڊ5qM#2i#m+Nz>&Q?)J ޔ1Cd%0^:wԕE.a@*#-I}ZIx|FEmq {>;p\DvLt*9)Iy,ϡ66$A<`wOWn^RaW؟5DUT+m>UmNOIDI'eoƓcl8z c {%eo?_ձdEc`=N;3hLO݋Ih)#%)+?dIÝƍɤ~7xG>W|=g#+?X1?] w>R4#%#-Aw.P!ߟj? Ts"Ս.AdîoR[J7@8!l.Qj\[ξ ۙv.YQ٧;bg#2:?,i^#2agS6պq7R}>uv4#2zC+}[EQpÖp L3er e0(ož[sɢJ :wgp.QvrK)#2s eHqGʋXQaT(_xE?xç&3D0*'鯩<:z \hh&v';~?m$3#%z*JʔSUkR ~ߠHKdpY֢B~zxeyPd+ʂJXhobȫ6 eOIH"""_>/4^ȿ6Z6#->Sē򢸍2A1BA0zR-7ڽ[u#2`J,o_C\bWάIզ!=.zѯ+X}r:Vve~úzo`?,#-pH9W8Y,DZ!DBoT;żRԯ?<ӷcs"@2yo;}D_?artU:=4Jj~~1Se?=@Rʳ+WU;ȲM#ou;4v}7V!c/i>NyyIB:㛐vدZSiijg.asvo`#28[|h5^<o>i!>r $gY#-t;vx⦹ hnvL%#-thÕsNzt,}Gtfp9/s1OG׳Dmc^,-z9J5P]N;eD.?/k^#-צVWU/Q!ꘗ=>h7O#pK,\׃@<ȹW4?zW4IwoݿMsKnn뜷ql6͡ܡ1ƹÝc!,;}5ǛMN()Ӷj$~#2:fW٩ʽ\~~񃲎wLJ`нid×˩88U_۲6{!_R?&"ʚ&g}d#0?fY٥!.2#-+D ތi' N.d6N[9qm_E%)WRrOͻNY'}nKjtapWt|uIwe픠FӤp?A}"p+QWxaDضV|͔>8eS}(<.?hlq.ɑS<:p|gw_W`ٕ?>svo$Nv^E]Y>}"*KشV~Dȹ ##+-ū|JstEe6]"h(?5j,#%)E)#%sw#O* vJxGK|՗`+fm]#ݪG<;.;GCk=#-F #2_I70+L٫tY'#-wPMd{6x|_|g#- Hxb#2~#-n;8ZXqG*B{SHkg#%"@G~d~;)(AO4$mNSު0o߫ZnD$W)@Ur0JKP/C$ y+^#%H9h@2H"r:#2l`h^l7X\=e}9G#%4(cHfCGid(񣈫juZ=S3$!K9- @CMf4Wa 8kAX|ue8zx \W`nIw(T*)8:a̓>]!~F*Mz9sWU~#[PhۢS-LXnfi|\߇#%T57E{tSja<]cgC?6[=0/K4_ID'1uUɏ.W8_'wg$/au$a&*Jrb0#Ѻ{$|7uܱ rG]1:[<7k#;KQ26JFޕ֠ѥPmR8<RIb4CCXH*JVBk-i6*y]-;Ȟ0%i[M`cXLVDRE,h5b9OL6EՁrAÕqFЪdhi'oG|<1gHx̀,KC5%u޽NBu!alar(ea(t_߷O[nn1"GGJfm IAb¥*26B40U" Bf?i1lcy0fiL˜s#g> \,'kDbMZgx׮OeZ~>OV/0??(~][)v}ٕ>R? 6/A\UԲkN枸7o ;*aQ$3jh~Z}4J%A_o3R,raa^8Þ\Ir8g]'5a}7*jR{^]\4}qݣb,_/-!G`bMnB+iC!c\Q9 cQVSYd K5.FĎ]R"Pmb2@dQZa++)YlF#줭j΂V+86FH2#-Ӥ#2F5ې)0RB#-Qfbpo3kMcmīL)#:mE>"FGR[\ !hpDCv~>H` ֩>3Ea?]}_zsi \\QzA4K&ÑE*Dlrs7r,!9ʨ~B3Mq7zgՎs ~? Ձs0$#+ #%3VI pMh4/\ˡAU$̪uH#%rV͢0#б6n6%mUv`)ϫ?]R;AOV/5IOrsVjMN7 CQ/b?ɗM%`C**TVP/Wtfxy7O\~= ל@R%43(|Y)~p #-^4Ɔ%FԘ#%.QP,\`+c0ORǖEXf j U38"eB&DZ#%sDzDbk =xǑhvVߧ!X(o0XD:X*KR#@"Fa3~-M (wh8X=qzM7Bv;-Oh>lwƝt`CT<2+6}h$\FQ6[F9_naPq6BF: 0dh}u}j);B.R7x266~lyUE#Pm]B9"X8+ i5786J1XPEXH&B#l#)RY,z`noiU"Xql|hGRG୶ uL$4t`4غՍ&36uvh.>h4#2ƙԡ3$c#k&E@҄ydaL2g~nz=a k8`ryTƧN&#XkrzI>is#4V~hE>UAg¨:#X!;>w!/w[#-]&E9m`I$<m+;hR/5-ƫ9"!\;;nl$gwh!Kq{Z$-Ld"mZ1 Si>hmנtaH^ "#JHY؆il#-/<5n+#-hLc6#2A3옱p N(>ƴbŚf㎓iEֳcF6hfqFB#5B< ; rKjpn'"j=E0UFWMVmre+с'$@fe0}M?;5D.\oPyLNMfGoa3_7nD:u+Al)+7YH܊(S#-HX{+ZeLHT>*# $s˺JcΤ&&HF9)Nܷ͗[նxLQ#-)Ź~g!=ign/W#-̏/!LM*Xxrnpف\>\L$e+mX7HrJF0dڬN8m{Xae8g#-]LWYK6Ɍ%¹4UnU>7L=#-ؙ)Ctԡ1n}lǥ[ CNrg<[qLmJ֕yaLhA(I(1޸޺O`&H":@ݦ0Ҝ!5%MV`3 2b9~Lcު{XkX{ۈ<}H%QH$vTzVF{,B59DzrW٩4+7 ;C0tlpm?i%xTXe =AM mt&Xv[${Ng)'ע (+zá&a ӉMs'kЍoS:MŹE#-543R|+JM'Jqixi?+K\38.9?eeLa@_6%Gu퐦J.Fac Z-'#20hH wG&O[tzo&sWPRiLxJbtzj;#%ReBPw-fՁ=f-0!r AS8kVo]z^1!fxYCw=}XXjiy]5ev|w+vAĵ_7>MpKV2W_u2qdžt ;OUC6(rgcboCM}ܞ+,E-! H e0N3[ؘrSi9!Wqg<ݻESoj߹yQ'o)9KJUS͔\@^,ʈd/H(SUiF dSH躓#%颜J q: C1ޠL1\_ć(uY$߾L' PZSw['H5,vD2PAk3qb̸YSQ3"Dgg(%S;eIݮEO/Ճkmѧ4H@"=vN!i;fC~˽ǜ>ht)^QO}w]U#2;9N}B+~ g#2]Omi_-RmFSٹ7.fh|?ۜZGH3:4 |#2:*6{4,"UL2ro;تWǢ̑N'Rf5B_r/0,Mo:f^wg&";"mu,vutFhow@(܍usW!Wӭt7g|L}.xYgǗ2&Odxr5-!'3껆ykDw$VwD# [P$ޔ:Yܢ'}ۊpD(DOM`rC+$oT|-ώ0! c=j p1d>k) rsW1iiS١ e>c-xy=kϾ;rR!&tu|)j{0E^X(͢Z1iA!?)"}:@*J}Uy?\5k]a#2I1sOBJVj>I[\PnZiHKlUzתaDmcM!TcÖw&(EB\("XX'pܱE.{XXj2]csrXUHQb~ BS K\zQĕ{c|C ƫ1Tu0<_k\U_nkX)u@p30r/+z5qnʫW7ixE_~^M4Mⱬ*9peC {mh{ÜfB+)Zc꺫_$#-6xTm `-rW=M9~n:n|- k*ť\9)Z:V>@<ʣ^7Pgs-0%KZ7yV|򐏷 M28>s3{Bk*V]*㫞 Hj\Ee?Q,Ś9,Rʜڬ~W[`<4%j#w׿#O>70েXPV wvT n#2j+(]n"B)uw<~U#%VJL0fyXckSG!ueFՎ%\3NI8mF8̗=k!'6ƗQK 0([uX"%K`%b5j!Gۜ>Y<ԓD[[>q͎oK6 F}t+x=-1o5.Yh_c(VV9Cf#-,ZA08~K?Q ^O_Gw':00°0"X&Mj~ clZڤ'^-|P6Aa_kxض%+<(0p{^Nz~>EQ#-0o C"=تĝY#%]MMZ Ix#-7dۜozT+fvIS'@]1 J9b6=h>跴g,vEGuUYWuOEp;N|kR߼NX/ *F%i*w:QՈ#D7%]]YJ8 >K%!jwe[cZ Vת!\.\741#-DTک_nmS0GL81hYpk錋^Bu1X6~Sr #%e}K)$H|y_^.#-bn1]CP/*"[l4Ct݄xaj1X8FtkdxxCdA{kr4]T3(;k7>-T*iZfU\$'U9hҝ*}#2n#%AW;WcX5NeVat1XHڀU=DCzFJ9? ɛ[^[XqgPvBmϰ+ށODžirb6lhSg@Xd VWkհKQWv!.>8j(NG#2KP`~KVB(PX{K:n79_56B(HZߦ V#Gu#-t)čAfD #,ژu{L٥P/HssMCOߗ"hM7xo~vb">~iELpji㷇Wbgm-6ӉDb#32sy\"_96Q{1"B#sQMQgM.a-ܾuҞ}y)1L6P͏n|o3RŒJUguʋg683EWԗAWh\`45!:48<[K]csy^qBBI)#2#-L6T4Za#Ms_rv:~ugPz?V1fZhۖi##-/l=yK8- ijU&XÎolUfN"b0;Z^J#%a\3}˛M-(q14&YVTs~0R,Qv~:f\9y {z՝Tn!WC3FsQBNU$d' W  f=lO}|Ayts=ux/%Ish.6>q#%U)AU7/EVk?^ƚ#2P\ wą '1ugP1.GZ]}AFJ_9ƽA,ٝ莝SDv60ZpqWPo t$=`ncgJ7^'M+J;Jrihkj`Շ\|Є3ߋ#2lͥkEX8A`lj;]m#%;kտ5ћl.D鱡^c[:v9*@+#2ISe>ROe Js%| <0/#44Kj{v>^:CQ@^1]\]uo%cӞ֣\ŕ1T%6:RԐx5&gC Ttd\$q̔g3[k'ɶ&{>X.ѦqcHѧ0ܮٖaT\"%#-#-2^y+`$&VR]QT]iiː-v˲ v8Ԑ0>Yuk>YŎ/N_.sl \#-LX56ejsP.ʹyEo`vmќ75dr`&Ttߕu;3}IfS:Fo˟EϘ:ZYl*›q=_:A8#2}w,uiႋ!E\m8-#Y/ (`4 s= kk'xszΊ}sʰ(VƊE%j^YۄJP5!00sZ}f.`_΄EiOHC/dJ)m˦'8 opCM/@|;[^7ЃIrN ;_ש^&ȕ Ĩꔑ-=^{8:>7/}qfYn9jcJؼwf[^2#"GA=/xij!uVqLhsf.]c_ZiߞP886n{>)k@P=txiuE1TB 2)if޽Coj Us<{ OUx*uTI,d&Z:c^b{+T{l<9#2B66 {zבlsć?**8v>Cd0U#m*NRy"*:*aBu@ťaY<%{E,Pg~?Ts1wy~kqilH\㍛2-$\A6tT2ͬ H:xq,4I,C9BIPvMI&^/,`kzYnn#%\~O;'ǧό{8#%0 z@EsIzͅZL@*$و$&KGk{A%w!>1? ؒ~SW()R@`syR!J g(%b8\ϸ;𪆅( ("Eۅ\e#2ÿxdJZő͌L6,J@Л#%oHgwhGLX=HUk9Ȣ5[D#22hYw0޾^Y5$N bQKl>6O#%Y x*Yb;#guYT>mލO߻>7t,Ssp&:t#-Q%)v4/RPka{R9/H0ߊPeӏl2.8'4?D1Au.a01G@#-e@: aҴWUf[g:_J=q*x.%ZnzҲ5NNE rN(NP/Qɱ˛:!fm?_na}Ae2{B[NHG-)Ǻ9@~G B@}@u3j#%'e(s!Vnp#2c떍+mq霄k؃J*0nǁ#%@\PsMX=v(D2m6psa?#-CŎn {F-OvܫKy=H{=Hm'pVo_nS>AńL{8V0 o78{pݧΈSsszChi-s4`I;Cq yWiƺ*_Sm߷>vy,9uCoGu'.8#-fka/_F)xĐN?Sk**!-GƼPC2P!D7Ї6kP鵻Y>lad>b9PY6$3$zˇO2FUH檙Ԑ%^' e}mCXZA3s-} <Ūc- bi#%$ pNQ|aK#yCw0WSjuEtժm԰He|a#-e.<8? 4DԈQ{~#%L Ŏ:]9HRb:Gd8ʐ 舅Acfɂgf[ZLB.\/Mʍ[!0RgF}G/mf 6<:&bfH  1- #2ܶ3)gp=lO0U=AGRB2(e mM2w* F9E}Jvf#%DlVܴ焩ĜTn*{/iή_*B5wTnՙ|TZj/,@&9t3n*Un9aPF -/E2ȇo0 \Sxil#n@#:X#%39<̡b\ghM0|36q#2t#-8LVUPؼJ^7̝BR D5 OaUȪ5zf=u eɹT))gmRAg'i ~FVԸ"?Y>!N{r70䖛x09k૝Rv+F9mnxn7$w5\Qsd5Gefz!_x⥍19Io9ۆ!|Eqݓ a>id:sUuO\ux~c?<(!eRvey` |v:_W ڕF,r#%#2#-GګK"3֣#$9#2w۴~4ɨj!*,NT .$֋i O =>-k>0XzJK"$%ȮX-zy5z9pN3uuɅ5uvW)3)w_F4H "S O~B8yOs^oOo;dc__kJ$i `}Wj*y@Zɷ#%]syyGU8m,e|`^kG9MiVp1$@n*o^ #2SK(EơаP=]+ǨmvĂ=%u:ax05b Vm"zg if' Tű7@v/dy憫=xD~\#EF zVbը%펅TqvX#2[R gf$2([g!Z9`^u!lf5d"S>:OWXO{䛷J|L* =gƚ(uYk;gUڗHvNX)IPHEQ"}27e7}vk/@I#ȭ#&#%nNuA*dRцAiO]K'әʗG%PM>>u Pr&E4,v#2rϻAg0plL#)GVGs,tujpL&j9Ed1eLn_Gaq:bng{8#2&ɩ 2#_UJP#2Jz *!]$@({ǑtrCB/ן쁶̪y}j$* MG)DHޟ^?jZ.C1iJ?TXփL#R̲}Qvr^;J&ρ5ݜr3o0#-}-MEU mA .X'&@$3aЂ4Vc#$zjȎf{of^&|:=h;7WkkZ\\6a2͡|CڕBB{rn1,xZ2hAfȶJ2S!+^'~6ņfd-8f'6i=Yphs#2t]H59S$d#2ᝡJ),Zbf ϧN!vD146`S>:j87q#%j- M1I#-)ѵ\Ύ\6AG t љ= #2#2C[ɩRtG#-m7[Ri98r2VItuȎ(r'! =(g 1#_gk<+L#{xrcxEq)F0K9"+E!C%bP2#%6Xgf&#25A#-+YAs\L\iy+\|\/24vEwW2<I%E=lHvwwxZGM#- -GnjO*TXJɃ(q߻|HAu(j6[hctD3S5"_H˪&M,!VepAd )#-!*آv 0AᲭTÀ0ɕ 1}#-w-} &ކJPPI#%[@MZX/Rl~OZ:u,G#vMΟm%Hk3)^fIv_*xY6=3&<冖rDKU3,[|rBL*aݣsT!pAmةqQ2adq'`;%Mw~;l4{#-.ǑAm[ iziI!)pk/q$o/_gCArA$`qHäRΔ@ M' #-L\9a ƣ|5Ç6Hѕ3l& w9@$ҁK46(WK0rm x˯va\x%n)h/i/cpaA5~ߟP*2;LosOR!2j O>e <`d%'uylG,hκ${ t:uAC2.\uC$byDRxLe63[m؊к?ae6@4w3t쳩8M6 7FIt5#%@1p^g0^j{4Sm̺$~z"`/l裺LAއ"T+RwbU|g3*'xl*z#%,n{|ʋ[;kYLWH)F<#%es?E%Cnd.)* ,Yeg0 X&ISaK3#%O?qs ~2\mcn:G92#2Rޭ/ܿ7׭ `v+>w1V Y-!-)w*#%JdR僲G(o55nPKg]uE^fC#%cg{~_KN?$i*Ms#2ŝω\~FQ -jjygvhI$(\q/cƌ#%0]~^{Zx^jj\f[y,Gu06G!#!߳}9>n۴oI (XR8}ݼ{*#2lVֹl2QĸCЅu̩E#2f{pd?üG#-W5MtܞѾ1U,X^.uBs!.:6+:hSq#-"IDx;%rOA-b:ժ #/kuۧ#%.wA ٠5"]u^p78ܴym/Nkǫr$ݽ@X#!B'36/\GʃFu)^蒻F钄Pn#AQ!X+COR҂ @9Ic֚ ?4G#-*[Ͷ+bNL*D=E8o;p,8L=GMPc.rxwru$ܬcS aG:.)O`sX18UZl*+)_qߎ[TF_p.9uϟaȗuށ d wݩFwT:g̡5jyF~mRG)˕WWd:6Gi2] b<Ƙ0]q}ˬ/P?'G-4W#2y>BR_`rzTb Q$z+eDo3^[9<9#%δ,n*&F~;ɗїO"V8yQ*?g͟4:YP\i#2Ii#26mUyӅ!AhPV2zuC֞<mW0lVSpy|=s%1eIdz:(ީHq{xn.(T~G~#%|:qA>92'$SB-+]d$\h>+}H}cmbOi9;>Gzh3]xUݢ:#2c. =bzMN9;9'KQh2b>L)wVjhHR\1ߍ䰋Z0 5wN׭osTDۼx_Ӫ6_#% =$nd?#-]zxk@2 e+hٚtv4g^Nt6p*WpS"hMQu wE?>}C#%'>R>g@=@,pBrp ^rB3A#-p!1*&Y[pI`GT0M [%8moV:h=PP5-/#2=϶u/QhU^grߓ%2KK={τQ -!yE$$slR~Evk~}1*eƤwY5+!8T-s:A_SkM]ge2"k2Y.*}kD:R("~h*{ot[gdBU !'Nk)4ѹɷydN[& !RCW+U0*@y`-,x¶PL*3(#-sms>q񣯵p'N@녵WŇGV*yD>i?gQ٦?f#->@C]lwǶrKZˏXm+NΖKMճ&"jgfѫϯ XqP*SnAkZ4"urҶ#%hZkؗHI3}bH#djKn9R" جgE+[!WP^OA#2aW]w&#jǜXǜQcɉ_}b7Jo.-~枠h?lb>m|O=m,|]u!(TE#2I$yfl#-˛܍@Wv@{W{2"`DˡdV/aTXd'Q9$~u<6ME6j,'r} W͘0.Ӆ}lB.iLSͩ7?4)Ċ_y؋.;lg42mj附L:{{:}}sŊ'#SNO۱O8y5&7|lӘ|K+c:t!-и|rXn'BI|4{.Ua;A0Pr@"%C}[fy+†fBgGYc7˗WwZ_Qg^eW1#290lq(rNY!rBOPLcW8GprXVZtNLԃg#2V]neuNЏgd^2o\EE$ W"i}گĢTEn4 ]MD ӖL.tRߕIqaʡG e҂͞j)#2vA;aĭCi|J<OΤ<#-Zqv^+#2Y )xze'_M+ #-Œx+yYgkD[/t=R\Qs8.Dned#-@nb;w6@'#%3"2Uh4ּ̠{Ł1c} P?]0a ĝlHY,#2 whi@ȖBg#2*j(]5/s3b#2sQf KBcX-8F#- a~t~w`t1=ޜ#-e^ghh%!λ>x,RDmN7̃s-3/#2-#8)~/s!H3[=zN?HD fQؗ XbK Bt_R޾!y>]m9Q9)-w%0`(!:UE"r=#2CvtZVl4&J\E/z_W퇎IxM,fn`x̻L8D]*DCE̍1{zqs$ᑰ=WA#%dFk#%ȁ&Uo4._gz~2dqۤ>)Jj`(yBn*,}rz-MC[dlB*Dmau"lrt2WE++<ӿV:}5rlS#-YvQpPX[T9*>G[m9YxpF+V"!֨{Ex鳬*#-uD)c񙔅(.Ow~o٢=3|# Yob?*nq/2 Z.#%#Z?G}zn!b-Bsӳm|o{$FQ6^$026z 'Ûԃ0?MsO$HR1#% H}}?݀gpɟn)R _?xBpUyߜO^[LaHDVȀ X~=@+E TL#-*#2|?_~?Õ4t =KLJXdϳ'_6Ca.s+hF LvJjbO'#2 yF[o#-c(Ɯ=gvI SV__?O"03E6ֺh"؛qZ_&z|İ%;_ss՝H6!KG~]CѵTbE\Yԓx#%>BL#%~:x\/`mӱH&*LBprzpy?MԼ_!8G#-*^ʀrrH:rp#2Ps!U$INb$&1awuEHөIewCv'=%PE(": U)>ck{퓿;!`d1;%&V9CTE9 a8w?J)Ly=olm#%.>QX|'PV``)Y I^WkݖZFU5#-(}ʉYYUa+T%Z(t+W!#O{Gcʇ}viK yNc0t8oVb=y$>t_ }'Gp9b;0g2|wmV&|`i" yR"g:FII߀z&G  R;rԀ˛MS`myrxuJ|駖7%{NfC{$Pj=Bql~DNPRq]-ggXX1_Ux<es߻ׇ#-G#VǒjRY~#](J;#2f[7n ܱD P]Ug(#2KwKaRG|cTp/=6y+UN&]^?iɄ&|`?uUr&IlBs;#2_ ojg&{>%]0@2J<xK,p's>ꗹ)K}$YSEJIt@@*Je*h9eױJi8B‡F(+ =lA*g#2mu( 3#%1O&S]L$o͹zTG)qR7扙3wYX,^%:yXl6&i* v?D#2+#-aBM]AmQg[˝#-= hX(vj1^#SUuPE鳕vnue}ώ!VBPhld91~姷 h3Jʥ A#)i#2D,ZJ,%`U HhsS5;lI3Vj:c=7{<`>w V,?^ΐPv ]K9cnK,%(R`q:5E%xJWO@֚7&Kh|DJ)6?W#-$8x?F>4BüP<+c*ÁfV"{ p [{ZUuɱ*A3P>[C\KY,>/-^'l%gú8vHnn첆]&Sۺ/mPߵ|(*3 _kTH%iߛ`7f(W[۟uP0.?Yb민^kA\9žUW} ;xHX;SlPp"J(sa]FzeXp0{DF֒_Nj2Y,)Pc!{5Ddj#2^bwS!Iۦ #-Jc=A[Aձ."C!ġACkCJ`b.)l ȲLQm I|]|d9=A֘ Q6+>:aɸlL#-'}}jWLg&q]\kõpIG ؑz?oB'q$jUjJ2]/-Y%+.5 6b,ޛ1=z"U#%w7EU.O3Wx%{"דDb[O3FǶ7O7kz3|b7 z v]㪩omLDz::`CxgpD$Pw8*OoXq9)xT*`Sh(*FENsV,h >P4i u>vwl^3ocF znCFT- ~w.x`k"cۡö,@#%Y.q{̅WMj(`|ٵJ7\ YyuvpfD{xeKql_t:[tg|ŹXGXn2ҧq/f-_`tC1n(20 l(1D6v N18V#2Hx#\-IHwD7f;}Qjթ GZ}O#qz8m|h:R+Z3Ew 7@Q~7^#5EP| `#-7///K#-,5dY=Ӷ==nGZpe ZHk.2߯G3.#%4{r` M_i^`f.#+}_:8!#-~l 'Y㯜XQ*TӁ'6ucB5aIopɥRC*"!#K>o#%|XG96q` Y`сN3oWG'|S<ʪ[ꅿy]pԠ""#-%RNe*r {>5?[H/&~? ԡ#-M9U *o73#/ilP=)'#%:'"?Ql?=}' <4,6pl[j3sNa}|N N2+yLO>F`W0;n$L3/ܦfȨ9wUN2kG|ܝoda|}nA/4A#-a{WU,.MRH.Eis{m UL#-Cd3OPA|<e} d=(_Hiݨ#-Zp>!NA%Ui.\M[_:Z+[NN\6 !q@!HpcU,)q9w$H#%#- #-z72 oMuo:S'X I5[l'~A^;#%#%$;6x+_:W…i6ب*3/Y#2֘> w`^׊Ҕ`B-!)2:6S]aXS :2PZ[`p9`t#%ziI?7<>moS~yID!2z#%D f#-}߅S?5qQ$CHBع'칱N 5NT8f@PekΝ3ͬtl/kfEdO>~]aPUWcmϗ27GFkqU/rK&~8 BDc1tWuZt""&/Vq8c䴃$'!થ^@R#ʞA%S.{uz.u)p"gD$˙K!K]}"ױ}{;$BwI%$&Yd><8؏eLǰ;:a~a#(m:kԳlfIbQN^t=O>eB#a'St#%H?<ǨZM?_w`"#2/lŐIUDy}vPJ؇Cb;UO__G9<,h&g& #R̄w^WwEpl a_Vq9?rOpfm6 Lbhp\YoJN]4D CkA۸?&G7G&CEL(3ߛmE#-2+ڦz~.DDc<2R_o_uoT]p2(:nhBmjv&ˈ[5fIJx1)@)Q2>ݟ6ݠ,}8_,{_ 7>v_(*>qkǴ,Ah_qcȹg;|#/[l6B 9!?8>Eiq69۷?9Cy#%GS#WG>L zvu7Nc4°Y#%1v^?aApŃRR#JM~#'/4W| 65✟?C{Ð#tHj#2_Y#2~}}l>T@%l~e|z~E_[r N|rP4QjP6OH_X&BV@#- $?b"}'tvjk|! Ov1ݞ}e;YʳXDC+}`&(ۥH\Z #%!^rTj>Ӈ~AbcUνxI=|SNH?mDVJb`4GD6%#2(rX~Y3C(LPQ$dOidE;fDl^#-KĴ/^ؗ #%oT&}}WE?##2z#2EC3애kE7Npw\nȔ=xqa]˕aEh#s+P#%m$ +!J[d#A,h(=%.PmHS*B#f H^ !8tMCVô?_0`MƜ7*$v ;@ AlJSѷjSJwn4S#PשbY();3#-!?yr>O4PbHZ#2T,pd(bS%m|k^ttʄhR0֘KF:)d oM9K982ϻ=}{p%f #%'ĊY^c#hs6CH'W#--1!" K8.q #%CR}(䥅Rze^\ݼ#%Q8wgOAx4rz~QI9W,#%i! Q![ǛIӠ;\';o\wͅ@a龶Q=ߟObG=M.?X%&(=!_=g>6O?ƢB;}_G{B$?&ϸZii7L3Ra X&bĕbI#sу#-۫YHP ]S8s>|.ПN~zO.8xCn^ھSA=#-A`eBS\ p>goԩ-#7v codJX4QBړ@v<Ɣ !WQ8s<%fh(ty2 (ѳCqG3OgUt}7q@%̏}is OB3u0wb(! LUXfڎ>zFFBi0“%N$ $1E JD\?"c:{N0ˮR@tګH,A ,<vf@?/,w6ON{#-@>#2 H#`\*=wSdwzvrw:$d\UA luynq#%o!,G:W#%yܴ;!!$R PYE9rB7 `UBP =śnh q pNX?Nܩ3>\~y')AkVX$cBd{aW(UPqX8`-«T9TOM#z+UJrfX#-p#-a (]=畃ϮyzHSȞ)D,|8B99ԙ+(<.r'j'X;Ri P r[. g09n#%y#m3G]#-(~*lC:#Ёă[@<}}!zxx'T,~OFDUfUQ-"8;yN~ӸEPJ?IuPn)= /B:⩔?1~Ṁ=.vg8)(f\BO;u7z@B#HOD"?Z&6 oI+S̨8gL$&GC^~#-4$?*)#2D#%+ZuUne-\[T9IAYvVSVف9>py{pJ#-0I <6.#-CG`]݌}߂XY3ED ]Q|rNǟeC2BWH6zNӓ\#2}ػ(9V/N1}BW%jdס?J=z7x!d#-[* amn7^#-bX$`}AX2KHm$Qcp*qTc}$`m >8H 3d9yU7#-k|Od8A>kCVKapEliؕEW>~3iQE0Pл=>_O}Pk>=?#%Pbt@<'>j#8`6pFBBM#2I#2؇tvO`G!m?ݧN&W׏#2"eȄ&)#%+_O᥊0#%4 X?>)^X& XCM :OQ(0MTd$!0K NB?}Ǭ?*ن\~glM=%S;߃9d^SsMFnNO#%R~<4oќ^eXGr`Uɐ턌?3ދs˿SWڜOiMf#2fT3_t{T֗EDZh|jd y<0<߰=#2\#+6gbW,a0!3f-kJRYzJ~D:"f#t&cM1P(QX'Tʠڑ\&ϛ:Ԅ(f#%*BَAB-P1?ܨI/W;5g`zQ&fMV"l7"?īXxC D<9=aP&_mH̯ؼ|_k:BX $d#2s$mSE`YYC_8vu-z+Ǚd% oNñTxW#27|vf#2A} #-,GѨQz^;W& D߳'#4sHߧOqM{~@1Gr<̯=W#-{~bՌMf{37NcWvmoΚC%;Rf#ީt5au#KÐS6Kn.`=lL1B-Se{?wTSlbk{*$!eځ;Q1RP$ᬅDG#2@<0Gz{:JB`{1)#-tzU C׊Cn:TQ~w;aU%#-l#<9hN`(I6bA""1򜆻v=#%UePJmU#2AˮCxE!Nš\}L\'h ; an+9xɿ#2?=u+l5e#^].(X)P W="#-J9)p=;vE7Yga@%?4#-tpDQ'~bo_?d͍@C.M" WPQа"NZqX7UkfҖv2CGF#(#%1%mڇ^s_[{kAfL #2#-M8S'YgGcT(`{JnUg4 )ҌÎ#-g=엔xmYe3Jc{6/Wlvu{zE\^#%xiGO{Eydg9K{~3צ#^uMxA̸Gj7ʷ{7ޓO.'w/#-h\;a^z|5-C'Љ^RSiu`*UM 󦔕(S4h-{(!#%wVot6]3k#-.Tc}l*A6L("浐vzVa00ODD7|C.cF"^:R2D9\"ڕ]]?#2m\wlAEX'%٤Hu?lRU##>|[8OTc=Cl)/ϲ%ŧuw+BM!\v,dG.ӻ[Zi"Jy#2%D 04u*#-cqa?L*#-Qʏf(KwP>tߝ::K;Uxs[!X1#- MK ܒX"d$qBztVڱ pxdG8C";&q1SkaΆ#%Eu,1y6Yd]OgHFxLhp!rNcnMˆ||F1z@XA6^K;͠oduܹizm60`uʻQ(=C;tOL#-GqW<1CaQb샴l Y #2"aPUv;(FehwoU{ne}gtpρ!X<n4Kv;8& B*(Fɓr؁20@ПffQӚ&Sc;^S$4\Ⱀ8<*]-Sv{O#BMp&='8R%PT-k=SƦ$ɍe.ӒƌQH=dx;#-{ӐC[HI'/,]}񵒹#2L(v31*g2e̱cYVeJ3[6k9k^c1JFlqM5,ŧߤՕv^-N6qJ6#-jB.`6(Z'՝,λ['Chn OJQ$(iFT yo78p!!GxVzq u%w"AƊt:JcD٥v}7 ɑ+25(Bdf !^')-s(tiXm_ʪ YdL]]x=arHv4R-m<1@P;9HI%o+MNy>Ս@Wvз"4tY >=E'>s>I͂/@7t)#'xӽşQzHcA69,L!Y6m-=CV96^B@-DFMdX`4llslyeˑec`|^Sc 0#-@u(;3 po*Pvt$v"ŶlK#-&LQ,CN#%~Z˜ 4MEED "u(Rag,3Pz`,!3!'yjK\pL@#-[68gd#;#%#{-^o9N&qp>F#Ԕ#-Co.?/yO! B1+{;~mfR'1 prK~Uʡpsum*PID__#%d8lPao!D|!!%-{weO? ݪH5Gm#2#%fy_>G;#%vsB:8=eѬNA A;Q.Jª?3" }lc~*h9Cz#%d CtHB`h@vqoܤ`qbՎ0#-;6֌a#s0?6D[qVFTy12v7DNP_# |薐>s B/}d#%Gg-zCPc'hJn}Ws}:vۦ c@y.:@҆BP$C)(!+*RJ"*#-ȀLr~aOW4nʢD>ֈ16g#2\R:#-a)`#pvv`ꈇ3AA WfkRLci\؜ 3Kî\ 6stw#dttCo!#.!`o;H*%_=>#-O#-X:h} *o|'F"Je;cDY܁:8av޻'L&DBCCXyF%A^Av3=Ts;]ء#2X4m|wk|ou#%ŠsS \JKf&f$.?/}_>@_$my)T?a~.#-_0\Z(fiD.r!CԊŃ8SXR\l `mÓq|ao ]F@}si?Ϧ#䴮M[qg'?Bvn_#'j<\J &%)Fx[G*F%DE#2! U*PuO6(%SI|_L(QW숑4IQ*yYSlʤ5>z6#߱[0[llM>՞71#kY̓Q#2z}?BFS$]Ը@6#-"(bڊMɃei&$ѬM5MmIZʐA3#%$̂' i-SGmWXvp=Hs2"$#%BC@#%x`!7ῠg"V7CPxhluQD(aYXmEYdRQT0،c{jB#2=t$7f٢mDӥ|nhi(ȴ CXab(ay&@a2Uu޷@^#2).ʔ ;^^;cƗZ17\VX##-ިNa!UUC#7xzYPF/6@I#-~aE>LOV%Xz=(W&>Pbe;[9s'+70#%|=zdžNyvX?YBRp4,>SڮA%O*NK2GKP( AahPlK0}ۼ6x`RvPe'΃((@LI#Z:}Ã@y;^.':;ޗ ¸(*t[6w%.'@ }]=חmC*%#-eƻă9#-2#-/F20ǸTc"۶X?% 6AdI#2#2Du >+hßoI6'":Ӎ1=cQ³޿68$2C>D86e8.9؁P#2{}C#%ADRTT=E@ @3C=1Wogf+n!"Bo2 SfQcP_ɘ}.%XT50y|S'!CY>~H 6o[kA|&&1&aOFa]5}-,FR"YD#-k/\8;X#`>hUڲ $bfo/b̤ mf1zlvءC*CCueRZV{0`Rp KLdSS+pW ul`#kc"Zx: h84ۚ6Wt(0R1WWmۍw5Z=sb-ie .w78 ]dm52Xl-@KuW2.HG zh7yK\ܷ;,t5A͡ ]#2w:k貝Qy_BR-uujSH#Epv޴ڣ#2q`X1CZog>修hinEa79ۯ=Fs[w?#2,6##%t=x~q}`ףr3\9H)sp5!t5ևma m^Êit u9a&ߢG'H;37HUSM\_~bs**#-m&41ˎe$vAT__{bw^] 6v$Fz'p$%frm1 G]',!v;_:.Q=>5$HDq6׸Ozgv%=*d::55#dBDP\t?B9c<fŁ6NLͻ"2)og]u@XudnTm84msB@CC:nbFln6Q]Mڔֻ}\F!VF`W, c (ZJnY)v{[.cEspM#%ꈕ#-UM#-Mb֙F&p<y(›9uLiYCyDDdCTm%+dm]wgБ`@0 @|E|v?"K)0SŶ.?e#-4"#-`|uYVD ]>#u_Vݰ e~VyR5ܫ7#2uv4זѸOsB|v+2]<3wZ5\o2:ݮ3F#&LJ.1 Pp\T$Ц>V! ΢r>Kl(s:\PJCѲ}do \KmF]7Bc5B cR`D!0l牍\T#ٚ&X" _IRuy*oQLL& A\uo=҈meRuQ& "4 2bͥ??9`4cs45,P"PE=HBHawo.`M#2{m#-G;̻#2X:$sz0ßշiS碘!0!}M5,dI tߑm3@|D%#-9?Nq9`Pou:jJYl+~îb@8G g,4i@T ,;11e_ٷ\dC?ۯqt(mIϹI1u1b]0A /BB kƥ[F~b`!Yga`)pA7%=#2 q@Q` H{}mkpgH7,"\$ܮ̲h#2vu3Aau8N;[3#eBt0#2!F"hi"a =G 3ܱАxش8X T#2*```)XhזO чIG`L/Ǹ8#-4ƺȈ6j]9p_KE_4oڋ[eQ;'L\H>[G_;"K\d6>d r_D#%jlN,Ϗ _0z29`i"HC`q$TH b:U>JV d3K'I;l5yww/y8&H=T`F6ѓly#r#- 0 P6 X4G#2Me4fWȃ[LD.|MnlHHK *Ul`bEd#%Cϰ{-Vndݗڛ_4 iА>0"'L=4ķQC.`+, &)5EXg*А Db#-˵%q֪f3 8]<#-o bIqBHDBGd} 4@ iO8H=8:Е(;^L1NiUly#9#2fFwm1C߉8SoYw9w@2Eç8H'3X=İ #%kX4Ѡ!v %Y<{@ⁱm{IF[lA6("(bsI#%8\a*GB5UTbeX}(6೪T#% b69ѧe 0!$TD#2aC~m #2KBd`>BA?_f_^P3#]:aCy4[*{کMXL9i! C'#ߡWd#?aU6s?O"@Dv=@OHA=іr,#-UTj浶,#2*"JJ `OQˉЀ\`zNuUr`3=|^ )_U;&&Q$S&JfiRLRjIu&֐J)&V55ŒQ)ɉfH̊4"J&DFlbRYA2hZTQD)Q1*Be%2)QMF4YMIutMV!o0v`LX[{lg1c?vCm'U!,3@yn0wW'vmQ&[3WbwpcEF?=LK7n  MK7"y9YQvuۥ%}RLZ靆LV+yfT_5-saY.Xu\"&fN2ƖY5X5UD^>^Q@#207*;~,1ySlZov&(l4Km矅^M|9x>Nw:. TX ]<&IY~Pޙaz,PYn[G!ꪳh#QBR#2EJJ_bpϣ;oMVM>Wwž<sE >UUb0onOXLg/>PX4b-i{U$nFTRerT[ћxc}6Fݞ6ߝKfm1OÙ˛I&3_e L|f9c/t"^6Lb`Y̴'(dhcH1e]n EJz<ꜳJV^I)P_zR88 q@FkV,f2ea!ϜJBHɔ[gHQ=T~dY05%;Pi˙9 mUI_VLjDTك|&d#-tIԎl#r9<q $! 8R_ԝʘDe&5NצaVk`s˶`V7J)HhTغtW:mL&Be'֚3n–Dgi8heg{ػ3A@Ew Q~#-`vLspњnE0x\v9kqǦrf1r}[nM"$44$^.g33uc+C0',{MbS)I`;4#-ink-f%gq.o11xWTb8Qg6̼6JE%Pm>y%|1QxI$㸓 wWZoiO9d,u73/+8dGc#rehl.utfcGUeLb1 e*%ȋiM",Cau\3Zƪl6H);{ڋܱeUi."qݢY1z.skm 4lIvq,^ IodKeT}vuu9\#2m' )%+D#-o8K6:Ql0ĒZ~*5:&R &lpW{1[hԎybdR|rMᢰ(}:2g¢1mǤZ\jukNRo,@nY1À\y2Tv{Ԉgʔ BF&5X`´/M.X9gxu#-j2N8nc%/dXSkyy$;3zJ[JAv>|U}ຄ\XPthlGF T8&D.Pgg23j&1NM@^z?8i'gW1n3cr26bf2[ѹ8hW/z!`6Z2jJ0+3`m;a[%cpx#-,}pb#-#-lfL+#-fi8l59Ae~Hbg.1A$PkltjNm}Eے0W:z2)dS0@ati߸)l. # F" @LHlYS~!AٰeNˆ#IF1ԑͥk[.UY"m a4"ԁs.܆Z<2)1-Ѵ++NŘD2h @Qm%D25U(cE&q2 B]\ΣCxs1 Vx8#-Tb؏ 4#r9.;Vk˷I`Ŏ0vkPYM`AvԖ80i)6.UQ┒ipc)LVcܹC`r'#UL,#i3i)3$`Ӵ`.p-{ b0;#%#ة ЎdHLL !0P]'ʔ;!=hTT`D|ґ#2_zOG#2!wwUѫ`5~o}A'4btq<apX5@1@ GdT-=k8'̖&H!];^GNUI>T'8?\9:BvK9qiqpj)ѼduQv"ì/:#2H/u͒{:,Gm`h]`d!xF" }'B[AfW܇Em#%rymO)#2s7]r${B#zzT#%0qK2LS#2N"A #-xy( * i&) 2Щ 4Y XPMD&({ l#2Sg/ ګTEWoӵH0@˗Tvc[˛#-\+kO/-oz_@xd(RGt;EGCO1!7@9N]J3E^pE>X@#-ݑ}k&EfW߃oE#ߑ=qf`>Ē$DdF8o@P)^٠cidHbQbޠU)Q8Yф#:E̸(&@!,hA*#bf!C`u~v ,^\7&|ڭA>"S)5hmhډ1fAD,"#2TzVWjv\ xGS#%#-{>u 8I}ֈa4DA1j6]&HRd 1A;f' <<^]B#X;^-'/S#-zT̔A,+B?,:Xo$#%'=t*Y#-#-4-)-7aeHD#Ա.֥Mf#-#YH@a#%tb6j@Bk6)K 6 iMY#-G?)61Wrs۰dGuѭu̡jYdi0`_0ޤ4R#2;^y4 j#&DUU i;kbHT%P&1#2DZE9hB6踂M@B]R6is)xzI8=jYv0٪#Rb)uo>KIKXP* ^(E#%C4!OjMo!qd0m73ӣ.$mc)QF5ŸE­rVL(R #2#--[=JBM{G1X6HZa+7`LYFjjhqhE{`nd9:pDz3:X0cdS͎9D«^P(,%gq8,Ӹÿ#2mX ,{#2p0~],F0cq۩$;84ZAvrH7¡5V#2UAp#-PBͅi\\mKf[F0X9%ݱl{Φcl3mLdHV( .0 pvvW^`&18 rph<[`$$$,#%#%k&zQ3@(+PgZ_̙ӊE'J >(I"* -&)<`A@zd!g=)b<L$$2d8(jOȍ#- PJH)I#2HWB2ܯԹT.GOPYKo5:]c{U,EbUJ(lD)#2ʦaqK,S6Sa#-;B]$$cA##2pH%Ԇ o#2@ns7a Y Ԩ҇i{ZƸ"e^p"Lq.d\apn6J4i-NFf=f.MAN:xs{~[9 ٧aK8P,a;>LGoYE{>x#-NR5H%#-iH#2yik8E#%&d'ϣćuǑOM>jIpuI*rOJ\c31G #2 6RSOS@aQĆ ģ>+Xl&Eٜ.Ktl @k00e<`nucnݨvBRRDXl᧳#-H#=BX٣~Ld|YPEȀ.8'UZ}7A/,b*Qɂ0՘yB`w?Fi Q1ٟE #r,hcGBZ YFR$ŒA+GCq^ |qy [sȯT@)#%c>FO#~㑇_lO?bU#2pA?Q/Ri&U$"%1H $#-1-FƤE4%J#2QJ#2mYLfҘmVmDȭJmB_.kvg]13[iFZkRZj%4 SȢCňl5Rm[l%6ZܺѤͲMMmMl3#2ilJ4BVeurJUM#-s]YdjĦ&BFI "S8|6ʒ:応+K#2gy}Guzc}d d4rdxcJ{Ֆ\G{#-y"$(]f TKMZ #%F#%9BEE $ $(J+#N&A!A+-# W#2DS0ꂚSaM{L#%y'%$SC-1KLKi PD$(ċSE*Soܡ$QY%eiI#246e)MI6f2PX4el&I, V-RAQR*R*RU!$mJ!id(II&Ra44RʳlcTEY6&mIEkRdɣJI V"#%f*$ "JD0T"L%A$#%J@CKo#%d 4-PB H!#%Hr:zPMۓhIYR:"}]e_&9ݰrQ52|aQp7.ƨU*C(\yvԵDÏ;{{#=a!>.( tt׆ldh3/dgoJ7i(wr+`J&\9߾`D՜/y 9 .H36qN4s9HƘN0mB=+#2 z*[?l;&)P;T+}yBvOVp[P#-&1"$]zD}^F= f?Lt#-B#>\/UgтlP ,>ɡv"1wڠωTidYܼ+G鉻k"đ*7ғR:[6=[(# ]b (R]ƀ}k~lʪ(hBp#%#%-@#2j 3 \,{A7 )!C.kUiEt`3qt'(zéR19v:75xfjO) ESUmF%at 4XnCL~٥#R=S>♅y+n->.V-HC7|7qY-& ѺQ&&xD0@&%!%bTEۧ^#-^{{=L?eHT#᎑J}Ddil A+B*WϞ ۞)XMY{EÎ4jP%R4|/tFQC'Nb5Xmm$*B$k84df%N1DD^k֮֫Q`&B+U5awn) ")y4֍(iH@M6;QG|W]M:tzL:'  ]B#-$v9GHY+j(2se&{{*z^_euS,/簺FG=j^癹;_h*^w'hihArYR蹷CY&cT[##j5}A@Ѵl@&$eB("&kn" Ge.*q&|R yM@:#0];8A|dde! >ڢ\p62 MXbRȚ៳CNPr7,#@<m|$ ! JQ$r{&#AIVs2ŃC؃cp{'fF)$IHX*#%C.M O6@Fz5G<*nGxn9ܣ*䐜m>|ppx Z(3`"i( VXZ@?-E3~xsMp.E. $q#%%鉨7;JoiG0$!o&\^oGKPsנx,! @]А#2jlAW>' $*CBf)#2@B,A&B*RGFD6ZBx\QHf\ʆdSCۍfBą_kG#N=j~pܬC'= MOzQ9.7~XF}3N#%3Xaa41]X/ӏ뤦h[˗7<)-6POpo~4Č`Ni-iԩj^UҢLn0XUu+FstBI#' ҠUP#1PԂ(H~g`5?z#2)g]*IEIxCdbH`YLߠtI6ڂ*Kf"Q ymGM$D xOq88%P]@D>d#s ,\H! @iBI8 ŤMe=J613Fy7lCY|r%"@B0>}M.ߙ(?ChN2wl:>l zGMuL5%^&^y⶛3WXBAt:#-j%?0abcC&[E pc#-w Ãܘ}#%(r$xlC> 枧#2zJꝎM%C#%P$*Lj ވQ FX#OHMQYb#-#7I62r sWcVNek HěG#tIF4C#%Yӂ907Ѧù!3faNpq&n8afӎ4e|6ߌ4fg<GX\;U᝗?$aD͆Ly2V:>wK#,^}iPcMtqdGϏzj4k#YA(fjkijMё++ 4K*eչmLSdZ(Y+f*-miel-eTڙ4M5KF- UE0L t?K?~0揭rp-4Ap+!rTPER\#2£w$KOI'Uƭʹ-n[KeC$d`>y_h83#2tf2hp \/sND\BOGv#24C>4Ni#%NQBE#2"}CCܜP~bSz 0 TL ? {R"*{b<ǁzn7#%KU3z"/V:j9]/&%t̻KM/Y<K %,,#- ZB;H#%P3zrd^4BAjiĹ}9={3xw f3nl,aV '*) 8"Kc3'EkC|MHfeSƿSݓ-an,MʞOtl"{Ip͊3 ;ݟw䂆ϡ1łiA  ӅpMaj. 1iBH@H(#OTb& *z@794 $2n?M`(L"c4& r0A$Q=xsAA-eeIߒu'ְbN&ILҺ5>Y6f4C3al4§`H0߿,K$ ٙŃ#-G,-ʈ9 I4c+#- cax}LK@ i]Ƅ֭=/P[2gU34 B9T8iI~0vLj jAX#2cuhF&(}WL >@uZv@\̽),Dsto\q4&XA_*D-ĪqbLǯz8BB11N Ub0104@ĦcO&g=QWFli(SѠlAj'G)6QdPĈR#2"gAL#|-0"`ѱ)bhsL}>~>1krkY O~XWeCi\RP l6OA"GjOggf[,m/+s[5'WjBI7nTV&MZPd-*++ݏDyP~; #2#-;៥p.^XOL[$ۂa G5N>j"O-DQڷ;pfaj Vj lUT)]jT6л5_­sxgӌ27k,ur-[PPZӣvA@ه #R`64EH$#-nA2#2{f#%띿jÁ}je#2eǿ]ټN6C#ao9TO-#2;CHvPIV{[ @:'wƀ܆fMww&"_d$*{`#-#-&Xj1(YF "U! K4b!SA { ]  w$=;B ,33$#-_X6}ĭi!Ʊ#Zb}3ZaMi Ʊ+ ¦R d5`C6 @Dmog5;o)ZpR։&H "5hy 9x5bP#Xed9qB[aȔf#-DHF̗a/mZhmmۉE7slA0J/6!elܣ=ӺrS~TdS :Ӟ~WYx7 pNA>=,.rmO\t5#%%P,VʬE3LLJ$܀>oP}R`d`)VFŤձSZ=$D`|5hj' C{ڐg1:> - *k5d*D9.>\c+Dk>w4| kq2t;,YUQ{¯,ʳj~_EԞ[fL$MI^'f} 8z#-0°bҗБ')1{m.8pp0B1o#-Fy#-v#-&&uKR;,`.J߽vf 4S,Am{>l׳#R Sm?26:ѸrZ`Z#fBqkyRD8U^&z>y桳b#xnM·<I(2-ji8>9C<цaD#-4ti7qreA}lHDlMjǦZ7*o)#-n4Ko~Mtg~#-tLo<,!D~kvm& 4of HNb_u:]QZ}r:2kPpPFY;Vu1"BPc|s~>l@.-vMٔdnL6vq| @{ 0TI.nGBM9%}=0}|}WS^>ϯ_3$-:F-3]0]/&lD뎹ȪDNA%C#%~|7ukF_2,g8ǂ#`>16A;1%rQTDl [bax*Ca`5t=j\h6#% -@80ޢx#-N}y6=kp;E;9UQ8w"Ĵ9SH˛@~?$m qOvҶ *hoI:Bkim6CkaH`]l\_@a#2c}X M;64-}V}qF:TI8p.!|*t&#IF<7t]!l-xrD+H]"t4:$x&y~yKJK#-!EFݧ5dJh<<^ݡ<[u|RFm A+`Z4}PaLLpMrByEWv s\#269{#%1 0l#%JBtfyS5#2v<#2yHլ2S qx-XZFQi)X@iFCR4"v1ű=C췙]YaeՁrX]I/i}PAgSd𯁪!v،9VmZuhASZ<o鵂 CEhA\d+*b}CPm<#_#%BF}Zn6ТR;#-¡] n{:J:6DGzv@;$8M_"BP+aQ@xf?l^8LV`M9ˍ9q!sHV z'@ՙ{@;%UIG2$|jg;NP:`d<Wj˒@u.cYC2E:?Щaga09 ;_t &:CxbFH!*EVTsr|>]O5&BEA4ģ}ϛ}5۶SuC\Cq]K5w8QrʭI!G#-aU^Nwg("Šbmڹ`#%/PT^/KcjO5Ay{#%s5/ϤǡQ=.nt_Q=)]ĒBIw01wքL3#2i a'چjN=(! 4 "c`Bt8`*f#jc5F먷ЗʃzY01Ś+ƚL21ġC C#myPhʘADƴK jBQV%<5fу#Ki#-k1c{z JX>>fބ#ч'H.~̰EҜZa]3670_;Ϸmd#-\mE餞O/v:WGڃ+m9a]2bF5#-?CF/6ySEgⲉy߿eLJDeŨ5c2'>poXz#-h#Vo#-LRt2p=<޳VeeΌYVe:zt&:chcM⫝̸o0!{:ajڋ2f8`##l{ֽ#-ˊ{1q\2Q$?Mj&[(Y6Vw)wѝy&}ȅl8\*Q9OZ^,Û!:Q:gXRkäaw8ԝcr>%#P-D>[rc и&:M#%~8(::T@ЏtinX4YcJIkN@Zuu6#-jj*ů:WknUݹS,-"1R\s0Nr.өh(E @ Epbfヲ#216ߋ9c7MJ(ƄE b0Wր P l!/{:X& P!DM%m "M`ɨ1R yTj)jEZlT46ƣS1655IY3&%SEPHi aOP1Pqz7T>*&* jM+ R-DT9xB9xaaa#-h"Ymя#-{@!搒Q" ){]*(Vďr/CM:ݝu1QUbۚgWiJB c4#%biIwqd!{ pAG @ 0w!^U@P̚<0XCqӐ[TLPn+b(`EL˧tg#d6-M'=OOv>Mz`L },]fMG-'zk'Z͸fc1cc+iLH1)6M0̑v#-Җow! 5d1T}e|H:Vܑ@ akQ8BB$,Bao40(/:܌$p} pC$\]AYibC*{x3E^xm3DFAŭf4lm3(!QjJ q"VkTbB#-0h4p8jTrL+?Q Rಀh]3ߢaNdP-jo HoVZB Oya!*d~ZCȼRXl3iDxF1A$l%Scь0K ٮPTO"=]u?ըUsBIӯ\<$*::/+2d7#%Њ`CY@Au1Q`̌11#-jቤ#2(JQm#2rL#-G Á~tP_ s<=.Uuljcz/vjzNiޞ[ c鋀1$HI8P#2)#%V ƙ:`XQ ?xRPE ޘϗYXe`+Q060&3_HiЏy=!JAivteW#-(6%(f"i$l&ʕ۴&Yp5{vdܷnv]A1MMA'ӧE(jBXq"U^ f=[O:1"2dRGvb'=(DHQKگD%ˠ-q(F06'})_}!:1PMqbcQ Aj{;bg #%z#%%dBI@,HpQݏSC#2U"YXV@<އ@h12{FkChV! oA#%T36ZO-UJp*uт9UvϏKǰ}w~ۢ|d`B2g=3d#%×U[m1!nL#-RZ.#->2э) $ȜݐȲsH;3&>!Fv[/5E(NsO4/6f-Vzl}0}] |8p5}9@Ѵ#-3\x+zHnM_ q0K0:7#-} b:7-ai]#-jhKɼH[4B!@6RlXK+!#-]<:c9+{K(*x*&#2(#-#2]{z0%O,Wb,+65r^jf])("mI h|wMA]Mzd##z)jI iУ]`jwsBGƩXHk!ԒI&#|-@cښT21(WbP9¦+.jjWrotk1O`hF`Iai옃'2YlV1ܚQ`IުT_B#-2Bdi`*B *^ԋh(41}!ó%PJ@Y Jv|8sR=~jff/M1!CqNq#%{#-BC&E[ \sG;w,}#%U||#%1[V8Km636WiE'zڟh8l) $M}!\y8a3(1Əu_gNvkJ>g|sʳE; n/X"B'aMiy;Hs [Ԓ,bAs HRzA)IFFW=e#2#%e#[#2j<)И O!WIsoߕ4k3>Ve4ƗSCqȊ(/sg"0ƬRy!]gizA1o?οX(~SSyJ1ڌO0ba틲4MeHbV1pUuŸ%zLi!)37V5FX$~#3^@c"T9I#rOvGtޱTVx_sT,8G=ء$EP6~q#-0%f%!!LhC^8>d)(Rb@PltI:!CK&3{ ~2ZJ<+wO؊Ŷd2@!Jz4/sΉ$@cz5>_WpQC xsP#-~EφLUU620h&&)1 1Q4(%%*"OȽͿbvRjX"p!{;(6{2SjRIٱ(6/{ % ]&BQ4DT4;>t*Fr>)@4*T}ZY\e'Fw˚1vLBVfCƵn;ji3U8|Z`A[it]؄@2ak')W۠}ʘrC*@)57rIP8oxE/_|;]$*i hĪc%)[\a%uD%"mۍ#-@[`ɑ@#-dA9"fc(̊cYC#21&16/#%B*%(2"$qU#%FXZ+Zf6UˈTT5UC%ja _ EirP[cxlj'F\\1HM3MW8Y!q6 ]5 T ]w"WChc6H [y!#[y`l٢q $eoAMHd,n$B'mܲ5zHtmQiIShUT#-KeSn&x##-)65p% +*۵AuʫN(6xͰ&%R(܉#2pci6TJT-1X4S `Fj"`Jr=TR(ʋYMȗk($MTCSOyl2-C3 #mfѼsq\)Zjh2Ga%2aaH.ʻ|u j0y𵘲%!]X'#-SLbȤ`[Qd3Lpxc$Ԕ*8ۘ0O#24LJ*8p#0oŁ-ZN5FA4B戠2+N# pKC,6va0>Ac0݊lcjg'9D1dK#}P%V7%܇z{C'oR(62LdX!ITr ,hܺz\_)<1#-dӃ ht`1kYfm >MΠ `zJafi/I(0bQHD5qecpktCd|E=5WayQ]}XP"%}ákcP'&W'&3Z#iLga!Ch&<iLU6&š"  Q%4BQ!bJ"Jp0N)Hp#%ӢJ7DfQCʜu4a4P&m?h_}#2#2K)2UjCpB#-:=ݷ(d,g(߀WžTQƴE>39 ?5JHI21zE ٥=$AQG> rhk*#2J%1_/$8YGl;ʆy.ד븱wvE&" 3G4I#26Lm֠1̥F4Q:OĐ`N0XTC3 9C_>-`Ю2f5.XkB]vzU t 0|^{-k '/1<˷sWPH&0VD~QO܇2=R?qۗqGcC#%[ %׽#%ӆ@h.GĈ[;Xԃ/'>@ۗn!rU oOP9!S`x]݊2'j[PX:y=4e`@B'svtlXRGIǎQQ1ߟ;>u7ęaƴp$a֔ȏ+njpa℻:$FAiP!8ffAۂc+QBFA(M X(7qE2*GR jۦCXۖS bLLLV'QTW/wV5_6l;; ;%I~֘#-sӝĬ؛}2Wyt#-ԑ#%0Uv" D\,A'T"~#%REi~tH ѵblL-o2BfRfeba\+R1dlE 0R@#2Ԋa yv &* Ϙ{E0RDE%@-!'`b!O#%b#2}DS%]L*T^֔x t)x<=|7'P2H)t_eH(zC64Ęʆ#2 &e#2 FZ44*EJLm"kZKJ5KFT-h)Hdu6Y!UlJDqA+"} 2M<)iFAN7b4yD!DO!p*+hc#+c$`0x#-rC plU$ #%\m(P -U~!TIG7&dwq?G.ҙ<ٚY0K %R)N3UM#hyUEj{j}=C0|{vcֱU\]@aiIzz߰mDû<d%m֜Q 21;<%ԙ՞`(l׬l9v0hnIoQ]7ySxjFPP޲_m$̕rKzIKݛ#2{,S0M͙ts֜g #%Xe7.ШuRLƝc4n;^1ky1y2H΄#-6 !׭usJQS]>Oa;<4X K4cNLaJ76+hcaRq|7̝G٘^z < ]+n t©׾64$a =?zO"P0Ná$T&%Mb<a8#2ƻwe,R;e`rG>27q;46)^z+(30&ۘsyCd#2?*_@CdAH BӪfy;I]ʃlج#g<B m&菁tAunV1Y\΃|Kw'wɍG?LreIۥOU6J"jiIaS{1֟S=7NkT4n7F-qP)|.i G* PWLKC ^_ӑ#23w0[6\]StC瓿5K'lHǎ%->O*en7{#2vX A,f$ﴹ{9q'L;m2|\bhy,=sj.Us][qO^|63[n~ȐؽΝC7BFzᛅg]:Z[C:6Pt66!tYTW2VLa%޶t#-Rux1*W(kDh0( ݌n*13UЄR`N5'pY-ivL#n~yhHK£|JTHHtJrm@Iv}95Zi$^\!#22+M1֌c4-h91Of͵DL;5:wFy:Vumb [jz(J1e}{hG[(M=Xae4\fe\Ǐo d(PHsCImڶE-8LLHP*&.&A|cס3k&y!Z S4Zd5UʯL9b~[\sm?]I=XzϩC_7 ؃^e_> F<ɿʫ;g~#2vnr\?'|Ny82Wcm𑍡9$cMs#2dY2f\wbw]>kQ76PG[vD,TDR? c~Fsz6K|n ڧ"ݛi)*S)뚰*BPlPPHІPiD|o#}+W?Q$IBFFe[aF6Lc&T6bkd-kVJ4(ʍ͡M6F$e)!%DhcM*%"Z2BihL6#-D &,)$#%8i_3y5C%O|Z2`u Aue~!#8D9o+k1#l5Kc=`P ĆuCmשhvt)#-&G0"#$ d$b7or&λãrZaxnTl:_ #-HԊ6?ݫ'Έ.{sҁn@>B#2"hb5Ik>fծm65(Rj4cV#>d0hGM q={@D$J~ћ(32| R;#2-CLaѪƈ|]5pdSRG)1@ك&alz`MC o*(Cf0]5 kL:#FbaQ6I4c)ʽ.h̥Qߪ-cp.D;26#2pAV$FnYd=t"%HsCh*R5L9)DNFQ~X#-lb3ԌR,=H`v`9$!1@{#%A@M2$aEC0wR8_*pш{xt&#%hqͺ%a"+^zύ!X@x_>Pr&Itލ}2'j#2ϷcA3(\&L3@>8pVDV.m׻A}_νĐlw׊phS< =84#2/m#-I^f j?8ćĦJ% !XO-Q8J!G,!fP~1.G0[B/{_%ڦSsF@WLMρ!"EXve!|g$WYLS&8bM %EBbf]8t°zf4D] NhPqX#-fMi} -,nXDބB\҆hYE9e;U0M"D4(4'A(b|mk&'.P#-#% TAbÖzb*ӱnVG.k|1qxNjrS}^ͅ8혺b 穜4 0{vM4|/8՗(;Ln]k[u܅tL|0$6l\D%yE 4$tlIC~LL$p$#-"Gd KNJt0EٯT8:.V.X(񾁈C 2G`bp F#-)=M!0y);w"*F3lːaTѶ҈t[TFL̴, #-&#202V]i:ІvB]f ؊):fEPS1 iC}ՅUrg&6r.zNHuz5#%ha`1eu |FbP|#2ps{09#zBb=S#-;DjSA'!~o}m0"=]{5M{Fc̀ QalPB~z#% ;NŽ4W0V)e|Zƫky-#2q2EqAgs ޣ{3thھ0m?&@XlG^"L>40mw"UUOEM](WZ#%<+ĺ9mXb7;:&91/ۏKnܺ:qcn#2{ܲ*D5yZEHdߓsZhm101057@`M٪[۝xnh׷$sg63WpN63HZ6\zb1Px"%w/OhnۿETg?\#%3#%#%"?If|PWsJ*`hm ;"@zSfvU ̏QI.$6Fw~v6zyCd)5QnY66帅PAE%0qY2hr$#-[QAEWW`JS 4(;=B“C(HmujTH4K)*5Q>wi!UJA)@(#qԟiR'/.v@{#2v=C_((D$\Yk21XƦQlbz[j$BPQ=8j%A ےk5|>_ lBژ*krv!f!ɃxwȐxkҺ#2:i2Izs{"QBK #omLC{$-'烽;<~!#-ul{U6(@Y#%N+P(_8*r^($B$,#2P P %Њntuװ@:`>E*ȰZ̲eg?*|4؇붽iLx?5-cm9М ~4#:ZZd0xLKX줍%0; ?!я~SABDJdTRF#-DmRm}5x@I0U-^s(1 ˜Js3d6;`Y mwR*WbڌkAjP4%YZڣ4l=5$3_@9~y7Sw3\li(;]>#5:VxxK#홑#-Ņ41kCiB NCA Ճ7YJ#2vZ#-I@ HFwY2nڊڂPC(hi$S33"X ifX TXH`R"#-/MˈJilm`:ZRАS0Bk3!p0hF"(S4<0 8B6˂=MAM/@#-upԵTll@4G֙\5lZi#-^0B\DRN4g/⸡pKB=Sۄ$[䃪l.)RAxo-Zp|?Ę"hjT|Nlq2jMݯ#-.do?SKAגɊ"4HڽrwIQg6%asRzgk ~Y7wa#-"M>8&-\(u #-eT|Bqsf|CJa?4%޿oTehKxP|5x9[ŋ74 :ZE!_aCKkE3ޝm#-XD wn@Xds[^ q'ZBBDPK& unyk~_6˫#9N vs}PW7Xc3KDl53h@&Ƅ(#C0[eRі|$7̋#-N͈>/^jAi/NְǴ%nDqy5#2wT1'XOv >Ѣ~n^kqbQ nC!,JeGA!!yNF}/m=:Xt[homzLc'+}:">0z>:-HEе+@^OKKx#2#%  BЂDU#-2A6i#-zf}BVzW)#2v2 ʸ"TEÃYsL@Μ@mG#%l*b~zN~I I&h #%QߐjB MωESY8,g+,*7&C0yr#%x}KOgiI+5ݭxu;w)VtW <87K=>= mnҷ AWC괷 t^bc[VvSRD725fH- :%L#-phUNoLR;@'gtlb% BmLk0t|cEcǶnM4@Pf/i4HZTIqwYZArBlXYshi2A#-d;l ×;dފvlx34W 63 xE/q ~Wn&gߖN~e5mYPmt4dLdp)*e8]?جDeA=1x^n% Xo]lxB@a3OD3ᄻ$8C\1O\)PA>[z^֥)1J?s(h؎v>b!q?Vju?dbkdžX)ʩ3&8cvD&TAJP$QO@)RGgxJ>^\6b ^WV! Ȟ_'DM}KAE/PEg^dpCOw͇AnO컉@%A[xu8ftG bIV( ?I-xz篩Q d.PlPxeP+1?5K!QQ‹,\tgQ yg.fa{59v: ,+0/l5Ҿۼ#$ޢZZBAuݘ8*$%^ֈ.xp>#-;cѩMNOi$H'UU:T{>@)„* #<== diff --git a/wscript b/wscript index 2f458a294..7e7769d62 100644 --- a/wscript +++ b/wscript @@ -2,7 +2,7 @@ import platform, os.path srcdir="." APPNAME = "bgen" -VERSION = "1.2-dev" +VERSION = "1.1.5" def options( opt ): opt.load( 'compiler_cxx' ) @@ -30,7 +30,7 @@ def configure( cfg ): cfg.check_cxx( lib='dl', uselib_store='dl', msg = 'dl' ) def build( bld ): - print "Creating %s build..." % bld.options.mode + print ("Creating %s build..." % bld.options.mode ) bld( rule = """printf '#ifndef BGEN_REVISION_HPP\n#define BGEN_REVISION_HPP\nnamespace globals {\n\tchar const* bgen_version = \"%%s\" ;\n\tchar const* const bgen_revision = \"%%s\" ;\n}\n#endif\n' `echo """ + VERSION + "` `hg parents --template={node}` > ${TGT}""", always = True, @@ -63,7 +63,7 @@ class ReleaseBuilder: def makedirs( self, path ): try: os.makedirs( path ) - except os.error, e: + except os.error as e: pass def create_pkgname_stub( self, packageName, includePlatform = True ): @@ -99,9 +99,9 @@ class ReleaseBuilder: tarballPath = os.path.join( workingdir, tarball ) process = subprocess.Popen( [ 'tar', '-czf', tarball, source ], cwd = workingdir ) process.wait() - print 'Created %s release tarball in "%s"' % ( name, tarball ) - print "Contents are:" - print subprocess.Popen( [ 'tar', '-tzf',tarballPath ], stdout = subprocess.PIPE ).communicate()[0] + print ('Created %s release tarball in "%s"' % ( name, tarball )) + print ("Contents are:") + print (subprocess.Popen( [ 'tar', '-tzf',tarballPath ], stdout = subprocess.PIPE ).communicate()[0]) return tarball def build_rbgen( self ): @@ -191,13 +191,13 @@ class ReleaseBuilder: def release( bld ): - print "Building bgen release tarball..." + print ("Building bgen release tarball...") release = ReleaseBuilder( APPNAME, VERSION ) result = release.build_bgen() - print "Created %s release tarball in \"%s\"" % ( 'bgen', result ) + print ("Created %s release tarball in \"%s\"" % ( 'bgen', result )) def build_rbgen( bld ): - print "Building rbgen source package tarball..." + print ("Building rbgen source package tarball...") release = ReleaseBuilder( APPNAME, VERSION ) result = release.build_rbgen() - print "Created %s release tarball in \"%s\"" % ( 'rbgen', result ) + print ("Created %s release tarball in \"%s\"" % ( 'rbgen', result )) From a096db9610c5a27d4e466f4ea039595b75bc8c46 Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Wed, 15 Jan 2020 21:07:52 +0000 Subject: [PATCH 11/12] Fix Issue #39 and update CHANGELOG. --- CHANGELOG.md | 25 +++++++++++++++++++++++++ R/package/src/load.cpp | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 18ce9f58f..b9e80b863 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,31 @@ History ==== +15 January 2020 +---- +v1.1.5 release. Changes are: + +- incorporate fix from Maarten Kooyman to build using Python 3. +- fix issue #39 + +7 August 2018 +---- +v1.1.4 release. Update to fix sample subset issue with BGEN v1.1. + +2 May 2015 +----- +v1.1.3 release. The main changes are: + +- The rbgen R package, which gets data from indexed BGEN files into R, is has several improvements - it's easier to install, and has additional features (see below). +- New, improved bgenix vcf output - now up to 50X faster. +- Further performance improvements and resolution of a number of issues across the library. + +To accompany this we have written a paper which is now available on bioArxiv: https://doi.org/10.1101/308296. + +13 July 2017 +---- +v1.0 release + 7 July 2016 ---- diff --git a/R/package/src/load.cpp b/R/package/src/load.cpp index bdfcc7f51..0dbb75749 100644 --- a/R/package/src/load.cpp +++ b/R/package/src/load.cpp @@ -67,7 +67,7 @@ namespace { // Called once per sample to determine whether we want data for this sample bool set_sample( std::size_t i ) { - if( m_requested_sample_i->first == i ) { + if( m_requested_sample_i != m_requested_samples.end() && m_requested_sample_i->first == i ) { m_storage_i = m_requested_sample_i->second ; ++m_requested_sample_i ; #if DEBUG From 905bd6d61ebe714a43829cfa9c1fec2ade1fb1e4 Mon Sep 17 00:00:00 2001 From: "gavin.band@well.ox.ac.uk" Date: Wed, 15 Jan 2020 21:08:25 +0000 Subject: [PATCH 12/12] Added example/example.8bits.bgen.bgi --- example/example.8bits.bgen.bgi | Bin 0 -> 11264 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 example/example.8bits.bgen.bgi diff --git a/example/example.8bits.bgen.bgi b/example/example.8bits.bgen.bgi new file mode 100644 index 0000000000000000000000000000000000000000..bd2a8de41bd3926b11b11b3a4d95899c83c6dec0 GIT binary patch literal 11264 zcmeI14RBS(6~}kaf+SE15tNUR@Te$61AX7`g^J|`Vh9ETAqW}7_<#p_m=N+oA&g*% zh+t_O7+OK84J}%bDIddFfubN_k*Tdfts=Dus8p#{K&0TP({t`_@a&DYx-oiiO#1^J>-IrzVCzW$dh&^R61bxTi|_g`NZpIni+JzkTH&#W^))X?I*SV^9z zB$iv4=P|$Z^!IqCl-E>MR@GKjCOjp16G}Xzitu|}VPUq%GpnjLS(mJu=_wdx{l2C) zIknY?XU?vioTw?QnpPICs7O>KYTcCnwXYSZfA2TH*UrHaRa* zmYi8OxxTKo*XZJck+I@Z&uw|7p8lWBF#F1svOP43Y>ydK%Y{GN^Lf@;S)TC)CBuux zm3WGa#up4*I83(dmXRSFCps%VGEowqcS|g=m$#PjJy|SygBwiDH#5(bSm?1`rUa4s+y;CQU z;Pr_m+l$8*3@ZzSV)^my0Kc-tMTfK)jOCYA1LRv`!`oU6#PTQY1Gyj3p!s~+xX{+w9;xEzp=bFK0&twm$` zW77dLxt5%(wMZ;~^g@7#xt3_sS~!+J@+3er*W&B7hAVU1dVn0RP1>V1T$q9nKt9Q} z(xY0#b;&;l(1UB^&T0+UC2ttO&$w2cqBUHXp_u?TaBY-FYq&148$e#-+K8y5`EXsn z-yh_sT)TC&)^J@0w|A{eZn@TQT?Rc0P{Fxd8nlM%65S8-7}o}^(i*Ny=x+dj=URA+ z)^J?{vjNJv=6_ymxGvrk06*p0z!O@-bs6{|!0lYS@sieXU9yK_5E>0rp?!vqWJQrI z$Le*D;(Wx(5df?46RFlG`szDHaO7hDVSq4xqFpB5BcoF%=N@9)Rx^H_xU9Ms;3oXY zRd^F<`N(`}W`RSMx6KF0#ZP!Fn_*GsBT<~Fc%=u*B8BVXz2S}?#tDga=rIXD(UyDU zCbfqTry{d90DPBj(o!petUiR;b(md8*maa$=X`eU^RjDJe|)U|_^AFEUmx@JF<&3^ z^)X)`^Yt-bKlAl7UqAEpGhaXR^)p{T^Yt@dKlAl7-vILsFy8?44KUvT^9?ZH0P_tn z-vILsFyA2a4Km*#^9?fJAoC3}-yri1GT$Kc4Km*l^9?cI5c3T&-w^W+G2amL4Kd#k z^9?cIF!K#F-!StHGv6@t4Kv>`^9?iKF!K#F-w5-KFy9FCjWFK`^Nldy2=k3F-w5-K zFyH7EU%%Jy9pLp1@C7|S|Dd3MP$)`y`&E3k$D8yKBZNAo4yX<4$7+@ury{Bsd%~|2jDg6mW8GUQ6=oR z1>|K;y88ns2dy?FmRZ^NAy8HabaxLKyD=Z9odIPG@kt!@+K| z92K=bNdW4uSNd<4r3R$v>bL;+EgbB!#8FYpyaZ6q!A@%pNWs+sH=dSbr)Eb*t=B&R zI&iSV4g*qbrThb+k~?xhBgE0@#bVu$6dGtT-`uVt9?~Qomy3YihtnZ;`9H1E&T#XCK zN%x6?le2w>q-?ph9N-B~y3Z4wtS-srgGAKe&S?tsv#+c{6W_#$$h%w z>@6RSJX+hUp=OlsH7@X15{@?hwlKMgjG-vcferqfRt~_=j3|16!!olrC0n`JS6JH z#Lvxs92C6`(C43hqn%NOa3RD44FHEMb$7X=263|D{yKnfS%u?w3-yeGG^5%}AkSFv z@AQ$9RB_)!WHA)j2x= z$}DzWnqetNrk(|Ljm56(tjCOM-6l{SEVenzu#_c}e}vV*Vw?3QA&6?t9Ds<$u8A3z z^5m`xfIb$xM(-1XsLmP<(9dF5m1;IXnKCI1%3iBgdaFQc#RX7zSnSGb!%}2TOaT~Z z`L3Mh$N^Mm9LMCf*ruh1rHVVg5!7OfZPFWt0IJi=K;3Jx%hno}YHrB_P;D%Bncg!5 zP@OsvMT=ds!>|-rV@?CCvRLZ8 zfE%r`yjP&dLT@YNO5BUYEx6UY3=2LJH!uavie&)ZEcnb_+L@}&THJPJS@7w44TmUV znsNa~Sn%n&j!dff#aefIomy^S3Yj0_QQ|ENKGmdQDn@Hog6e2FAKzeLikSyTqin&) z*J~J6v3fD6Z(H!OXAMk2^S~Z}CJR2cN5iO!pW(iDjRn8_s(~qL?#Gu{Kd|7Jk7^iI zu@Y-lr3D{3XJ87O#)|+Y7JTHahEWwO@~|aa@QbMirh3$H5MY1>znG$7R7KNZfD{Y< zLmvZELAvJ%sDD}TA3PeS2wOH6)N>YmAjiNIVe?i3++x88q8dh3;In}K7QAnafhoe~ zb^%yu!L9n41@BI3m>Qa#eG0&5!C!g1`|LgAQ>%?LMObwV;3>=bsa1{~qzGHsA7Dj$ zwHW(9=Ko2||8-wF`zxttd_n$8?-s`_Lb>n)Zn)awM+djO?v(vc>XAk$oVSk!SgQ7k z%$5ynu1U%fJ+oTQUFdwBQWgsUj4S zdwvd(X2CsT2BwJITmLR zm-pb4v|xEi!&LLOVuIhmVe!d32Bw<#=nJ5>a9DiuwuY(ZZR!nbwgrDA4NMWXW-`DG z3;sxGm?CWBWw-Oi9tNfeTRjX^rUhT@u3?I>^*_f=3HHy-D~XYPP{R>gu$`~rA6MA3 z5a)g7))apawE-An-TKS+T_VAAb%7-lzD|CBsq|=;xb5k@YeDozQBRa-M#G zITSjVu?8Hr*g5(MS?ie57#O^ zzW4T7v-NJ(v!$9RpT;ryEwWWbwBS|`e!m50KkwX|!a^LxrP^e{t;?we_dlUwT8#tk z0OnY5-^*s$lqpZ*QD(j+7oF2`l(O*f36NG7mPKbBnN;!m%>dT6MHZ$SnC|_ja{%vK z11n6?Fg=LZ@L*uIa5=n>fhh}L2m(B9!NWZorss4Fx9?Tfu!rRsn6mKT^`JUgu>IFG z9G3+T8Dn6|vjZ8pF|ptwqqQ^D`M=;RfwwI9=A?nC&hN)9(NPP&xm?3k=Z|2WueIRl zLIYEs-+LoKx&=oYG)#5=(1Wg%lnk!caD?jo?jrybEI7Ezkx3PQ^5I)m%Kx6?bW8tV ztfs31=%sFwpQw)VIJ_@+!(rJB+vGy{shkXR8 z;3ZJjxlT6j&?`tKNuIk8V2njCIBaCf@b`a+FM}+3p6NMMl;pd(hi_}ibEKguliofF z>M={M?O|lfmD9La?rzCdJ|j~$yop)7*OKopFfzsasjj#+vE=D-BU415NCWIjyiiZ6 zH!{WS-_B!`x8$ zc(%3FvL>xkj=s|c